IDA手册:IDA使用说明
IDA使用说明
1.常用快捷键
IDA中的快捷键都是和菜单栏的各个功能选项一一对应的,基本上你只要能在菜单栏上找到某个功能,也就能看到相应的快捷键,这里记录几个常用的:
a:将数据转换为字符串
f5:一键反汇编
esc:回退键,能够倒回上一部操作的视图(只有在反汇编窗口才是这个作用,如果是在其他窗口按下esc,会关闭该窗口)
shift+f12:可以打开string窗口,一键找出所有的字符串,右击setup,还能对窗口的属性进行设置
ctrl+w:保存ida数据库
ctrl+s:选择某个数据段,直接进行跳转
ctrl+鼠标滚轮:能够调节流程视图的大小
x:对着某个函数、变量按该快捷键,可以查看它的交叉引用
g:直接跳转到某个地址
n:更改变量的名称
y:更改变量的类型
/ :在反编译后伪代码的界面中写下注释
\:在反编译后伪代码的界面中隐藏/显示变量和函数的类型描述,有时候变量特别多的时候隐藏掉类型描述看起来会轻松很多
;:在反汇编后的界面中写下注释
ctrl+shift+w:拍摄IDA快照
u:undefine,取消定义函数、代码、数据的定义
2.IDA动态调试:
IDA动态调试有俩种:
2.1.一种是直接动态调试app应用
1.首先把ida目录中的dbgsrv文件夹中的android_server文件push 到手机中
adb push <文件> /data/local/tmp
2.adb shell , cd /data/local/tmp
3.chmod 777 <文件>
4. 运行./<文件名>
5.adb forward tcp:23946 tcp:23946
6.打开IDA选择Go
7.点击Debugger 中的Attach,有俩个选择①Remote ARM(一般真机调试)②Remote Linux(一般模拟器调式)
8.输入信息Hostname:127.0.0.1,点击ok
9.点击ok之后会弹出Choose process to attach to的界面,然后选择需要调试的进程。可能报错,原因没有打开app。
缺点,可能运行的时候,so已经加载,无法断点调试。
2.2.二是以DEBUG的方式调式运行的类
前面操作和上面1-5步骤一样
1.adb shell am start -D -n 包名/.类名(入口主mainactivity)
2.需要的话打开DDMS,查看app进程,或者adb shell 命令ps -ef | grep 应用包名,为了第六步。
3.重新打开IDA,点击Debugger 中的Attach,有俩个选择①Remote ARM(一般真机调试)②Remote Linux(一般模拟器调式),选择Debug options,选择三项,然后输入信息Hostname:127.0.0.1,点击ok
4.选择需要调式的进程,进入调式界面,注意这里还需要设置一次Debug options的三项
5.按F9开始运行,app应用还会处于debug调式
6.使用jdb命名让app开始恢复运行:
jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=<端口>
7.F9开始运行,让他加载响应的so库文件
8.打开debuuger中的module_list进入需要调式的so,下断点
注意事项:
如果app 的AndroidManifest.xml如果没有debug权限,需要手动修改,重新打包签名安装。
查看flags里面时候允许debug选项,adb shell dumpsys package 包名,搜索flags,或者查看 cat /default.prop,查看debuggable=1(1,是允许设备中所有应用可以调试,0则检测AndroidManifest.xml中是否android:debuggabel=true),因此修改/default.prop是最方便的。具体修改方法参见工具mprop:./mprop ro.debuggable 1(它的原理是注入init进程修改它的值)
下面介绍一些常用的快捷键
F7 单步步入,遇到函数,将进入函数代码内部F8 单步步过,执行下一条指令,不进入函数代码内部F4 运行到光标处(断点处)F9 继续运行CTRL+F2 终止一个正在运行的调试进程CTRL+F7 运行至返回,直到遇到RETN(或断点)时才停止.