1个不稳定版本
0.1.0 | 2022年5月14日 |
---|
#30 在 #漏洞
145KB
4K SLoC
x86reducer
一个用于反汇编原始x86汇编语言的Rust程序,为JHU的逆向工程与漏洞分析课程编写。
反汇编模式
主要模式,返回目标二进制的反汇编输出。请注意,二进制文件必须只包含x86汇编指令,代码从偏移量0开始。
❯ printf >tmp.asm "[BITS 32]\n\nstart:\n\txchg eax, eax\n"
❯ nasm tmp.asm
❯ cargo run -- -i tmp
Finished dev [unoptimized + debuginfo] target(s) in 0.01s
Running `target/debug/reducer -i tmp`
0x00000000: 90 nop
字节解码模式
您还可以手动指定MODR/M字节或MODR/M字节加SIB字节,reducer
将为您解码。
❯ cargo run -- --modrm 4d --sib 00
Finished dev [unoptimized + debuginfo] target(s) in 0.01s
Running `target/debug/reducer --modrm 4d --sib 00`
Decoding: 4D
ModRM { md: RmByte, reg: ECX, rm: EBP }
Decoding: 00
SIB { scale: None, index: EAX, base: EAX }
反汇编模式中的已知问题
存在一些完全属于表面问题的已知问题。
- 有时会以符号扩展DWORD的形式输出有符号字节。
- 有时会以DWORD的形式输出无符号字节。
- 将生成带有幽灵条目的指令。例如,
reducer
将输出call [ + esp + 0x00000033 ]
而不是call [esp + 0x33]
。 - 使用
esp
缩放的SIB字节将无法正确渲染。例如,它们包括一个“空白”的esp
,然后是缩放比例,如[*2 0x11223344]
。
有一个不是完全属于表面问题的已知问题。
- 通过引发和捕获恐慌来处理无效输入。这是非常糟糕的。
依赖项
~3.5MB
~71K SLoC