官网:IDA Pro – Hex Rays (hex-rays.com)
其余版本在百度上找
加载一个.so
文件,提供了两种解析方法:
.so
文件格式解析Binary file
二进制文件格式解析默认选第一种(这里的so文件是在apk中lib目录下随意找的)
F2 下断点
F4 运行到当前光标处(可应用在跳出 循坏)
F5 转为C语言
F7 单步步入(进函数)
F9 运行到断点处
Alt+T 搜索文本
Alt+B 搜索16进制
ESC 返回上一个操作地址
Space 切换文本视图与图表视图
d 函数识别为数据
c 数据转代码,无end结尾(无法识别堆栈是否已经平衡,所以无法识别函数结束)
p 转函数,有end结尾
u 将函数中的所有代码识别为数据
这部分是连接手机并IDA动态调试软件前的准备工作,包括上传一些调试文件等。
adb devices
如果没有出现设备信息,在手机设置中-开发者选项-开启usb调试和OEM解锁
移动到data/local/tmp
目录上
adb push C:\Users\xxx\Desktop\android_server data/local/tmp
adb shell
su
cd data/local/tmp
ls
成功将android_server
文件拷贝到目录上
在abd shell中输入以下命令赋予该程序权限
chmod 777 android_ server
由于安卓机制会检查出android_server,限制调试,将android_server改为anserver
mv android_server anserver
./anserver
./anserver -p1234 指定端口
adb forward tcp:23946 tcp:23946
新开启一个cmd命令框
adb install C:\Users\xxx\Desktop\javandk1.apk
在手机上可以看到该软件已安装
用于后续脱壳
在后面的手机进程列表搜NDK,需要软件先运行起来(挂起)
即可开始调试,不过一般都会使用下面的普通调试
su
cd data/local/tmp
./anserver
./anserver -p1234 指定开启端口
adb forward tcp:23946 tcp:23946
这两步骤和前面的相同,就不上图了
adb shell am start -D -n com.example.javandk1/.MainActivity
这里的包名可以通过Android Killer或Jadx查看到,在类前面加上一个斜杆表示相对路径
命令输入后,手机会出现一个Waiting For Debugger
的提示框
新开一个CMD窗口输入ddms
开启
在设备窗口中可以看到一个红色虫子
选择Debugger
栏中的Debugger options
项,如下
按左上角的绿色三角形
jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8600
执行了jdb命令后,一开始只有调用odex文件。这时需要在IDA中左上角再按下执行按钮,使得.so
文件加载成功,查找该so文件双击进去
搜索JNI_OnLine,在开始处F2下断点
拓展:
IDA下断点的原理:通过异常
F9执行到断点处
F7单步步入,单步调试分析
这部分需要能够读懂常见的简单的ARM汇编指令,下一篇文章中会先介绍到ARM汇编指令,再接着动态调试分析so文件,所以这部分内容就安排在了ARM汇编指令介绍之后。
26 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!