我正在寻找一个将x86代码反汇编成某种对象模型的库,然后我可以用它来编写分析代码的例程。我对一个将x86代码转换为文本反汇编的库不感兴趣 - 我发现其中不止一些,但它们并没有那么有用,因为我想在我拆卸的代码之上做一些工作。哦,我希望它是.Net代码(VB或C#更好)。
答案 0 :(得分:6)
Reflector不执行x86。
您最好的选择是使用脚本或COM接口OllyDbg或IDA Pro。
如果你买得起,我会推荐IDA Pro。 IDA拥有非常丰富的API,活跃的开发和大量的文档。您可以在自主模式下运行它,我相信使用'-AS'开关。有关命令行参数的详细信息,请参阅http://www.hex-rays.com/idapro/idadoc/417.htm。
我也遇到libdasm,但从未使用它,所以不确定它有多好。 libdasm看起来像C / C ++,因此在C#中编写API包装器应该很简单。
答案 1 :(得分:4)
一个老问题,但是如果其他人出现并且您使用的是100%C#.NET实现而不是使用互操作,SharpDisasm为Intel和AT& T语法提供了x86 / x86-64反汇编程序。它将每个指令解码为一个对象,该对象提供对指令的低级信息的访问(例如指令大小,操作数和类型等)。
SharpDisasm是libudis86 C库反汇编程序的完整C#端口。
反汇编程序通过SharpDisam.Disassembler
类公开。
从提供的示例控制台应用程序输出:
C:\>echo a1 c9 fd ff ff a1 37 02 00 00 b8 37 02 00 00 b4 09 8a
25 09 00 00 00 8b 04 6d 85 ff ff ff 89 45 f0| disasmcli 32
00000000 a1 c9 fd ff ff mov eax, [0xfffffdc9]
00000005 a1 37 02 00 00 mov eax, [0x237]
0000000a b8 37 02 00 00 mov eax, 0x237
0000000f b4 09 mov ah, 0x9
00000011 8a 25 09 00 00 00 mov ah, [0x9]
00000017 8b 04 6d 85 ff ff ff mov eax, [ebp*2-0x7b]
0000001e 89 45 f0 mov [ebp-0x10], eax
C:\>echo 488b05f7ffffff67668b40f06766035e1048030425ffff
000067660344bef04c0384980000008048a10000000000800000 | disasmcli 64
0000000000000000 48 8b 05 f7 ff ff ff mov rax, [rip-0x9]
0000000000000007 67 66 8b 40 f0 mov ax, [eax-0x10]
000000000000000c 67 66 03 5e 10 add bx, [esi+0x10]
0000000000000011 48 03 04 25 ff ff 00 00 add rax, [0xffff]
0000000000000019 67 66 03 44 be f0 add ax, [esi+edi*4-0x10]
000000000000001f 4c 03 84 98 00 00 00 80 add r8, [rax+rbx*4-0x80000000]
0000000000000027 48 a1 00 00 00 00 00 80 00 00 mov rax, [0x800000000000]
答案 2 :(得分:2)
Necromancing,已经过了很长一段时间 是的,实际上有几个。
Capstone.NET非常功能齐全(libcapsone-port ARM,ARM64(又名ARMv8 / AArch64),M68K,Mips,PowerPC,Sparc,SystemZ,XCore,X86(包括X86_64)。它支持大多数现代CPU扩展):
https://github.com/9ee1/Capstone.NET
http://www.capstone-engine.org/features.html
(麻省理工学院执照)
然后,如前所述,有SharpDisasm(libudis-port):
https://sharpdisasm.codeplex.com/
(简化BSD许可证(BSD))
然后是Reko(x86-DECOMPILER)
https://github.com/uxmal/reko
(GNU通用公共许可证)
有ElfSharp读取ELF文件:
https://github.com/konrad-kruczynski/elfsharp
(麻省理工学院和LLVM许可证)
或者读取这样的PE格式:
http://code.cheesydesign.com/?p=572
或使用PETools:
https://github.com/jsok/PETools
(麻省理工学院执照)
还有一个检查lib文件的工具:
https://github.com/BlazingHeart/SymbolExplorer
还有一个x86汇编程序库:
https://code.google.com/p/managed-x86/
ELF散列函数
https://damieng.com/blog/2007/11/24/calculating-elf-32-in-c-and-net
另外还有wikibooks专用页面:
https://en.wikibooks.org/wiki/X86_Disassembly/Disassemblers_and_Decompilers
还有使用Capstone的雪人反编译器:
https://github.com/yegord/snowman