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/
作者
ShowFaker
发布于
2024年3月9日
许可协议