ⅰ.相关快捷键
1.text展示跳转和逻辑展示切换:空格
2.返回上一级:Esc
3.跳转到指定地址:G,然后输入地址
4.对符号重命名:N,然后输入名字
5.加注释:Control+:然后输入注释
6.添加标签:Alt+M ;查看标签:Control+M
7.查看段 : control+S
8.查看引用 : control+X
9.搜索文本 : Alt+ T
10.搜索十六进制 : Alt+ B
11.重命名类型和名字:Y
12.伪代码汇编切换:TAB
13.导入结构体:I
14.查看结构体:T (先要导入结构体和编译伪代码)
15.P.未识别的情况下使用;D.识别成地址;A.识别成字符串
ⅱ.静态调试流程
找到 IDA 目录下的 dbgsrv/android_server,push 到手机
- ㈠静态模式
①获取命令输出:adb shell
②给最高权限:su
③进入指定目录:cd data/loca/tmp
④另起命令窗口,复制文件到该目录:adb push android_server绝对路径 /data/local/tmp
⑤给该文件最高权限:chmod 777 android_server
⑥查看该目录下所有文件的属性:ls -l
⑦root权限下运行该文件:./android_server
(端口被占用的情况下需要手动定义端口 :./android_server -p端口号)
⑧另起命令窗口进行端口转发:adb forward tcp:目标端口(android_server 运行对应的窗口) tcp:目标端口(android_server 运行对应的窗口)
⑨IDA绑定 debug: 工具栏debugger->attach->Remote ARM Linux/Android debuger
⑩程序绑定 hostname和端口号:debugger->Process options..->输入本地主机和端口号
⑪附加当前程序:Attach Process..->选择要调试的程序
注意:步骤④ ⑥不一定需要
- ㈡调试模式
①获取命令输出:adb shell
②给最高权限:su
③进入指定目录:cd data/loca/tmp
④另起命令窗口,复制文件到该目录:adb push android_server绝对路径 /data/local/tmp
⑤给该文件最高权限:chmod 777 android_server
⑥查看该目录下所有文件的属性:ls -l
⑦root权限下运行该文件:./android_server
(端口被占用的情况下需要手动定义端口 :./android_server -p(端口号)
⑧另起命令窗口进行端口转发:adb forward tcp:目标端口(android_server 运行对应的窗口) tcp:目标端口(android_server 运行对应的窗口)
⑨挂起程序:adb shell am start -D -n 应用程序报名/.类名
⑩IDA绑定 debug: 工具栏debugger->attach->Remote ARM Linux/Android debuger
⑪程序绑定 hostname和端口号:debugger->Process options..->输入本地主机和端口号
⑫附加当前程序:Attach Process..->选择要调试的程序
⑬选择调试项:debugger->debugger options..->勾选(1.entry point 2.thread star/exit 3.library load/unload)
⑭挂载程序:jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=端口号(可以通过 monitor 查看)
⑮继续应用程序:IDA->debugger->Continue process
⑯在 modules-list选择要调试的 so:ALT+T输入你要调试的库,然后双击
注意:步骤④ ⑥不一定需要;⑦不一定需要端口号,被占用的情况下需要
ⅲ.ARM基础知识点以及分析总结
1.R0-R3 一般是参数寄存器,寄存器不够放栈里面;栈顺序 先进后出
2.参数从 R0 开始填充
3.如果跳转函数涉及到参数寄存器,可直观查看参数的个数(BLX R3->>参数为R0-R2)
4.从跳转函数往上找,按照 R0-Rx
5.返回值参数一般用 R0存储
6.上一个函数段里面没有给参数寄存器赋值的地方,那么该参数寄存器就存放的上一个函数的返回值
7.碰到 FFFFFFFF,代表程序崩了
碰到的异常情况
1.Could not connect to localhost
解决:未在 root 模式下启动 android_server
2.so 库列表中没有想要调试的 so 库
解决:运行有该 so 库的程序
提供常用ARM指令链接:ARM常用指令