是否有任何现代组装级修补工具?

逆向工程 ollydbg 修补
2021-06-20 20:42:21

我最近一直在进行一个小的 RE 项目,我需要在其中修补可执行文件。对于小的修改,我知道足够多的 x86 可以在跳转、nop、无限循环等中打补丁,所以十六进制编辑器就足够了。但是更大的呢?

我曾经为此使用 OllyDbg,里面有很棒的工具,你可以转到任何一行,按空格键并开始组装,你替换的指令会自动填充 NOP,甚至还有很好的插件来查找代码洞。

不幸的是,OllyDbg 这些天似乎几乎没有更新并且无法在 64 位 Windows 8.1 上加载任何应用程序,所以我已经切换到 Hiew。Hiew 不错,但界面很好,与 Olly 相比,有点过时且使用起来相当麻烦。

我想知道是否有人知道可以执行相同功能的任何更现代的工具。

4个回答

我经常使用radare2来修补二进制文件。它工作得很好,它是免费的(就像在自由中一样)并且可以编写脚本。

如果你有 IDA pro,最近发布了 IDA patcher。虽然我没有亲自使用过它,但它赢得了 Hexrays 插件竞赛之一,而且可能相当合理。

https://thesprawl.org/projects/ida-patcher/

还有我过去使用过的这个简单的python脚本:

http://stalkr.net/files/ida/idadif.py

这不是现代的,但它有效。

有一些非常棒的选择。

首先,我在打补丁时经常忘记的事情是LD_PRELOAD使挂钩/重定向库例程非常容易。

如果您必须修补指令,我经常使用的工具是pwntools(一个 Python 库)和Fentanyl(一个 IDAPython 脚本)。

对于pwntools,以下将是在文件地址 0x1234 处修补指令的示例,我们将其称为虚拟地址 0x8001234。请注意,此支持仅限于 ELF 文件,不适用于 PE。

#!/usr/bin/env python
from pwn import *
file = ELF('/path/to/elf')
file.asm(0x8001234, 'nop') # Using virtual address
file.asm(file.offset_to_vaddr(0x1234), 'nop') # File offset
file.save('/path/to/output')

使用芬太尼是图形用户界面驱动的,但它工作得很好,甚至可以不填充您的指令并修复偏移量。

芬太尼演示

使用x64dbg它在现代 Windows 上与 x86 和 x64 完美配合,您可以像在 Olly 中一样修补和保存。总的来说,界面与olly非常相似