BP 在 CTF 中的使用
BP(Binary Patch)在 CTF(Capture The Flag)竞赛中常用于修改二进制文件的行为,绕过保护机制或直接获取 flag。以下是常见的使用场景和方法:
修改关键跳转或条件
通过工具如 IDA Pro、Ghidra 或 radare2 定位关键条件判断指令(如jnz、je),将其修改为无条件跳转或相反逻辑。例如:
原指令:74 1C (je 0x1C) 修改为:EB 1C (jmp 0x1C)绕过反调试检查
某些二进制文件会检测调试器,通过修改反调试函数(如ptrace调用)的返回值为 0 或其他有效值:
原指令:E8 xx xx xx xx (call ptrace) 修改为:B8 00 00 00 00 (mov eax, 0)直接篡改内存数据
在运行时通过 GDB 或 pwntools 修改内存中的关键变量值:
from pwn import * p = process('./challenge') p.write(0x804A000, b'\x01') # 修改标志位工具推荐
- 静态修改:
hexedit、IDA Pro、Ghidra - 动态修改:
GDB(set命令)、pwntools - 自动化脚本:
ropper、angr(符号执行辅助定位)
注意事项
- 修改前备份原始文件。
- 注意指令长度一致性(如短跳转替换短跳转)。
- 某些 CTF 题目会校验文件哈希,需同时绕过校验逻辑。