《教我兄弟学Android逆向09 IDA动态调试so》

上一篇     教我兄弟学Android逆向08 IDA**签名验证 》我带你熟悉了IDA工具的使用,并且用IDA**了so层的签名校验 我给你布置的课后作业你也用上节课的方法做出来了 看你上节课学习的不错那么这节课给你带来IDA动态调试so的教程。

你看着我激动地说 大哥,本节课我已经期待很久了,终于来了!!我要认真听课!

下面开始今天的教程:
首先把黑宝宝.apk安装到手机上 随便输入一个用户名和密码 程序弹框“登陆失败” 于是在jeb中搜索登陆失败 发现搜索不到于是猜想字符串可能是在so中 于是开始分析
注:黑宝宝.apk在附件可以下载

一 JEB反编译APK 静态分析Java代码 
关于JEB的使用教程可以看番外 《教我兄弟学Android逆向番外02 jeb工具的使用》

1.jeb打开黑宝宝.apk 打开 AndroidManifest.xml查看程序入口 这里 android:debuggable="true"   表示此apk可以动态调试 如果是false动态调试的时候需要改成true,否则不可被动态调试

2.找到MainActivity入口类 并反编译成java代码 通过静态分析java代码可知 用户在输入用户名和密码后程序会调用Native方法check来校验用户名和密码是否正确


二 IDA静态分析找位置
1.解压黑宝宝软件 找到lib\armeabi\libJniTest.so 并用IDA打开 找到check函数并分析此函数(不会用IDA的请从前面课程开始学起) 


小结
经过以上分析 在输入用户名和密码后 程序会调用libJniTest.so中的check方法校验用户名和密码是否正确 如果正确check方法返回字符串登陆成功,否则返回字符串登录失败。
这里有两种**方式 
1.像上节课**签名一样修改so的16进制 改程序的跳转逻辑 实现**
2.动态调试so 在程序运行的时候改变程序的跳转逻辑


三 IDA动态调试
对命令不了解的点击《教我兄弟学Android逆向番外03 Android逆向必会命令》  
1 将IDAPro\dbgsrv 目录下的android_server push 到手机/data/local/tmp/目录下 给777权限 并./运行



2.端口转发 adb forward tcp:23946 tcp:23946

3.手机上运行黑宝宝apk

4.打开IDA找到黑宝宝程序的包名 进行附加程序





5.在modules窗口中Ctrl+F搜索找到libJniTest.so 点进去会有so中的函数方法的列表 找到check方法并点击 查看Debug窗口的汇编代码


6 按F5将ARM汇编转换成c语言 导入jni.h文件并优化代码的可读性


7.F5转换成C语言后 再按一次F5键刷新一下代码 这里可以看到程序已经识别出来了strcmp函数

8.按Esc键返回到汇编视图 分析check函数汇编 可以看到三处strcmp分别是校验签名,用户名,和密码是否正确 由于我用的是原包测试所以这里签名是正确的 这里在校验用户名和密码处的strcmp分别下一个断点


9.按F9运行程序 然后在手机正在运行的黑宝宝程序随便输入一个用户名和密码  用户名:hfdcxy 密码:52pojie 点击登录 看到程序断在了第一个strcmp处 此时R0和R1寄存器分辨是strcmp函数的两个参数 鼠标先点击Hex View-1窗口 然后再点击R0寄存器后面的跳转地址 即可在Hex窗口中看到我刚刚输入的hfdcxy
和寄存器R1储存正确的用户名koudai 



小结
跟到这一步我们已经把黑宝宝apk用IDA给动态调试起来了 也学会了IDA怎么下断点 但是到这里本节课就要结束了吗? 当然不是 由于我们的目的是动态调试**程序 也就是输入错误的用户名会提示登陆成功 所以教程还在继续 请同学们认真听课

四 置标志位**
1. 置标志位 改变程序执行逻辑


2.重复上述步骤 F9继续运行,程序断在第二个strcmp处 这个strcmp是用来比较密码是否正确的 同样F8执行本条指令 把R0寄存器置为0 强制让strcmp返回0 然后F9运行程序 可以看到手机弹出登陆成功 

五.修改内存16进制**
1.在Hex窗口中看R1寄存器地址存的正确用户名koudai对应的16进制为6B 6F 75 64 61 69 00


2.把R0寄存器地址内容修改成R1寄存器地址的内容 修改完之后F9运行程序 看到程序跳转到了下面一个strcmp





3.同样把下面密码校验的strcmp函数R0寄存器地址所存值的16进制 改成R1寄存器地址所存值的16进制 修改完成后F9运行程序 可以看到手机弹出登陆成功 

六.总结
本节课使用Jeb+IDA两个工具的组合带你分析了黑宝宝apk 然后使用命令和IDA进行配合完成了对黑宝宝进程的附加 实现了用IDA动态调试so 最后用两种方法完成了对黑宝宝登陆程序的**。相信学完本节课你的收获一定很多,那么趁热打铁把课后作业也做了吧。

课后作业
1.完成对重打包后的黑宝宝apk登陆程序的**
2. 看完 《IDA Pro权威指南》剩下的内容