asm 片段到伪代码

逆向工程 艾达 反编译 雷达2 吉德拉 六线谱
2021-07-04 11:18:30

我正在研究一种从程序集片段中生成伪代码的方法,

让我们假设我有这个 ASM

    push    rbp
    mov     rbp, rsp
    mov     DWORD PTR [rbp-4], edi
    mov     DWORD PTR [rbp-8], esi
    mov     edx, DWORD PTR [rbp-4]
    mov     eax, DWORD PTR [rbp-8]
    add     eax, edx
    pop     rbp
    ret

有没有办法使用可用的反编译器将其转换为伪代码?

如果有任何导出的API?

2个回答

您可以按照说明,将它们组合成十六进制值,例如使用:Online disassembler

然后你得到字节表示: \x55\x48\x89\xE5\x89\x7D\xFC\x89\x75\xF8\x8B\x55\xFC\x8B\x45\xF8\x01\xD0\x5D\xC3

有了这个,您可以修补二进制文件中的字节,然后在修补区域上的Ghidra/ 中使用正常的反编译功能Ida

您实际上可以使用 NASM 进行编译,具体取决于您的首选架构,示例命令如下(我使用的是 linux):

nasm -f elf64 -o ./sample.asm ./sample.o 
ld -o ./sample ./sample.o 


global _start

section .text

_start:

    push    rbp
    mov     rbp, rsp
    mov     DWORD [rbp-4], edi
    mov     DWORD [rbp-8], esi
    mov     edx, DWORD [rbp-4]
    mov     eax, DWORD [rbp-8]
    add     eax, edx
    pop     rbp
    ret

编译和链接后,我使用了带有伪代码支持的 IDA,就像上面提到的@macro_controller 一样。

在此处输入图片说明

这是结果。

在此处输入图片说明