#x86 #逆向工程 #汇编 #漏洞 #反汇编器 # #字节

app x86reducer

一个基于Rust的x86反汇编器,为JHU的REVA课程编写

1个不稳定版本

0.1.0 2022年5月14日

#30#漏洞

MIT 协议

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