IDA保姆级教程
静态调试
打开与关闭
打开文件
方法一:文件拖到IDA,全都选择默认选项打开
方法二:先双击打开IDA,选New
弹出界面选择要打开的文件,再全部选默认选项打开
方法三:双击打开IDA,选Go
将文件拖入框里,或 File->Open选择要打开的文件
关闭IDA
关闭时弹出如下界面
界面切换
三个界面间切换:伪代码界面、图形界面、文本界面
初始页面-图形界面
空格-实现图形界面与文本界面(如下)切换
Tab-实现伪代码和图形界面切换(以下两个)
F5:展示伪代码界面
若F5无反应:可将视图调到函数区再F5
函数区就是导航栏中蓝色的部分
窗口介绍
函数窗口
页面左侧
可通过ctrl+f进行搜索(需先将鼠标定位到该模块中,可点击一个函数)
导航栏
不同的段颜色不同,蓝色部分为函数段等,可点击
如果导航栏颜色很单一,蓝色特别少,有可能文件被加壳了。需要先脱壳再用IDA查看。类似下面这样
功能键栏
在IDA里进行了多个操作且想回到之前进行操作的地方
不同视图
上方可以选择不同的视图
不小心关掉了怎么办?
Hex 十六进制
Import 导入表
文件中使用的函数模块
Export 导出表
文件中导出的模块(给其他程序用的)
Structures 结构体
IDA识别出来的结构体
Enum 枚举量
基本操作快捷键
Esc 返回之前的状态
例如点进了一个函数,想退回去
shift+f12 打开字符串窗口
Strings是自动跳出来的,想返回原视图可以在上方切回去
在此页面查找字符串可用 ctrl+f
通过双击可以跳转到字符串的存储位置
x 查找引用位置
(注:下图中应为x而不是ctrl+x)
可以在很多页面使用
单击到变量名上就可以x
如下是三个示例:分别在图形界面、文本界面、伪代码界面
g 跳转地址
如果你在调试过程中记住某些地址有重要的值,想直接跳转
g,输入跳转地址位置
n 重命名
有时一些函数名又臭又长还都是编号根本记不住怎么办?
不小心改错可以ctrl+z撤回
Y 修改变量类型
点击需要修改的函数名,按y
H 切换进制
点击数值,按下H可以在十进制、十六进制间切换,还可以改变字节数
ALT+T 搜索
可以搜索函数名什么的
/ :;添加注释
:或;添加汇编代码的注释
在需要添加的地方右键
enter comment 对应快捷键:
添加后只在添加的地方显示注释enter
repeatable comment 对应快捷键;
添加后在所有引用的地方都出现注释
/ 添加伪代码的注释
ACDU(R) 转换格式
A-转换成字符串(将十六进制数据转换为字符串,取消转换按u)
C-转换成汇编代码(将十六进制数据解释为汇编指令)
D-转换成数据
U-转换成原始字符
(R-转换成字符)
如何打开硬编码
打开后可以按ACUD进行操作,不打开也行(不知道有什么区别)有时转不了,可以先按 u 再试其他的
按 r 示例
以下是一个连续转换的示例
shift+e 导出数据
对代码进行修改
保存修改
进阶操作
Alt+K 修改堆栈平衡
打开窗口后显示当前指令处栈顶指针ESP的值,可以对当前指令对栈的改变量进行修改
查看堆栈平衡
动态调试
开启动态调试
本地调试
开启调试,也可以按f9
页面进入动态调试,弹出黑框
按f5可以变成伪代码模式
附加进程调试
无法独立运行的程序:可以将目标文件附加到正在运行的进程上
调试命令
断点
程序运行到断点处停止
点语句前的圆点或右键点击add breakpoint添加断点
汇编文本界面也是一样
断点管理
右键已经设成断点的圆点
出现设置菜单
location参数为断点位置
condition为条件断点表达式
例如EAX==12
表示当EAX为12时才中断
监视与跟踪
add watch 监视特定变量或内存地址的值
在数据段
右键->add watch
若要删除,选中再按delete即可
add write trace 写入跟踪
程序写入特定内存地址时,记录这些写入操作
add read/write trace 读写跟踪
对特定内存地址的读写操作
add execution trace 执行跟踪
跟踪某段代码
查看已设置的trace和watch
添加的trace这里查看
delete可以删除
debugger->tracing里可以看到反馈的跟踪信息
若要删除,选中再按delete即可
添加的watch这里查看
若要删除,选中再按delete即可