使用的 IDA Pro 版本:Version 8.3.230608 Windows x64
1. 安装
要么正版:ida-free
有无 Fugger 让我看看正版😘,一年大几千刀乐呢!
要么到 吾爱破解 - 52pojie.cn 上搜一搜,本笔记使用的 IDA Pro 就是来自 52 上的分享(现在都已经有 Version 9.0 的测试版本流出了)
2. Python 插件
IDA 支持以 Python 语言编写的插件。
笔记中目前所使用的 IDA 版本建议使用 Python 3.11。如果你想要更换 IDA 使用的 Python 版本,可以运行安装根目录下的 idaptswitch.exe。
插件的安装很简单,将 xx.py 文件放在 IDA 的 plugins 文件夹里就行。这里推荐两个插件:
- KeyPatch 用以修改汇编指令。使用前需要在 python 中通过 pip 安装依赖 keystone-engine
- LazyIDA 用于提取数据、批量修改数据
3. 选择哪个 IDA
进入 IDA 的安装目录,我们有两个 IDA:ida.exe 和 ida64.exe,要选哪一个?
很简单,要反汇编 32 位可执行文件,就用 ida.exe (32-bit);要反汇编 64 位可执行文件,就用 ida64.exe (64-bit)。
如果不知道可执行文件的位数,我们可以:
- 用 Linux 系统下的 file 文件
- 用 peid、exeinfo 或者 DIE 等查壳软件
请确保目标程序和 IDA 等反编译工具的位数相同(32 位对 32 位,64 位对 64 位),否则可能出现出乎意料的结果。
4. 熟悉 IDA 的功能窗口
- 1. 函数 (Functions) 窗口。列举所有已经被 IDA 识别的函数
- 2.IDA View 窗口。汇编代码窗口,空格键切换图形模式和文本模式,Tab 键和 F5 键切换到伪代码窗口 (Pseudocode)
- 3. 伪代码窗口 (Pseudocode)。在伪代码位置按下 Tab 键可以切换到对应的汇编窗口 (IDA View)。
- 4. 字符串窗口。列举程序代码所有引用到的字符串常量
-
- Shift + F12 打开字符串窗口
- Ctrl + F 可以弹出底部搜索小窗口
-
- 5. 其他窗口,如 HEX View、Exports、Imports、Structures
菜单项 View 选项可以找到 IDA 绝大部分窗口的入口
5. 示例
我们希望找到程序中的 main
函数,因为 main
函数里头是我们真正想要看到的代码。
有时存放主代码的函数不叫
main
,可能叫main_0
或者其他名字。有时你可以在main
函数中看到汇编代码末尾有个jump *****
,那就跟着汇编代码去看看指向的那个函数,说不定有收获。
如何找到 main
函数?一种方式是看 IDA 的 Functions 窗口,找找看有没有 main
函数。
没有或者列出的函数量太大的话就需要分析程序行为了。
试着运行一下程序,看看它的输入输出。很多程序会输出一些提示用字符串,我们可以通过字符串来定位 main
函数。
如果程序结束时 “闪退”,可以在命令行(终端)中运行程序
转到字符串窗口,用 Ctrl + F 唤起搜索小窗口并输入你要找的字符串,然后双击,IDA 会跳到字符串在反汇编中的位置。
你会看到像这样的代码:
1 | .rdata:004250EC aD db '距离出现答案还有%d秒,请耐心等待!',0Ah,0 |
这时可以右击这行代码,选择 “Jump to xref to operand” 或者 “List cross reference to…”,IDA 会列出所有引用了这个字符串的函数,然后你就可以选择要跳到 main
函数了。
找到 main
函数,转到伪代码窗口,我们可以得到一个相对好阅读的代码。当然这个代码中有许多 IDA 没法填上的 “坑”,这是就需要我们合理猜测,将函数和常变量猜出来。
入门阶段逆向程序的基本思路是:
(脱壳程序)–> 运行程序 --> 收集字符串 --> 寻找字符串的引用函数 --> 生成函数伪代码 --> 修复匿名函数 --> 分析程序逻辑 --> 获得 Flag