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+RShift+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,即可。