免责声明

本文撰写目的为分享技术, 仅供学习和研究目的, 不分享破解软件

如果喜欢某个软件, 请购买正版

起猛了

一早起来摸代码, 发现IDEA右下角某插件弹了个盗版软件通知

代码先别摸了, 抄刀开整

开整

首先上 %APPDATA%\JetBrains\IntelliJIdea2023.2\plugins 里找到插件的本体jar

直接拖进jbm里, 随便点开几个class反编译看看

image-20231118195313164

static块里被插入了大量的代码, 看代码结构, 特征非常鲜明的zelix混淆, 掏 java-deobfuscator 处理一下

1
2
3
zelix.StringEncryptionTransformer
zelix.FlowObfuscationTransformer
peephole.PeepholeOptimizer

跑完重新拖进jbm里反编译就清晰多了, 直接搜索LDC 正版

image-20231118195723485

第一个位置

第一个就是看见的提示框的文字了, 进去看一下代码

image-20231118195839399

简单的弹出通知, 搜索一下这个方法的引用

image-20231118195911070

非常好作者, jump to declaration, 继续往里跟

image-20231118195955239

一个关键的检测方法, 反混淆后一目了然, 检测 ja-netfilter 破解的假授权

回到反混淆之前的jar干掉它, 定位到同样的method下, 在开头直接插入两行bytecode

1
2
iconst_0
ireturn

直接 return false 处理掉

image-20231118200142949

image-20231118200405795

切回反混淆后的jar, 对里面的每个方法调用逐个jump to declaration看看, 确认没有side effect

注意到这个 b() 里面还进行了一些private field的赋值, 并且这个class下面还有一个该field的public getter, 对这个getter查找所有引用, 同样确认没有side effect

非常好作者, 没有乱七八糟错综复杂的引用关系, 省的去做处理了

第二个位置

之前搜索LDC的时候还有另一个, 同样jump过去看看

image-20231118200631487

调用的上面已经被解决掉了的那个方法, 因此其实不用管也可以

强迫症犯了, 一起清理掉吧, 对该方法搜索引用

image-20231118200826972

这玩意挺多调用的, 随便找一个看看

image-20231118201311427

其他也都是类似的东西

作者并不像他在插件提示里所说的那样”不影响插件使用”, 根据代码来看, 这里有一大堆让功能在使用时随机失效的暗桩

同样的方法处理一下, 这里需要return为true, 所以在方法开头插入bytecode

1
2
iconst_1
ireturn

第三个位置

class下面还有一些field b的getter和setter, 并且检测函数中通过对 DomainObject.b() 的if判断修改了该field

搜索一下引用, 分析这也疑似是一个暗桩

field b 的getter setter与 DomainObject.b() 在业务代码里错综复杂地互相交织, 通过null check在运行时不断切换里面的object内容, 猜测作用是防止第三方动态修改field来过检测?

反正是null check所以简单粗暴处理掉, getter开头插入bytecode

1
2
aconst_null
areturn

第四个位置

还在同一package下找到了一个检查 ja-netfilter 的class

检测方法简单粗暴, 进行classloader隔离即可绕过该检测

image-20231118201733365

第五个位置

一个向作者的服务器发送HTTP请求校验证书的接口

还有一个检测到盗版后将硬件ID发送到作者服务器的HTTP接口

文章开头的检测被干掉之后, 已经没有方法调用这俩接口了, 直接不管w

Done

保存修改后的class, 替换回原jar里, 启动IDEA

搞定w