Igor的IDA使用技巧摘录
Igor’s tip of the week是Hex-Rays公司推出的IDA使用技巧系列博客,作者是Igor Skochinsky。
截止目前该系列已推出了三季,本文针对第一季的内容结合我个人学习感受进行简单摘要。
跳转快捷键
Alt
+Up
,Alt
+Down
:当鼠标点击一个寄存器或者变量时,相同的元素会高亮,使用这两个快捷键可以在这些高亮元素之间跳转。Shift
+Alt
+Up
,Shift
+Alt
+Down
:类似于上一组快捷键,但功能上有差异。Shift
+Alt
+Up
跳转到当前函数中上一个寄存器值修改变化之处,Shift
+Alt
+Down
跳转到当前函数中下一个寄存器使用之处。(注:快捷键自7.5版本添加);Ctrl
+Shift
+Up
,Ctrl
+Shift
+Down
:跳转到上一个函数或者写一个函数的开始部分,(注:快捷键自7.2版本添加);- 使用
G
跳转到地址,输入框中可填写16进制地址、+/-
相对地址、表达式(如here + 32*4
,_main + 0x10
,f2+(f4-f3)
,表达式中默认是10进制)等 X
查看光标下内容的交叉应用,Ctrl
+X
查看当前地址的交叉引用,Ctrl
+J
查看从当前地址开始的交叉引用(即从这里去其他地方)。Esc
退到父函数。
汇编分析
U
:取消定义,转换为字节码;C
: 转换为代码A
: 转换为字符串处理R
: 转换为字母H
: 切换10进制/16进制Alt
+A
:设置字符串编码~
/_
:修改数字展示形式,下划线_
显示负数形式,~
显示按位非。Ctrl
+N
,快速NOP#
:转换成16进制数,o
转换成指针,或使用Ctrl
+o
,Ctrl
+R
Shift
+E
:导出数据
函数分析
E
:设置函数结束位置Alt
+P
:编辑函数Y
:定义函数/变量类型Alt
+o
,打开设置,选择Demangled Name
或者再按m
,选择Names
,可以比较好看地显示函数名称,例如将?_Tidy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEX_N@Z
转换为std::string::_Tidy(bool)
。- 注释:函数注释
/
,Ins
;汇编代码注释;
Shift
+F12
:字符串视图,查看程序里所有字符串。- 修复反编译时SP指针异常报错:选项中打开SP指针(
Alt
+o
,G
,Disassembly下勾选Stack Pointer
),在栈空间异常(比如图视图下同一个块两个不同来源SP不同)的地方按Alt
+P
进行调整。
结构体/列表
- 批量定义结构体/字符串变量:首先定义第一个结构体或字符串,然后选择所有需要处理的数据(按
Alt
+L
锚定开始,在滚动或跳转到结尾),按快捷键D
创建数组,取消勾选Create as array
,即可。