IDA PRO的使用02
IDA 中不同类型的整数
类型 | 大小 |
---|---|
byte / char / uint8 / int8 | db 1个字节 |
word / short / uint16 / int16 | dw 2个字节 |
dword / int / uint … | dd 4个字节 (32位指针) |
qword / int64 … | dq 8个字节 (64位指针) |
大部分情况下,整数以小端序存储在内存 0xA1B2C3D4 存储到内存的顺序为 D4 C3 B2 A1
多格式提取数据 (快速提取数据)
- 提取成 python / C 的数组格式
- 选中数据,右键,[Convert] (注意多选一项)
数据与代码的转换
- 代码即数据,数据即代码
- 在某地址处按下 U 键,取消IDA对当前地址的解释
- 在某地址处按下 C 键,将地址标记为代码并反汇编
- 在创建的代码函数头位置,按下 P 键,创建函数
- 处理花指令时非常有用
IDA 函数调用图 (观察函数层次调用结构)
- 查看函数调用关系图
- 反汇编窗口,函数符号单选中,右键, “Xref Graph to”
常数搜索 (搜索结构体偏移、OLLVM 混淆真实块 …)
菜单 [Search] ->[Immediate Value] -> "Find all”选上后搜索所有 用途
- 搜索对结构体偏移的引用代码
- 搜索 ollvm 真实块代码
指令文本搜索 (搜索反调试指令)
- 菜单 [Search] -> [Text] ->
- “Find all”选上后搜索所有
用途: 搜索特殊指令 例如:某加固产品使用 SVC 0 调用系统调用反调试,且有多出反调试 ### 字节数据搜索(搜索特定指令序列) 搜索满足匹配 HEX 串的序列 菜单 [Search] -> [Sequence of bytes] 用途:
- 特征码查找
- 花指令查找
- 代码定位
IDA 代码提取 (提取IDA中的代码编译并使用)
- 伪代码是可以复制出来编译的
- IDA 内置的函数、类型定义在头文件 IDA.h / Defs.h
IDA Patch (修改汇编代码,并生效)
直接修改数据:数据窗口 F2
插件修改数据:LazyIDA,修改位置,右键,[Paste Data],修改大段数据
修改汇编代码:Keypatch
以上所有修改,仅修改了IDA的数据库,对应文件并未修改
应用修改到文件:
- 菜单项 [Edit] -> [Patch program] -> [Apply Patches …]
- 注意:Apply 时,IDA 不会还原文件,注意第二次 Patch 时手动还原文件
IDA 符号恢复
- 适用于已知目标程序使用的库(例如 OpenSSL、lua 等)
- 需要插件配合:BinDiff
- 思想:比较两份代码,查找相似函数,并将匹配上的相似函数命名成对应的符号。
流程:
- 通过字符串判断开源库使用情况
- 编译相同架构的开源库
- 使用 IDA 分析得到 a.idb
- 目标程序 IDA 中用 bindiff 插件分析 a.idb
- 导入符号
例子: bindiff 目录
IDA Bindiff 插件,载入另外一个 idb 后 按下 Ctrl + 6 弹出 bindiff 控制窗口 点击控制窗口中的 Import 导入符号。
IDA PRO的使用02
http://showfaker.top/2024/03/09/IDA-PRO-02/