Es posible "descompilar" un Windows.exe? ¿O al menos ver la Asamblea?


Un amigo mío descargó un malware de Facebook, y tengo curiosidad por ver lo que hace sin infectarme. Sé que realmente no se puede descompilar una .exe, pero ¿puedo al menos verlo en Ensamblado o adjuntar un depurador?

Editar para decir que no es un ejecutable.NET, sin cabecera CLI.

Author: swilliams, 2008-11-07

15 answers

Con un depurador puede pasar por el ensamblado del programa de forma interactiva.
Con un desensamblador , puede ver el ensamblaje del programa con más detalle.
Con un descompilador , puedes volver a convertir un programa en código fuente parcial, asumiendo que sabes en qué fue escrito (lo que puedes averiguar con herramientas gratuitas como PEiD - si el programa está empaquetado, tendrás que desempaquetarlo primero O Detect-it-Easy si no puedes encontrar PEiD en ningún lugar. DIE has una fuerte comunidad de desarrolladores en github actualmente).

Depuradores:

  • OllyDbg, gratis, un buen depurador de 32 bits, para el que puede encontrar numerosos complementos y scripts hechos por el usuario para que sea aún más útil.
  • WinDbg , gratis, un depurador bastante capaz de Microsoft. WinDbg es especialmente útil para observar el funcionamiento interno de Windows, ya que sabe más sobre las estructuras de datos que otros depuradores.
  • SoftICE , SICE a los amigos. Comercial y desarrollo se detuvo en 2006. Softtice es una especie de herramienta hardcore que se ejecuta debajo del sistema operativo (y detiene todo el sistema cuando se invoca). Softtice todavía es utilizado por muchos profesionales, aunque podría ser difícil de obtener y podría no funcionar en algún hardware (o software, es decir, no funcionará en tarjetas Vista o NVIDIA gfx).

Desensambladores:

  • IDA Pro (comercial) - desensamblador/depurador de primera línea. Utilizado por la mayoría de los profesionales, como analistas de malware, etc. Sin embargo, cuesta unos cuantos dólares (existe versión gratuita, pero es bastante bastante limitado)
  • W32Dasm(gratis) - un poco anticuado pero hace el trabajo. Creo que W32Dasm es abandonware en estos días, y hay numerosos hacks creados por el usuario para agregar algunas funcionalidades muy útiles. Tendrás que mirar a tu alrededor para encontrar la mejor versión.

Descompiladores:

  • Visual Basic: VB Decompiler, comercial, produce bytecode algo identificable.
  • Delphi: DeDe, libre, produce código fuente de buena calidad.
  • C: HexRays, commercial, un plugin para IDA Pro de la misma compañía. Produce grandes resultados, pero cuesta mucho dinero, y no se venderá a cualquiera (o eso he oído).
  • . NET(C#): dotPeek, libre, descompila ensamblados. NET 1.0-4.5 a C#. Soporte para .DLL, .exe, .Postal, .vsix, .nupkg, y .winmd file.

Algunas herramientas relacionadas que podrían ser útiles en lo que sea que esté haciendo son editores de recursos como ResourceHacker (gratis) y un buen editor hexadecimal como Hex Workshop (comercial).

Además, si está haciendo análisis de malware (o utiliza SICE), le sugiero que ejecute todo dentro de una máquina virtual, a saber VMware Workstation. En el caso de SICE, protegerá su sistema real de BSODs, y en el caso de malware, protegerá su sistema real del programa de destino. Puede leer sobre el análisis de malware con VMware aquí.

Personalmente, utilizo Olly, WinDbg y W32Dasm, y algunas herramientas más pequeñas.

Además, recuerde que desensamblar o incluso depurar el software de otras personas generalmente está en contra del CLUF en lo más mínimo:)

 372
Author: anon6439,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-17 17:58:14

El excelente post de Psoul responde a tu pregunta, así que no voy a replicar su buen trabajo, pero creo que ayudaría a explicar por qué esta es a la vez una pregunta perfectamente válida pero también terriblemente tonta. Después de todo, este es un lugar para aprender, ¿verdad?

Los programas informáticos modernos se producen a través de una serie de conversiones, comenzando con la entrada de un cuerpo de instrucciones de texto legibles por humanos (llamado "código fuente") y terminando con un cuerpo de instrucciones legibles por computadora (llamado alternativamente "binario" o "código máquina").

La forma en que una computadora ejecuta un conjunto de instrucciones de código máquina es en última instancia muy simple. Cada acción que un procesador puede tomar (por ejemplo, leer de memoria, agregar dos valores) está representada por un código numérico. Si te dijera que el número 1 significaba gritar y el número 2 significaba risita, y luego sostenía cartas con 1 o 2 en ellas esperando que gritaras o risitas en consecuencia, estaría usando lo que es esencialmente el mismo sistema que usa una computadora para operar.

Un archivo binario es solo un conjunto de esos códigos (generalmente llamados "códigos op") y la información ("argumentos") sobre los que actúan los códigos op.

