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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/542256.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

设计模式-代理模式(Proxy)

1. 概念 代理模式(Proxy Pattern)是程序设计中的一种结构型设计模式。它为一个对象提供一个代理对象,并由代理对象控制对该对象的访问。 2. 原理结构图 抽象角色(Subject):这是一个接口或抽象类&#xff0…

觉得自己有讨好型人格,怎么办?

生活中,许多人可能有过这样的困扰: 不敢拒绝别人提出的要求,过于草率地作出承诺,等到发现自己无力兑现承诺,又不敢去面对现实、向别人道出真相,只好编造理由和借口来逃避承诺。 跟别人意见不一时&#xff0…

解决jenkins运行sh报process apparently never started in XXX

个人记录 问题 process apparently never started in /var/jenkins_home/workspace/ks-springboot_mastertmp/durable-bbfe5f99(running Jenkins temporarily with -Dorg.jenkinsci.plugins.durabletask.BourneShellScript.LAUNCH_DIAGNOSTICStrue might make the problem cl…

Linux 中 CPU 利用率是如何算出来的?

在线上服务器观察线上服务运行状态的时候,绝大多数人都是喜欢先用 top 命令看看当前系统的整体 cpu 利用率。例如,随手拿来的一台机器,top 命令显示的利用率信息如下: 这个输出结果说简单也简单,说复杂也不是那么容易就…

【Java基础题型】矩阵的对角线求和

一、题目-矩阵 求一个33矩阵对角线元素之和。 输入格式 矩阵 输出格式 主对角线 副对角线 元素和 样例输入 1 2 3 1 1 1 3 2 1 样例输出 3 7 二、参考的知识 这里给大家送点英语单词,记得学习: p r i m a r y. adj.主要的;初…

论文详解:字节万卡集群训练大模型,算力利用率达55.2%

原论文链接:https://arxiv.org/abs/2402.15627 摘要 我们介绍了MegaScale的设计、实现和工程经验,这是一个用于训练大语言模型(LLMs)的生产系统,其规模超过10,000个GPU。在这个规模上训练LLMs带来了前所未有的训练效率…

Opentelemetry——Signals-Baggage

Baggage Contextual information that is passed between signals 信号之间传递的上下文信息 In OpenTelemetry, Baggage is contextual information that’s passed between spans. It’s a key-value store that resides alongside span context in a trace, making values…

逆向案例二十四——投某界登录接口逆向,扣代码

网址:aHR0cHM6Ly91c2VyLnBlZGFpbHkuY24vbG9naW4uYXNweA 抓包登录接口: 在登录界面登录,不然不会出现login的js文件,按关键词搜索,进入loginjs文件,在文件中搜索,找到疑似加密的位置&#xff0c…

【Java多线程】案例(4):定时器

目录 一、定时器是什么? 二、Java标准库中的定时器 三、自己实现定时器 四、标准库中更推荐使用的定时器 一、定时器是什么? 定时器是一种用于在指定时间间隔或特定时间点执行特定任务的工具或设备。在计算机科学中,定时器通常是软件或硬件组件,用…

《手机维修600G资料》云盘下载地址

无意中发现一个生财之道,哈哈哈,就是发现有人在一些视频平台,发手机维修之类的视频吸引客户。这样自己就不用开店也可以接生意了。问题剩下就一个了,把手机维修技术学好,一技在手,天上我有。 《手机维修600…

python基础——类型注解【变量,函数,Union】

📝前言: 上一篇文章Python基础——面相对象的三大特征提到,python中的多态,python中,类型是动态的,这意味着我们不需要在声明变量时指定其类型。然而,这可能导致运行时错误,因为我们…

HTML5学习记录

简介 超文本标记语言&#xff08;HyperText Markup Language&#xff0c;简称HTML&#xff09;&#xff0c;是一种用于创建网页的标准标记语言。 编辑器 下载传送门https://code.visualstudio.com/ 下载编辑器插件 标题 标题通过 <h1> - <h6> 标签进行定义。 …

前端开发攻略---Vue实现防篡改水印的效果。删除元素无效!更改元素属性无效!支持图片、元素、视频等等。

1、演示 2、水印的目的 版权保护&#xff1a;水印可以在图片、文档或视频中嵌入作者、品牌或版权所有者的信息&#xff0c;以防止未经授权的复制、传播或使用。当其他人使用带有水印的内容时&#xff0c;可以追溯到原始作者或版权所有者&#xff0c;从而加强版权保护。 身份识…

2024mathorcup妈妈杯C题数学建模无水印高质量论文新鲜出炉

以下展示部分正文内容&#xff1a;完整内容见文末名片 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 添加图片…

搭建个人智能家居 4 -WS2812B-RGB灯

搭建个人智能家居 4 - WS2812B-RGB灯 前言说明ESPHomeHomeAssistant 前言 上一篇文章我们已经完成了第一个外设的添加&#xff08;一个LED灯&#xff09;&#xff0c;今天接着来“壮大”这个系统&#xff0c;添加第二个外设“RGB灯”。 环境搭建可以回顾前面的文章。前文回顾&…

Elasticsearch下载安装 以及Reindex(数据迁移)

部署Elasticsearch集群 这里介绍使用的是Elasticsearch 7.6.1的版本&#xff0c;配置两台服务器&#xff0c;一台部署主节点&#xff0c;一台部署两个从节点。 下载地址&#xff1a;https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.16.2-linux-x86_64…

版本控制工具Git的使用

1、Git的基本概念和使用 1、Git是什么? ● Git: 是一个开源的分布式版本控制系统&#xff0c;可以有效、高速的处理从很小到非常大的项目版本管理。 ● GitHub: 全球最大的面向开源及私有软件项目的托管平台,免费注册并且可以免费托管开源代码。 ● GitLab:与GitHub类似&a…

2024认证杯数学建模C题思路模型代码

目录 2024认证杯数学建模C题思路模型代码&#xff1a;4.11开赛后第一时间更新&#xff0c;获取见文末名片 以下为2023年认证杯C题&#xff1a; 2024年认证杯数学建模C题思路模型代码见此 2024认证杯数学建模C题思路模型代码&#xff1a;4.11开赛后第一时间更新&#xff0c;获…

(云HIS)云医院管理系统源码 SaaS模式 B/S架构 基于云计算技术

一、云HIS系统框架简介 1、技术框架 &#xff08;1&#xff09;总体框架&#xff1a; SaaS应用&#xff0c;全浏览器访问 前后端分离&#xff0c;多服务协同 服务可拆分&#xff0c;功能易扩展 &#xff08;2&#xff09;技术细节&#xff1a; 前端&#xff1a;AngularNg…

【C++】深度解析--拷贝构造函数(从0开始,详解浅拷贝到深拷贝,小白一看就懂!!!)

目录 一、前言 二、拷贝构造函数 &#x1f34e;概念解析 &#x1f95d;特性解析 &#x1f4a6;为什么拷贝构造函数使用传值方式会引发无穷递归调用&#xff1f; &#x1f4a6;为什么拷贝构造函数的形参中要加入 const 修饰 &#x1f4a6;若未显式定义&#xff0c;编译器会生…