a: 转成ASCII
d: 转成数据, 按一次是db,两次dw,三次dd
c: 转成代码
u: 编程未定义
G: 跳转指令, 跳转到指定地址
ALT+T: 搜索指令,搜索关键字
F5: 把汇编编程C语言, 想回到汇编直接选IDA View即可
N: 按下某个名字并且修改名字,全局有效
ESC: 返回上一个页面
F12: 显示代码的流程图
Shift+F2: IDC脚本窗口
Shift+F3: 弹出Functions窗口
Shift+F9: 弹出Struct窗口
Shift+- 是把IDA代码中的十六进制与十进制互换
Q: 显示操作步长, 比如movsx edx, [esp + 18h]就会变成movsx edx, dword ptr [esp + 18h]
K: 隐藏操作步长
Ctrl+K: 查看当前函数的栈
按下Ctrl+K即可
进入在Structures栏里, 点击Edit选择添加结构体即可添加结构体
选择结构体名后按d后即可添加成员,再次按d几次与上面d操作一样
选择某一成员,按alt+q可以把该成员变成IDA内所有可识别的其他类型结构体, 这种方法在IDA View窗口内也可以使用
双击结构体名称即可 将其收缩成一行,点击改行选择Ctrl和+(小键盘)即可拓展开
按;可以写入注释, 但是这样会让其他地方跳转到此位置也会显式该注释
Shift+; 则没有上面那种困扰,仅仅是单纯的本行注释
选择函数名按;可以添加函数注释
交叉引用(即所有引用该函数的列表)
如果目标函数不在当前模块,如何找到该函数在哪里调用?
如果有多个对话框调用了多个OnInitDialog, 即可使用交叉引用获取调用该函数的列表:
选中函数名,View+Open subviews+Cross references, 或者右键选中List cross references to..
又或者直接Ctrl+X即可
IDC语法:
配置IDA默认编辑器: Options->General->Misc->Editor
Message输出函数(类似printf), Warning以及Fatal
变量: 全部auto类型(类似js里的var), 变量声明与复制必须在不同语句进行
语句: IDC不支持switch语句
如果反汇编窗口或者其他窗口不见了怎么调出来:
让IDA显示机器码的方法:
这样的效果如下图:
如果想要IDA自动注释:
想要重置IDA的GUI界面元素到其原来位置
想跳转到对应的文件偏移:
搜索功能:
1. Search->Next Code 移动光标到包含你所指定指令的下一个位置
2. Search->Text 在反汇编窗口中搜索一个指定字符串
3. Search->Sequence of Bytes 在16进制视图窗口中对特定字节序进行二进制搜索
需要查看某个函数的所有交叉引用, 对数据也同样有效:
点击函数名后按下'X'键:
函数无法识别的情况,按'P'键创建函数。
如果函数不是基于EBP的栈帧,这可能不是很容易理解。可以按下Alt+P。选择BP Based Frame然后指定4 Bytes for saved registers
工具栏可以显示高级模式,即有更多选项:
结果入上,这里主要关注红框框出的交叉引用:
第一个选项会出现当前函数的流程图, 快捷键F12:
第二个获取整个程序的调用图, 数量多的情况下有点凌乱:
第三个显示当前函数被哪里调用了
讲一个不易于理解的常量转换成易于理解的常量:
如果有下面几条机器码:
mov eax, loc_410000
add ebx, eax
mul ebx
其中loc_410000被交叉引用。但实际上这只是一个数字罢了。可以点击它然后按下'O'键即可取消
如果某个标准的符号常量不显示。可能是符号表未加载。需要手动加载导入库:
一般mssdk和vc6win会被加载
设置数组结构:
在对应需要设置数据结构的函数内按下Ctrl+K就能查看该函数的所有堆栈元素。
现在要把Buffer开始的512字节设置成一个数组。在起始地右击后选中Array
将其数组大小设置成512个字节
这样就成功设置了
IDA调试DLL时,如何手动确定载入起始位置,而非依靠ImageBase决定。
选中如下复选框代表手动载入。
设定你要载入的位置后按下OK即可。
查找特定字符串:
如果我要查找一种简单xor加密,可是代码量太大该怎么办,可以直接利文本搜索来实现:
查找所有xor出现过的地方, 很容易就发现一处可能的xor加密位置:
修改函数定义:
举一个例子, 我想修改这个函数的定义如何修改
选中函数后按'Y'即可
选择入口点:
可能有一些程序有反调试功能,设立了tls回调, 普通的入口点无法查询
按下Ctrl+E,选择对应的入口点即可
查找一个函数所有的call:
重新设定模块加载地址:
(完)