2009-05-20 11 views
5

Estoy buscando una biblioteca que desmonte el código x86 en algún tipo de modelo de objetos que luego pueda usar para escribir rutinas que analicen el código. No me interesa una biblioteca que convierta el código x86 en un desensamblador de texto. He encontrado más que algunos de ellos, pero no son tan útiles ya que quiero trabajar un poco sobre el código que desarmo. . Ah, y me gustaría que fuera. Código de red (preferible VB o C#).¿Hay alguna buena biblioteca de desensamblador VB/C# x86?

+0

x86 nativo? o IL? –

+0

Nativo x86. IL es fácil ... :-) – panopticoncentral

+0

[Reflector] (http://www.red-gate.com/products/reflector/) es tu amigo. – Vadim

Respuesta

6

Reflector no funciona x86 hasta donde yo sé.

Su mejor opción es utilizar la interfaz COM o Scripting para OllyDbg o IDA Pro.

Recomendaría IDA Pro si puede pagarlo. IDA tiene una API muy rica, desarrollo activo y mucha documentación. Puedes ejecutarlo en modo autónomo, creo que usando el interruptor '-AS'. Consulte http://www.hex-rays.com/idapro/idadoc/417.htm para obtener más información sobre los argumentos de la línea de comando.

También me encontré con libdasm, pero nunca lo usé, así que no estoy seguro de lo bueno que es. libdasm se parece a C/C++, por lo que debería ser simple escribir un contenedor de API en C#.

+0

He usado IDA Pro como desensamblador directo, pero no pensé en usarlo porque parecía que solo tenía automatización interna. ¿Es posible automatizarlo desde el exterior? Supongo que no estoy 100% en contra de trabajar por completo en IDA Pro, pero preferiría usar un lenguaje .Net si puedo. – panopticoncentral

+1

Sí, puede ejecutarlo en modo autónomo y especificar el script IDC que desea ejecutar. También puede desarrollar utilizando la API C y las interfaces COM desde la API de complemento. Ese es probablemente el mejor puente de desmontaje y análisis que obtendrá. – kervin

4

Una vieja pregunta, pero si viene otra persona y está buscando una implementación 100% C# .NET en lugar de usar interoperabilidad, SharpDisasm proporciona un desensamblador x86/x86-64 para la sintaxis Intel y AT & T. Decodifica cada instrucción a un objeto que proporciona acceso a información de bajo nivel acerca de la instrucción (por ejemplo, tamaño de instrucción, número de operando y tipos, etc.).

SharpDisasm es un puerto C# completo del libudis86 C-library disassembler.

El desensamblador está expuesto a través de la clase SharpDisam.Disassembler.

resultado del ejemplo proporcionado aplicación de consola:

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

Necromancing, como ha pasado bastante tiempo.
Sí, en realidad hay varios.

Capstone.NET es prácticamente completo de funciones (libcapsone-port ARM, ARM64 (también conocido como ARMv8/AArch64), M68K, Mips, PowerPC, Sparc, SystemZ, XCore, X86 (incluido X86_64).Es compatible con la mayoría de las extensiones de CPU modernas):
https://github.com/9ee1/Capstone.NET
http://www.capstone-engine.org/features.html
(licencia MIT)

Entonces, como ya se ha mencionado, hay SharpDisasm (libudis-puerto):
https://sharpdisasm.codeplex.com/
(Licencia BSD simplificado (BSD))

Luego está Reko (x86-Decompiler)
https://github.com/uxmal/reko
(GNU general de Pu Licencia BLIC)

Hay ElfSharp para leer archivos ELF:
https://github.com/konrad-kruczynski/elfsharp
(MIT Licencia & LLVM)

O leer el formato PE de esta manera:
http://code.cheesydesign.com/?p=572

O usando PETools:
https://github.com/jsok/PETools
(Licencia MIT)

Hay también una herramienta para inspeccionar los archivos lib:
https://github.com/BlazingHeart/SymbolExplorer

También hay una biblioteca x86 ensamblador:
https://code.google.com/p/managed-x86/

Y la función ELF hash
https://damieng.com/blog/2007/11/24/calculating-elf-32-in-c-and-net


Además, dispondrá de una página especial en wikibooks:
https://en.wikibooks.org/wiki/X86_Disassembly/Disassemblers_and_Decompilers

También está el muñeco de nieve-decompilador, que utiliza Capstone:
https://github.com/yegord/snowman

Cuestiones relacionadas