Jetbrains cracked 原理简介及 rust 版 server 介绍

murdoch · 2024-5-22 15:41:29 · 283 次点击

前言


本文旨在为大家讲解一下 jetbrains 的 license code 的校验原理并提供一个 rust 版本的 server 代码供大家学习交流使用,主要内容为:



  1. 介绍java-agent 破解 jetbrains 的原理

  2. 介绍 rust-server 的功能


因为大佬的文章已经写的很详细了,所以我希望能画图尽量做个总结,更具体的内容请参考参考资料。如有错误,希望指出。


原理



通过此图,我们可以知道主要的校验步骤:



  1. 校验子证书是否合法

  2. 校验 license_info 是否合法


由于我们的子证书是肯定不合法的,所以我们只能自己生成证书,然后通过类似 java 的 bytebuddy库 的字节码技术来拦截 jetbra 的这一步校验,使其直接使用我们的证书并返回我们希望的结果(公钥解密 LicenseInfo-签名),如下图:


其关键代码示例如下:


public class MyAgent {  

public static void premain(String agentArgs, Instrumentation inst) throws Exception {
System.out.println("premain");
AgentBuilder agentBuilder = new AgentBuilder.Default()
.with(AgentBuilder.RedefinitionStrategy.RETRANSFORMATION)
.with(AgentBuilder.InitializationStrategy.NoOp.INSTANCE)
.with(AgentBuilder.TypeStrategy.Default.REDEFINE)
.ignore(ElementMatchers.nameStartsWith("net.bytebuddy."));

// 证书验证需要调用oddModPow,这里检测到后直接重定向导自己写的 BigIntegerAdvice类中
agentBuilder.type(ElementMatchers.named("java.math.BigInteger"))
.transform((builder, typeDescription, classLoader, module, protectionDomain) -> builder
.visit(Advice.to(BigIntegerAdvice.class)
.on(ElementMatchers.named("oddModPow"))))
.installOn(inst);

}

}

public class BigIntegerAdvice {

@Advice.OnMethodExit
public static void intercept(
@Advice.This Object x,
@Advice.Argument(0) Object y,
@Advice.Argument(1) Object z,
@Advice.Return(readOnly = false, typing = Assigner.Typing.DYNAMIC) Object result) {
String x_target = "x_target 的值是一个很大的数字,此处代表子证书签名的值";
String y_target = "65537:固定值,模数,参考参考资料中的 rsa加密算法";
String z_target = "z_target 的值是一个很大的数字,此处代表内置根证书公钥的值";
String r_target = "r_target 的值是一个很大的数字,此处代表子证书用公钥解密LicenseInfo-签名后的值";
// 因为要进行校验肯定需要根证书公钥、模数和子证书签名,这里的几个 if 则可以断定这是在进行 license_code 的校验
if (x.equals(new BigInteger(x_target))){
if (y.equals(new BigInteger(y_target))){
if (z.equals(new BigInteger(z_target))){
result = new BigInteger(r_target);
}
}
}
}

}

至此,原理部分结束。


jetbra-server-rust


最近,我正在学习rust,所以用rust来练练手,代码写得烂,大家见谅。主要功能如下:



  1. ja-netfilter 包下载,唯一改动就是使用自己生成的证书生成 xyrz 后覆盖 power.conf,使用者可以忽略

  2. 支持插件的增量更新,每次项目启动时都会获取本地不存在的付费插件信息

  3. 支持自定义 licentseInfo提供全产品激活码及付费插件激活码

  4. 提供 docker 镜像


功能很简单,一张图足以看出全部:



按照步骤操作即可。


项目包:jetbra-server-rust.zip (908.4 KB)


同时项目也支持 docker 部署,本地可以进入 rust 项目的根目录执行如下命令生成镜像并启动:


 docker build -t jetbrains-cracked-rust . 
docker run -d -p 8000:8000 --name jetbrains-cracked-rust-container jetbrains-cracked-rust

我将镜像打包到了docker hub,你也可以拉取 docker hub 中的镜像来启动(就是不知道这个有风险不):


docker pull ohyoungmachine/jetbrains-cracked-rust

然后打开 http://localhost:8000 即可。


总结


以上就是JetBrains的license_code验证过程的解析,以及如何在代码中实现其中的一部分。希望这个初步的介绍可以帮助读者对其中的主要过程有所理解。


请注意, 任何未经授权解码或破解软件的尝试,都可能构成侵犯版权法的行为,读者在了解后,请遵守法律,尊重软件开发人员的权益。


参考资料


排名不分先后,但是顺序是我的参考顺序。感谢各位大佬的付出!



  1. Idea agent 激活原理

  2. RSA加密&签名

  3. 自定内容并生成Idea激活码,已废弃,请考虑自己部署

  4. 【Jetbrains License】纯Java版本地搭建,了解/学习/质疑/解决/熟悉/掌握/改造,一站式证书/Agent/ActiveCode生成

举报· 283 次点击
登录 注册 站外分享
19 条回复  
cure1997 初学 2024-5-22 15:41:29

这个好,这个好,真就一图胜千言

xiaose009 初学 2024-5-22 15:41:29

好东西

lzgnpl 初学 2024-5-22 15:41:29

马克学习

nodeseek 初学 2024-5-22 15:41:29

好东西,马克

feiyunnt 初学 2024-5-22 15:41:29

666 坛佬牛蛙

handsome 限制会员 2024-5-22 15:41:29

感谢大佬!

Chance028 初学 2024-5-22 15:41:29

好东西 mark

yizhgood001 初学 2024-5-22 15:41:29

好东西

WilsonVincent 初学 2024-5-22 15:41:29

点个赞,mark一下。

12下一页
返回顶部