0

    【安卓逆向】开心消消乐 无限魔力鸟破解分析

    2023.07.20 | admin | 196次围观

    今天我在网上下载了一个开心消消乐鸟炸天版,但是要注册码才能用

    如图:

    本篇就带你你破解这个注册验证,然后研究他的原理。

    开始

    先把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层的算法就能通过机器码计算出注册码。

    结语

    至此我们成功逆向并破解了一款辅助,但请不要找我要成品,我已经删了。

    最后提醒大家,联网游戏使用任何辅助都有封号的风险,不要为了一时的痛快损失了幸苦经营的游戏账号,得不偿失。

    版权声明

    本文仅代表作者观点。
    本文系作者授权发表,未经许可,不得转载。

    发表评论