静态调试

打开与关闭

打开文件

方法一:文件拖到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即可