dinglz 发表于 2022-8-8 17:35:53

记一次java程序破解

拿到这个软件的时候,看到那个jar包的时候其实我就已经开始笑了。

因为java和c#的代码几乎是属于透明的嘛,本来以为几分钟解决的事情,最后花了将近一天才解决。

下面来看一下这个曲折的过程


static/image/hrline/2.gif

第一步,检查

软件的结构就是一个jar包,jre文件夹,和一个bat启动文件。

先看bat启动文件。

if "%1"=="hide" goto CmdBegin
start mshta vbscript:createobject("wscript.shell").run("""%~0"" hide",0)(window.close)&&exit
:CmdBegin
@echo off
"jre\bin\java" -javaagent:utils.jar -jar utils.jar
exit

核心就在于倒数第二行的启动,也就是一个jar包,这里很容易忽略的就是这个agent,因为根据我的经验,一走眼就看成了-cp。

这里埋下一个伏笔,这个agent会给我带来一个大麻烦。


static/image/hrline/2.gif


第二步,检查jre

发现--version   --help等都不生效,大概猜测,是根据使用到的库生成的jre。

也不排除是openjdk的二次开发,不过小软件基本上忽视这种可能性。后面如果遇到麻烦再考虑这方面。


static/image/hrline/2.gif

第三步,分析源码

jd一解包,这代码就清清楚楚了。



然后比较吸引我的就是这个类



他说傻逼还想看源码,这一下就激怒到了我。

我看到一个非常显眼的类

也就是RSA.class,这里面的函数让我一看就开始笑了



好家伙,就这水平?

我看一眼,就开始自信了,已经结束嘞。

当我把这里的代码跑起来的时候,生成了一个对应mac的激活码

给我的提示却是:激活码错误。

反反复复试了几下,发现我被耍了。这根本就是一个用来误导的假代码。

然后我发现这些闭包函数的内容居然看不见



我怀疑这是个空壳程序,但怎么看都不太可能。

难道只能是jre的问题了吗!

一个小程序却涉及到openjdk的修改吗?

这个工作量让我望而生畏。


static/image/hrline/2.gif

第四步,重新分析启动程序

再来看一遍启动代码

"jre\bin\java" -javaagent:utils.jar -jar utils.jar

我这一次注意到了这个javaagent。

有了这个,我开始思考了它的特性,也就是premain

看一下清单文件



果然有预启动的premain

耍了我这么久,让我好好来看看这个类。


static/image/hrline/2.gif


第五步,分析premain



我们来看一下最后传输的这个class



这分明啊是重新替换了class

我终于注意到了这个文件夹

最后的钥匙,应该就在这里了。



我对着代码,成功把它解密了出来。

我终于看到了这个函数,对于注册码的检验




static/image/hrline/2.gif


第六步,生成激活码

剩下的事情就很简单了,对着验证的函数,我轻松了写出了对应的激活码生成函数。

run一下,果然,激活码是正确的。


static/image/hrline/2.gif


总结

这个程序其实并不难分析,只是要注意某些细节,不能被一开始的表象所迷惑,一切都是纸老虎!


static/image/hrline/2.gif


转载请获得作者dinglz允许,样品因涉及隐私问题,不在此上传,有兴趣的可以私聊我
页: [1]
查看完整版本: 记一次java程序破解