本帖最后由 yimsong 于 2019-5-7 20:57 编辑
目标APK来自这个帖子:https://bbs.binmt.cc/thread-16558-1-1.html
APK下载地址:http://t.cn/ESQ1mIT
原帖内容:
本人对 ARM 反汇编和 IDA 软件不是很懂,之前有接触过 OllyDbg 也只是略懂皮毛
这是第一次使用 IDA 反汇编修改 Android 应用也是在摸索中完成的,算是一次挑战和学习
同时教程也写的尽量详细,以供新手互相学习借鉴
修改过程:
看到原帖说有 Dex 文件校验,大概想到应该是计算 classes.dex 文件的 MD5 或 SHA1 哈希值来判断
进入 APK 的 lib 目录查看只有两个文件,很明显校验应该是在 libLauncher.so 文件中
然后第一个想法就是尝试在 libLauncher.so 文件中搜索 classes.dex 文件的哈希值
先使用 HASH 工具计算 classes.dex 文件的哈希值
复制 MD5 到 WinHex 中搜索 libLauncher.so 文件,出乎意外一下就找到了
既然找到了那就丢进 IDA 进行分析修改
IDA 打开 libLauncher.so 文件后按 Shift+F12 打开字符串窗口
再按 Ctrl+F 查找字符串 af84c8dd47cc24a724621ffd09ff0eb8,然后双击字符串跳转
跳转到汇编窗口后可以看到是 VerifyApp 函数内部引用了字符串,双击 VerifyApp 进入到函数
进来函数后可以看到
前面调用 zip_fread 读取 classes.dex 文件,然后调用 ComputeMD5Sign 计算 classes.dex 文件的哈希值,后面三条指令是关键指令BLX strcmp // 对比哈希值字符串
CMP R0, #0 // 判断对比结果是否相等
BNE loc_A2A3C // 如果不相等则跳转到 loc_A2A3C
要去除校验可以 NOP 掉跳转 或 修改 CMP 结果,这里以修改 CMP 结果为例
IDA 中好像不能直接修改汇编指令,还是我没找到方法?
但是发现 Hex 窗口中可以修改,由于不清楚 ARM 汇编指令的机器码所以使用在线工具进行转换
得到机器码为 8042
回到 IDA 点击 CMP 指令然后切换到 Hex 窗口
光标高亮的地方就是 CMP 指令,鼠标右键选 Edit... 或按 F2 进入编辑模式
把 00 28 修改成 80 42
然后鼠标右键选 Apply changes 或按 F2 应用修改
回到汇编窗口看一下,已经变成了 CMP R0, R0 了
接下来就可以保存修改结果到原文件了
ps:由于是第一次使用 IDA 修改不知道怎么保存,在菜单中随便看了一下
在 Edit 菜单下看到了 Patch program 和 Apply patches to input file...
猜测可能是这个菜单选项就尝试点一下 Apply patches to input file...
然后 ok 保存
结果还真被我猜对了,修改保存成功
至此这次反汇编修改去除 Dex 文件校验到此结束
另外如果不想使用 IDA 进行分析修改,可以使用其它十六进制软件直接修改 libLauncher.so 文件
以 MT2 为例:
十六进制模式打开文件后,点击右上角菜单,选择 跳转到...
输入地址 A2A26 确定
修改 00 28 为 80 42 保存即可
补充:发现 IDA 可以直接修改指令
在指令上鼠标右键选 Keypatch -> patcher 或 按快捷键 Ctrl + Alt + K 然后直接修改即可
|