今天我在网上下载了一个开心消消乐鸟炸天版,但是要注册码才能用
如图:
本篇就带你你破解这个注册验证,然后研究他的原理。
开始
先把apk载入jadx:
发现apk被加固了,根据包名com.qihoo可以猜测用的是360加固。
我们可以用dumpDex来脱壳(项目地址:)
dump出的dex文件再载入jadx:
已经可以反编译出源码了,只是onCreate方法被native化了,指令应该被抽取然后写在so里面,由他自己的解释器执行,要还原非常复杂。
所以我们先不管这个,找到注册机部分的代码:
注册码算法部分:
经过分析,其中的jdo_sn就是机器码,这里我的是25727,最后面的jout_int就是注册码。
把代码拷贝到eclipse执行一下生成了注册码1610851,填入后并没有注册成功,程序直接退出。
我们看看点击注册按钮的方法:
他把填入的注册码保存到SharedPreferences中,然后生成了一个文件,文件名为
/jt_tool/100,加上注册码。
后续便没有操作了。
但是他能够判断注册码是否正确修改机器码有什么后果,我推测是有其他的线程检测生成的文件名。
这个类的static段反编译失败了,检测的代码应该就在这里或者onCreate里面。
因为检测是开一个线程,而且他有退出的代码,Java层没有,那么很可能在native方法里。
于是找他的so文件:
这个就是他的验证代码所在so修改机器码有什么后果,载入ida分析:
果然发现这里有个循环检测jt_tool目录下的文件,然后取文件名,查看是哪里调用的:
这里很明显就是取文件名然后进行计算
关键地方在这里,这个退出应该就是注册码错误后退出。
上方的V16就是注册码和文件名的比较
我们只要修改上面的跳转即可爆破。
把这个BNE 修改为 NOP
也就是把4FB4处的03 00 00 1A 修改为 00 F0 20 E3(nop的机器码)
修改后
已经改为NOP了,然后点编辑-修补程序-应用修改
然后替换原来的文件,安装到手机测试:
随便输入,发现可以进去游戏,但是辅助没有效果。
估计在其他地方还有效验。
我们已经进入游戏界面,按下魔力鸟也会有提示,所以他的验证应该在修改魔力鸟的方法中。
我们继续分析。
程序载入时会读取assets目录下的hello-jni文件
而开启魔力鸟也是靠传值给这个文件执行,所以我们把这个文件载入ida分析,果然这里面也有读注册码的效验:
找到关键跳转:
和之前一样修改关键跳转为nop
修改为
然后保存,测试:
已经有效果了。
原理解析:
其实他的原理很简单
获取libhegame.so的地址,然后ptrace到进程
辅助的界面是个悬浮窗,是通过注入smali代码实现的。
点击开启后就是输入了1,so内部循环读取输入:
然后执行修改内存的操作
这个内存的地方就是libhgame.so内部的某个地址,修改了就能实现无限魔力鸟。
算法逆向
我们已经看到他的注册码算法了
这一段算法其实很简单,把读取到的字符md5,然后就是位异或和位与运算。结合上面java层的算法就能通过机器码计算出注册码。
结语
至此我们成功逆向并破解了一款辅助,但请不要找我要成品,我已经删了。
最后提醒大家,联网游戏使用任何辅助都有封号的风险,不要为了一时的痛快损失了幸苦经营的游戏账号,得不偿失。
版权声明
本文仅代表作者观点。
本文系作者授权发表,未经许可,不得转载。
发表评论