免责声明
本文撰写目的为分享技术, 仅供学习和研究目的, 不分享破解软件
如果喜欢某个软件, 请购买正版
起猛了
一早起来摸代码, 发现IDEA右下角某插件弹了个盗版软件通知
代码先别摸了, 抄刀开整
开整
首先上 %APPDATA%\JetBrains\IntelliJIdea2023.2\plugins
里找到插件的本体jar
直接拖进jbm里, 随便点开几个class反编译看看
static块里被插入了大量的代码, 看代码结构, 特征非常鲜明的zelix混淆, 掏 java-deobfuscator
处理一下
zelix.StringEncryptionTransformer
zelix.FlowObfuscationTransformer
peephole.PeepholeOptimizer
跑完重新拖进jbm里反编译就清晰多了, 直接搜索LDC 正版
第一个位置
第一个就是看见的提示框的文字了, 进去看一下代码
简单的弹出通知, 搜索一下这个方法的引用
非常好作者, jump to declaration, 继续往里跟
一个关键的检测方法, 反混淆后一目了然, 检测 ja-netfilter
破解的假授权
回到反混淆之前的jar干掉它, 定位到同样的method下, 在开头直接插入两行bytecode
iconst_0
ireturn
直接 return false
处理掉
切回反混淆后的jar, 对里面的每个方法调用逐个jump to declaration看看, 确认没有side effect
注意到这个 b()
里面还进行了一些private field的赋值, 并且这个class下面还有一个该field的public getter, 对这个getter查找所有引用, 同样确认没有side effect
非常好作者, 没有乱七八糟错综复杂的引用关系, 省的去做处理了
第二个位置
之前搜索LDC的时候还有另一个, 同样jump过去看看
调用的上面已经被解决掉了的那个方法, 因此其实不用管也可以
强迫症犯了, 一起清理掉吧, 对该方法搜索引用
这玩意挺多调用的, 随便找一个看看
其他也都是类似的东西
作者并不像他在插件提示里所说的那样”不影响插件使用”, 根据代码来看, 这里有一大堆让功能在使用时随机失效的暗桩
同样的方法处理一下, 这里需要return为true, 所以在方法开头插入bytecode
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
aconst_null
areturn
第四个位置
还在同一package下找到了一个检查 ja-netfilter
的class
检测方法简单粗暴, 进行classloader隔离即可绕过该检测
第五个位置
一个向作者的服务器发送HTTP请求校验证书的接口
还有一个检测到盗版后将硬件ID发送到作者服务器的HTTP接口
文章开头的检测被干掉之后, 已经没有方法调用这俩接口了, 直接不管w
Done
保存修改后的class, 替换回原jar里, 启动IDEA
搞定w