Ahora, el lenguaje ensamblador es un lenguaje de computadora donde cada palabra de comando en el lenguaje representa exactamente un código op en el procesador. Hay una traducción directa 1: 1 entre un comando del lenguaje ensamblador y un código de operación del procesador. Esta es la razón por la que el ensamblaje de codificación para un procesador x386 es diferente del ensamblaje de codificación para un ARM procesador.

El desensamblaje es simplemente esto: un programa lee a través del binario (el código máquina), reemplazando los op-codes con sus comandos equivalentes del lenguaje ensamblador, y produce el resultado como un archivo de texto. Es importante entender esto; si su computadora puede leer el binario, entonces usted también puede leer el binario, ya sea manualmente con una tabla de código operativo en su mano (ick) o a través de un desensamblador.

Los desensambladores tienen algunos trucos nuevos y todo, pero es importante entender que un desensamblador es en última instancia un mecanismo de búsqueda y reemplazo. Es por eso que cualquier EULA que lo prohíba, en última instancia, está soplando aire caliente. Usted no puede a la vez permitir que la computadora que lee los datos del programa y también prohibir la computadora que lee los datos del programa.

(No me malinterpretes, ha habido intentos de hacerlo. Funcionan tan bien como DRM en archivos de canciones.)

Sin embargo, hay advertencias para el enfoque de desmontaje. Los nombres de variables son inexistentes; tal cosa no existe para su CPU. Las llamadas a la biblioteca son muy confusas y a menudo requieren desarmar más binarios. Y la asamblea es difícil de leer en las mejores condiciones.

La mayoría de los programadores profesionales no pueden sentarse y leer el lenguaje ensamblador sin tener un dolor de cabeza. Para un aficionado no va a pasar.

De todos modos, esta es una explicación un tanto pasada por alto, pero espero que ayude. Todo el mundo puede sentirse libre de corregir cualquier error de mi parte; ha pasado un tiempo. ;)

 38
Author: Jason L,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-07 21:12:47

Cualquier depurador decente puede hacer esto. Intenta OllyDbg . (edit: que tiene un gran desensamblador que incluso decodifica los parámetros a las llamadas WinAPI!)

 11
Author: utku_karatas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-07 18:50:29

Buenas noticias. IDA Pro es en realidad gratis para sus versiones anteriores ahora: http://www.hex-rays.com/idapro/idadownfreeware.htm

 11
Author: Matthew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-07 20:18:18

x64dbg es un depurador bueno y de código abierto que se mantiene activamente.

 8
Author: BullyWiiPlaza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-17 13:26:20

Claro, echa un vistazo a IDA Pro. Ofrecen una versión de evaluación para que pueda probarlo.

 6
Author: Douglas Mayle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-07 18:49:58

Si solo está tratando de averiguar lo que hace un malware, podría ser mucho más fácil ejecutarlo bajo algo como la herramienta gratuita Process Monitor que informará cada vez que intente acceder al sistema de archivos, registro, puertos, etc...

Además, usar una máquina virtual como el servidor gratuito VMware es muy útil para este tipo de trabajo. Puede crear una imagen "limpia" y luego volver a eso cada vez que ejecute el malware.

 5
Author: joeld,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-07 18:59:16

Lo que quiere es un tipo de software llamado "Desensamblador".

Rápido google produce esto: http://www.geocities.com / ~sangcho/disasm.html

 5
Author: Corey Trager,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-07 18:59:28

Puede obtener alguna información viéndola en assembly, pero creo que lo más fácil de hacer es encender una máquina virtual y ver qué hace. Asegúrese de que no tiene acciones abiertas ni nada por el estilo que pueda saltar;)

 4
Author: Rob Prouse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-07 18:49:17
 3
Author: Andru Luvisi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-08 00:26:46

Si desea ejecutar el programa para ver qué hace sin infectar su computadora, use una máquina virtual como VMware o Microsoft VPC, o un programa que pueda sandbox el programa como SandboxIE

 2
Author: Joel Lucsy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-07 21:12:36
 2
Author: plan9assembler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-16 04:40:23

No puedo creer que nadie haya dicho nada sobre Depurador de inmunidad, todavía.

Immunity Debugger es una poderosa herramienta para escribir exploits, analizar malware y realizar ingeniería inversa de archivos binarios. Inicialmente se basó en el código fuente Ollydbg 1.0, pero con un error de resolución de nombres corregido. Tiene una API Python bien soportada para una fácil extensibilidad, por lo que puede escribir sus scripts python para ayudarlo en el análisis.

Además, hay una buena que Peter del equipo de Corelan escribió llamado mona.py , excelente herramienta por cierto.

 2
Author: jyz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-06 13:41:39

Puede usar dotPeek, muy bueno para descompilar el archivo exe. Es gratis.

Https://www.jetbrains.com/decompiler /

 1
Author: Do Nhu Vy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-23 03:58:29

El explorer suite puede hacer lo que quieras.

 0
Author: FloatFish,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-09 08:45:50