邯郸网站建设咨询安联网络,公司网站制作第三方,广西住房和城乡建设厅网站主页,哈尔滨seo搜索排名优化Ja-netfilter#xff08;idea破解#xff09;分析
简介
ja-netfilter是一款可以破解jetbrainsIDE系列的javaagent jar 包。
原理简介
通过javaagent创造修改字节码的时机。通过asm修改相关类#xff0c;达到hook特定方法的作用。主要依赖power#xff08;rsa方法hookidea破解分析
简介
ja-netfilter是一款可以破解jetbrainsIDE系列的javaagent jar 包。
原理简介
通过javaagent创造修改字节码的时机。通过asm修改相关类达到hook特定方法的作用。主要依赖powerrsa方法hookurl拦截网络验证码校验dns拦截特定域名请求插件。
原理分析
首先先简单了解下整理流程后面详细讲解每个步骤。
正常启动idea流程 点击idea快捷方式或者idea.bat / idea.sh启动。 根据环境变量加载对应vm参数。也就是vmoptions文件vm中的内容会作为jvm启动参数添加到启动命令中。 本地校验激活码 rpc接口校验激活码 使用ja-netfilter流程
运行install脚本通过环境变量指定启动vm参数文件地址也就是jar包目录下的vmoptions目录。启动idea。加载ja-netfilter vm参数在ja-netfilter的vm参数中添加了asm支持以及javaagent参数并指定当前jar包。运行javaagent,及ja-netfilter.jar 的permain方法。 加载ja-netfilter定义的插件也即plugins目录下的jar包。初始化插件载入配置也即config目录下的jar包。通过javaagent提供的类转换能力转换插件hook的类。 本地校验激活码网络rpc校验激活码 ja-netfilter代码分析
我这里直接调试idea通过idea.bat启动。启动后在通过agent技术嵌入到idea目录虚拟机中已达到调试idea的目录。com.janetfilter.core.Launcher是主启动类定义了permain已经agentmain方法。同时在manifest指定了Premain-Class。
使用idea.bat启动idea 使用javaagent嵌入到目标虚拟机。 进入javaagnerja-netfiler定义的permain方法开始执行ja-netfiler逻辑。 确定插件目录以及配置目录 加载插件加载配置并初始化 ja-netfiler插件介绍
ja-netfiler的插件结构大致可以分为三类 插件入口类例如DNSFilterPlugin用来注册对应的类转换器。Transformer类例如InetAddressTransformer用来定义需要hook的类名以及hook方法的逻辑。过滤器业务逻辑类例如DNSFilter类转换之后被hook会真正调用到的类一般用于拦截或者替换。
dns插件 DNSFilterPlugin 初始化转换类并注册 InetAddressTransformer hook了java/net/InetAddress类的getAllByName方法以及isReachable方法。 修改之后的InetAddress代码大致如下 public class InetAddress {public static InetAddress[] getAllByName(String hostName) throws UnknownHostException {return DNSFilter.testQuery(hostName) null ? new InetAddress[0] : super.getAllByName(hostName);}public boolean isReachable(NetworkInterface netif, int timeout, int ttl) throws SocketException {InetAddress reachableAddress DNSFilter.testReachable(this);if (reachableAddress ! null) {return true;} else {return false;}// ... }
}DNSFilter
总结 dns插件hook了InetAddress类的getAllByName方法如何匹配配置的域名则抛出UnknownHostException异常。以及isReachable方法如何匹配规则则返回false。 dns对应配置 [DNS]
EQUAL,jetbrains.com
EQUAL,plugin.obroom.com也就是访问jetbrains.com以及plugin.obroom.com都是失败的。
power插件
总结 power插件hook了BigInteger的oddModPow方法这个方法是用来对一个数模取幂运算的及x.oddModPow(y,z) x^y % z。RSA非对称加密底层会使用到当前方法。 可以简单理解为在oddModPow函数前加了一段逻辑就是如果入参x,y,z匹配配置的规则那么就返回规则配置的结果。 public class BigInteger {public static BigInteger oddModPow(BigInteger x, BigInteger y, BigInteger mod) {BigInteger result ResultFilter.testFilter(x, y, mod);if (result ! null) {return result;}// ...}
}url插件
总结 url插件hook了HttpClient的openServer方法。在执行逻辑之前调用testUrl方法。 public class HttpClient {public void openServer() {URLFilter.testURL(url);// ...}
}testUrl方法中的逻辑为如果匹配了规则中设置的url那么就抛出SocketTimeoutException异常也即不能访问指定url。 public static URL testURL(URL url) throws IOException {if (null url || null ruleList) {return null;}for (FilterRule rule : ruleList) {if (!rule.test(url.toString())) {continue;}DebugInfo.output(Reject url: url , rule: rule);throw new SocketTimeoutException(connect timed out);}return url;
}对应规则为 [URL]
PREFIX,https://account.jetbrains.com/lservice/rpc/validateKey.action那么这里就是只要前缀匹配了当前地址也即是rpc校验激活码的地址那么就会抛出异常自然也就无法网络校验了。
Idea调试 可以看到在输入验证码之后会调用RAS相关方法来校验激活码这里就会调用到ja-netfiler插件power的方法。如果匹配了对应的配置就会给出一个结果来替换oddModPow的结果。 校验验证码成功激活成功 点击继续关闭弹窗idea会调用rpc接口校验验证码url插件匹配规则抛出异常。
参考
https://zhuanlan.zhihu.com/p/494706735