Ja-netfilter(idea激活码破解原理)分析

Ja-netfilter(idea破解)分析

简介

  • ja-netfilter是一款可以破解jetbrainsIDE系列的javaagent jar 包。

原理简介

  • 通过javaagent创造修改字节码的时机。
  • 通过asm修改相关类,达到hook特定方法的作用。
  • 主要依赖power(rsa方法hook),url(拦截网络验证码校验),dns(拦截特定域名请求)插件。

原理分析

首先先简单了解下整理流程,后面详细讲解每个步骤。

正常启动idea流程

  1. 点击idea快捷方式,或者idea.bat / idea.sh启动。

  2. 根据环境变量加载对应vm参数。也就是vmoptions文件,vm中的内容会作为jvm启动参数添加到启动命令中。

    在这里插入图片描述
    在这里插入图片描述

  3. 本地校验激活码

  4. rpc接口校验激活码

在这里插入图片描述

使用ja-netfilter流程

  1. 运行install脚本(通过环境变量指定启动vm参数文件地址),也就是jar包目录下的vmoptions目录。
  2. 启动idea。
  3. 加载ja-netfilter vm参数(在ja-netfilter的vm参数中添加了asm支持以及javaagent参数,并指定当前jar包)。
  4. 运行javaagent,及ja-netfilter.jar 的permain方法。
    1. 加载ja-netfilter定义的插件,也即plugins目录下的jar包。
    2. 初始化插件,载入配置,也即config目录下的jar包。
    3. 通过javaagent提供的类转换能力转换插件hook的类。
  5. 本地校验激活码
  6. 网络rpc校验激活码

在这里插入图片描述

ja-netfilter代码分析

  • 我这里直接调试idea,通过idea.bat启动。启动后在通过agent技术嵌入到idea目录虚拟机中,已达到调试idea的目录。
  • com.janetfilter.core.Launcher是主启动类,定义了permain已经agentmain方法。同时在manifest指定了Premain-Class。
  1. 使用idea.bat启动idea

在这里插入图片描述

  1. 使用javaagent嵌入到目标虚拟机。

    在这里插入图片描述

  2. 进入javaagner(ja-netfiler)定义的permain方法,开始执行ja-netfiler逻辑。

    在这里插入图片描述

  3. 确定插件目录以及配置目录

    在这里插入图片描述

  4. 加载插件,加载配置并初始化

    在这里插入图片描述

    在这里插入图片描述

在这里插入图片描述

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了BigIntegeroddModPow方法,这个方法是用来对一个数模取幂运算的,及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了HttpClientopenServer方法。在执行逻辑之前调用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

  • 24
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
2023年的"Ja-Netfilter"是一个基于网络过滤技术的创新想法。它旨在提供更高效、更智能的网络过滤解决方案,帮助用户更好地管理和保护他们的网络安全。 "Ja-Netfilter"将利用最新的人工智能和机器学习技术,通过深度学习算法来分析和识别网络流量中的恶意行为和威胁。它将建立起一种自适应的过滤系统,能够根据实时数据和情境自动地调整过滤规则,以应对不断变化的网络攻击和威胁。 与传统的网络过滤技术相比,"Ja-Netfilter"具有明显的优势。首先,它能够从大量的网络数据中快速准确地分析出潜在的威胁,大大提高了网络防御的效率。其次,通过使用机器学习算法,"Ja-Netfilter"能够主动学习和适应新的网络攻击手段,及时更新过滤规则,从而提供更好的保护。此外,"Ja-Netfilter"还支持用户自定义的过滤规则,使用户能够根据自己的需求对网络流量进行精细化的控制。 "Ja-Netfilter"除了为个人用户提供网络安全保护外,也可以应用于企业和组织的网络安全管理中。它可以帮助企业对内部和外部网络流量进行监控和过滤,实时检测和阻止潜在的威胁,从而保护企业机密和客户数据的安全。 总而言之,"Ja-Netfilter"是一项创新的网络过滤技术,将利用人工智能和机器学习技术提供更高效、更智能的网络安全保护。它的出现将有助于提升网络安全防御能力,为用户提供更安全、更稳定的网络环境。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值