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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在 Google Cloud 上轻松部署开放大语言模型

今天,“在 Google Cloud 上部署”功能正式上线! 这是 Hugging Face Hub 上的一个新功能,让开发者可以轻松地将数千个基础模型使用 Vertex AI 或 Google Kubernetes Engine (GKE) 部署到 Google Cloud。 Model Garden (模型库) 是 Google Clou…

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

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

JavaScript进阶6之函数式编程与ES6ESNext规范

函数式编程 柯里化currycurrycompose示例:简化版展开写: debug示例一:示例二: 模板字符串css in js方案 箭头函数问题 生成器 generator应用场景 反射 Reflect 柯里化curry compose是curry的应用 在 lodash/fp underscore ramba …

53.网络游戏逆向分析与漏洞攻防-基础数据分析筛选-逆向分析寻找消息数据解压缩过程

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 如果看不懂、不知道现在做的什么,那就跟着做完看效果 现在的代码都是依据数据包来写的,如果看不懂代码,就说明没看懂数据包…

C# Solidworks二次开发:访问BOM表特性相关API详解

大家好,今天要讲的文章是和BOM表特性相关的API。 下面为要介绍的API: (1)第一个为GetConfigurationCount,这个API的含义为获取此BOM表可用或在此BOM表中使用的配置数,下面是官方的具体解释: …

phpMyadmin 设置显示完整内容

额外选项这里,默认部分内容改成完整内容 方案: 版本>4.5.4.1,修改文件:config.inc.php,添加一行代码: if ( !isset($_REQUEST[pftext])) $_REQUEST[pftext] F;

浮点数的表示

王道考研ppt总结: 二、个人理解 浮点数解决的是定点数的位数局限,导致表示范围有限的问题 阶码:由阶符和数值部分组成,阶符为,小数点向左移动,否则向右移动;数值部分,是底数的几次幂…

区块链媒体推广的8个成功案例解析-华媒舍

区块链领域作为一个新兴行业,媒体推广对于项目的成功发展起着至关重要的作用。本文将从八个成功案例中来分析区块链媒体推广的重要性和成功策略。 1. 媒体报道对于区块链项目的重要影响 媒体报道是提升区块链项目知名度和用户认可度的重要手段。对于区块链项目来说…

Java | Leetcode Java题解之第25题K个一组翻转链表

题目: 题解: class Solution {public ListNode reverseKGroup(ListNode head, int k) {ListNode hair new ListNode(0);hair.next head;ListNode pre hair;while (head ! null) {ListNode tail pre;// 查看剩余部分长度是否大于等于 kfor (int i 0…

CSS3新增

一些CSS3新增的功能 课程视频链接 目录 CSS3概述私有前缀长度单位remvwvhvmaxvmin 颜色设置方式rgbahslhsla 选择器动态伪类目标伪类语言伪类UI伪类结构伪类否定伪类伪元素 盒子属性box-sizing问题插播 宽度与设置的不同 resizebox-shadowopacity 背景属性background-originb…

SDK-0.7.8-Release-实体管理 - ApiHug-Release

🤗 ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱,有温度,有质量,有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace 更多精彩…

大数据存储解决方案和处理流程——解读大数据架构(四)

文章目录 前言数据存储解决方案数据集市运营数据存储(Operational Data Store)数据中心 数据处理数据虚拟化和数据联合虚拟化作为 ETL 或数据移动的替代品数据目录数据市场 前言 在数字时代,数据已成为公司的命脉。但是,仅仅拥有…

CNN卷积神经网络:理论基础、核心架构与多元应用

CNN是一种深度学习模型,利用卷积层提取图像特征,池化层降维与增强不变性,全连接层实现分类/回归。核心理论包括局部感知、权值共享、多层抽象。广泛应用图像识别、目标检测、语义分割、生成任务等领域。 一、CNN理论基础 1、局部感知野&…

二叉树之遍历

概述 之前有说到二叉树的建树,这次讲讲二叉树的遍历过程。二叉树的遍历分为深度优先遍历和广度优先遍历,二叉树的逻辑结构如下所示: class TreeNode{int val;TreeNode left;TreeNode right;public TreeNode(){}public TreeNode(int val){thi…

dPET论文笔记

PBPK论文笔记 题目:Self-supervised Learning for Physiologically-Based Pharmacokinetic Modeling in Dynamic PET 摘要 动态正电子发射断层扫描成像 (dPET) 提供示踪剂的时间分辨图像。从 dPET 中提取的时间活动曲线 (TAC&a…

Spring Boot统一功能处理(一)

本篇主要介绍Spring Boot的统一功能处理中的拦截器。 目录 一、拦截器的基本使用 二、拦截器实操 三、浅尝源码 初始化DispatcherServerlet 处理请求(doDispatch) 四、适配器模式 一、拦截器的基本使用 在一般的学校或者社区门口,通常会安排几个…

(我的创作纪念日)[MySQL]数据库原理7——喵喵期末不挂科

希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,大大会看到更多有趣的博客哦!!! 喵喵喵,你对我真的…

无酒不水浒,无肉不江湖

很难想象,没有酒的《水浒传》,将会是什么样儿? 武松醉打蒋门神,小霸王醉入销金帐、杨雄醉骂潘巧云,诸如此类,都是水浒传中经典的酒故事,倘若离开了酒,水浒少的就不仅仅是故事了&…

头歌-机器学习实验 第8次实验 决策树

第1关:什么是决策树 任务描述 本关任务:根据本节课所学知识完成本关所设置的选择题。 相关知识 为了完成本关任务,你需要掌握决策树的相关基础知识。 引例 在炎热的夏天,没有什么比冰镇后的西瓜更能令人感到心旷神怡的了。现…

【Linux实践室】Linux高级用户管理实战指南:用户所属组变更操作详解

🌈个人主页:聆风吟_ 🔥系列专栏:Linux实践室、网络奇遇记 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 一. ⛳️任务描述二. ⛳️相关知识2.1 🔔Linux查看用户所属组2.1.1 👻使…