Igor’s tip of the week是Hex-Rays公司推出的IDA使用技巧系列博客,作者是Igor Skochinsky。

截止目前该系列已推出了三季,本文针对第一季的内容结合我个人学习感受进行简单摘要。

跳转快捷键

  1. Alt+Up,Alt+Down:当鼠标点击一个寄存器或者变量时,相同的元素会高亮,使用这两个快捷键可以在这些高亮元素之间跳转。
  2. Shift+Alt+Up,Shift+Alt+Down:类似于上一组快捷键,但功能上有差异。Shift+Alt+Up跳转到当前函数中上一个寄存器值修改变化之处,Shift+Alt+Down跳转到当前函数中下一个寄存器使用之处。(注:快捷键自7.5版本添加);
  3. Ctrl+Shift+Up,Ctrl+Shift+Down:跳转到上一个函数或者写一个函数的开始部分,(注:快捷键自7.2版本添加);
  4. 使用G跳转到地址,输入框中可填写16进制地址、+/-相对地址、表达式(如here + 32*4,_main + 0x10,f2+(f4-f3),表达式中默认是10进制)等
  5. X查看光标下内容的交叉应用,Ctrl+X查看当前地址的交叉引用,Ctrl+J查看从当前地址开始的交叉引用(即从这里去其他地方)。
  6. Esc退到父函数。

汇编分析

  1. U:取消定义,转换为字节码;
  2. C: 转换为代码
  3. A: 转换为字符串处理
  4. R: 转换为字母
  5. H: 切换10进制/16进制
  6. Alt+A:设置字符串编码
  7. ~/_:修改数字展示形式,下划线_显示负数形式,~显示按位非。
  8. Ctrl+N,快速NOP
  9. #:转换成16进制数,o转换成指针,或使用Ctrl+o,Ctrl+R
  10. Shift+E:导出数据

函数分析

  1. E:设置函数结束位置
  2. Alt + P:编辑函数
  3. Y:定义函数/变量类型
  4. 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)
  5. 注释:函数注释/,Ins;汇编代码注释;
  6. Shift+F12:字符串视图,查看程序里所有字符串。
  7. 修复反编译时SP指针异常报错:选项中打开SP指针(Alt+o,G,Disassembly下勾选Stack Pointer),在栈空间异常(比如图视图下同一个块两个不同来源SP不同)的地方按Alt+P进行调整。

结构体/列表

  1. 批量定义结构体/字符串变量:首先定义第一个结构体或字符串,然后选择所有需要处理的数据(按Alt+L锚定开始,在滚动或跳转到结尾),按快捷键D创建数组,取消勾选Create as array,即可。