您是否需要像 IDA Pro 这样的 64 位反汇编器来反汇编 64 位代码?

逆向工程 反汇编者
2021-07-04 08:48:26

我的问题很简单,您可以使用 64 位反汇编程序(如 IDA Pro 64 位)来反转 64 位编译代码,还是可以使用 32 位代码反汇编程序。我有点困惑。

4个回答

不,你没有

尽管名称如此,“IDA Pro 64”允许您分析 64 位文件,但它本身就是一个 32 位程序(直到 7.0 版)。

反汇编程序可以是任何位数和平台。程序员只需要了解文件格式。有了这些知识,您甚至可以为 16 位 CPU 实现 x64 反汇编程序。

但是,您可能无法运行和调试代码。但这不再是反汇编程序了。

如果您只对使用 32 位可执行文件在 32 位计算机中反汇编 64 位代码感兴趣,您的问题不清楚,您可以通过 airesoft检查disasm 等反汇编 程序

或使用顶石等煮一个

hte 或 bdasm 等 iirc hexeditors 也可以处理在 32 位计算机中反汇编 64 位代码最近没有使用它们但我记得使用它们在 windows 中反汇编 elf 文件

使用来自 airesoft 的 disasm.exe 的 x64 windbg.exe wmain 函数 ala objdump 样式的示例输出反汇编

:\>DisAsm.exe "e:\EWDK\Program Files\Windows Kits\10\Debuggers\x64\windbg.exe" wmain -blf > foo.txt

:\>head foo.txt
twitter.com/ThatThereClaire
No size info found for wmain. Approximating...
No size info found for wmainCRTStartup. Approximating...
windbg!wmain:
                           00000000`4003e458 488bc4          mov     rax,rsp
                           00000000`4003e45b 48895808        mov     qword ptr [rax+8],rbx
                           00000000`4003e45f 48897010        mov     qword ptr [rax+10h],rsi
                           00000000`4003e463 48897818        mov     qword ptr [rax+18h],rdi
                           00000000`4003e467 55              push    rbp
                           00000000`4003e468 4154            push    r12

您也可以使用windbg -z在32位计算机中反汇编64位二进制文​​件,如下所示

C:\>cdb  -z "e:\EWDK\Program Files\Windows Kits\10\Debuggers\x64\dbgeng.dll"

Microsoft (R) Windows Debugger Version 10.0.15063.400 X86

ModLoad: 00000001`80000000 00000001`80626000   e:\EWDK\Program Files\Windows Kits\10\Debuggers\x64\dbgeng.dll

0:000> uf dbgeng!PopOutCtl
dbgeng!PopOutCtl:
00000001`80066160 4053            push    rbx
00000001`80066162 4883ec20        sub     rsp,20h
00000001`80066166 488bd9          mov     rbx,rcx
00000001`80066169 e8ba070000      call    dbgeng!FlushCallbacks (00000001`80066928)
00000001`8006616e 8b03            mov     eax,dword ptr [rbx]
00000001`80066170 890566a65300    mov     dword ptr [dbgeng!g_OutputControl (00000001`805a07dc)],eax
00000001`80066176 488b4308        mov     rax,qword ptr [rbx+8]
00000001`8006617a 4889057f575400  mov     qword ptr [dbgeng!g_OutputClient (00000001`805ab900)],rax
00000001`80066181 8b4310          mov     eax,dword ptr [rbx+10h]
00000001`80066184 89056e575400    mov     dword ptr [dbgeng!g_BufferOutput (00000001`805ab8f8)],eax
00000001`8006618a 8b4314          mov     eax,dword ptr [rbx+14h]
00000001`8006618d 890565a65300    mov     dword ptr [dbgeng!g_OutputWidth (00000001`805a07f8)],eax
00000001`80066193 488b4318        mov     rax,qword ptr [rbx+18h]
00000001`80066197 48890542da5400  mov     qword ptr [dbgeng!g_OutputLinePrefix (00000001`805b3be0)],rax
00000001`8006619e 4883c420        add     rsp,20h
00000001`800661a2 5b              pop     rbx
00000001`800661a3 c3              ret
0:000> 

要添加许多“否”响应:最新的“64 位反汇编器/IDA Pro”指的是反汇编器应用程序本身——它以 64 位模式执行(更快一点,通常对操作系统更好,因为它们都是 64位在那里几天)。这与它可以反汇编什么代码无关。最新版本的功能与之前的“32 位”版本基本相同。至少在大多数非专业人士如何看待它的水平上。

不过,64 位 IDA Pro 可能会破坏所有预编译插件,因为它们都是在 32 位模式下编译的。我没查过