有没有好的VB / C#x86反汇编程序库?

时间:2009-05-20 20:56:39

标签: c# vb.net x86 disassembly

我正在寻找一个将x86代码反汇编成某种对象模型的库,然后我可以用它来编写分析代码的例程。我对一个将x86代码转换为文本反汇编的库不感兴趣 - 我发现其中不止一些,但它们并没有那么有用,因为我想在我拆卸的代码之上做一些工作。哦,我希望它是.Net代码(VB或C#更好)。

3 个答案:

答案 0 :(得分:6)

据我所知,

Reflector不执行x86。

您最好的选择是使用脚本或COM接口OllyDbgIDA 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