JetBrains IDEA破解原理学习

IDEA破解原理学习

背景

我下载的 IntelliJ IDEA 2023.2.1 (Ultimate Edition)版本,采用这篇文章中的方式 IDEA 激活到 2099 年。

有图为证

激活的基本思路是采用 Java Agent 技术拦截注册验证逻辑,绕过服务端,告诉客户端自己是合法的。本文主要分析拦截了哪些点,做了什么修改,但是不包括激活注册码的生成。

初步分析

从教程中看核心的一步是增加了 IDEA JVM 启动时参数-javaagent:/Users/[user]/tools/jihuo-tool-2099/active-agt-idea.jar,可以确定采用的是 Java Agent 拦截技术。

为了搞清楚 Java Agent 中做了什么,使用 JD-GUI 反编译 jihuo-tool-2099 目录下 jar 文件。

从反编译后的源文件看,使用的是 janetfilter 包。

从网上搜索了一下,janetfilter 来自https://ja-netfilter.com,来自一位@pengzhile的大佬,但是这个网站貌似已经不能访问了。知乎有一个大神从框架和字节码层面对代码做了比较细致的分析。

github 上 ja-netfilter 代码仓库插件部分不全,gitee 上找到一个比较全的(@pengzhile 大神的),于是 fork 出来几个项目看源码。

序号

模块

介绍

1

https://gitee.com/shidongwa/ja-netfilter

JVM Options 加载的 java agent

2

https://gitee.com/shidongwa/plugin-power

插件:激活验证码时非对称加解密

3

https://gitee.com/shidongwa/plugin-dns

插件:屏蔽 jetbrains.com

4

https://gitee.com/shidongwa/plugin-url

插件:屏蔽https://account.jetbrains.com/lservice/rpc/validateKey.action

5

config 目录下的*.conf

插件配置包括 url,dns 和 power

进阶

Java Agent

这部分对了解 Java Agent 的同学来说比较好理解,在 IDEA 启动时 main 主流程执行前通过 Java Agent premain 加载 ja-netfilter 框架和插件;注册码激活阶段,url、dns 和 power 插件 hook 点产生拦截,改写原有的验证逻辑。这部分功能还是比较透明的,主要逻辑在 ja-netfilter 项目中。了解 Java Agent、ClassFileTransformer、ASM 的同学来说不是难事。

hook 点

主要定义在 plugin-url,plugin-dns 和 plugin-power 三个项目中。

插件

hook 点

hook 逻辑简介

url

sun/net/www/http/HttpClient.openServer

验证注册码时拦截返回 SocketTimeoutException

dns

java/net/InetAddress.getAllByName 和 isReachable

拦截返回 java.net.UnknownHostException 和 jetbrains.com 域名不可达

power

java/math/BigInteger.oddModPow

拦截幂指数取模方法,非对称加解密用到

拦截域名和激活网站的访问

以 url 插件为例,hook 逻辑拦截了 sun/net/www/http/HttpClient 类 openServer 调用。从 HttpClient 类中获取 url 属性,作为参数调用 URLFilter.testURL 方法,如果和 url.conf 配置的验证地址匹配,直接返回 SocketTimeoutException 异常终止检查流程。假设我是正版用户,现在本地上不了网,你总不能禁止我用 IDEA 吧?

采用 ASM 在方法入口处插入字节码

翻译后的字节码逻辑

字节码中调用的方法逻辑

url.conf

拦截激活逻辑

url 和 dns 插件都比较好理解,核心是 power 这个插件逻辑是黑盒。power 的配置 conf 和激活码有关。

贴一下 power.conf 配置感受一下。power 插件通过拦截 java/math/BigInteger 的 oddModPow 方法(幂指取模,非对称加解密用到),通过匹配到几个**大数参数后,直接返回结果大数。配置中这几个大数**都是黑盒,猜测和提供的激活码是一一对应的。

配置和激活码

用 gitee 或者 github 中的项目编译生成 jar 包加上https://blog.idejihuo.com/jetbrains/intellij-idea-2023-1-3-activation-code-cracking-to-2099.html中的配置和激活码IDEA并不能启动成功。猜测jar包+配置+激活码必须要匹配。

前文中提到的@pengzhile 大佬个人网站有很多原始资料。这篇博文中其实提到了如何获取完整 jar 包+配置+激活码。我试了一下,可以用。文中提到的热心大佬很神秘,另外一个中本聪?

框架和插件扩展

ja-netfilter 设计时考虑了扩展性,通过自定义插件和配置,GoLand、PyCharm、DataGrip 等都可以采用同样的思路激活。

总结

本文学习了 Java Agent 拦截绕过 Jetbrains 注册流程。如果你对 Java Agent,ASM 字节码不感兴趣,只对激活 IDEA 感兴趣的话,有两种方式获取(亲测都可用)。

激活到 2099 年

激活到 2025 年,动态更新。随便点开一个网站,下载 jar 和配置,提取激活码

免责声明

如果您觉得本程序好用,建议您立即删除本程序并购买正版;本项目只做个人学习研究之用,不得用于商业用途!