我的问题很简单,您可以使用 64 位反汇编程序(如 IDA Pro 64 位)来反转 64 位编译代码,还是可以使用 32 位代码反汇编程序。我有点困惑。
您是否需要像 IDA Pro 这样的 64 位反汇编器来反汇编 64 位代码?
逆向工程
反汇编者
2021-07-04 08:48:26
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 位模式下编译的。我没查过