记一次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]