debugging - olly - ¿Es posible "descompilar" un archivo.exe de Windows? ¿O al menos ver la asamblea?
reflector decompiler (15)
Buenas noticias. IDA Pro es realmente gratis para sus versiones anteriores ahora: http://www.hex-rays.com/idapro/idadownfreeware.htm
Un amigo mío descargó algo de malware de Facebook y tengo curiosidad por ver qué hace sin infectarme. Sé que realmente no se puede descompilar un archivo .exe, pero ¿puedo al menos verlo en Ensamblado o adjuntar un depurador?
Edite para decir que no es un ejecutable .NET, ni un encabezado CLI.
Claro, echa un vistazo a IDA Pro . Ofrecen una versión eval para que puedas probarla.
Cualquier depurador decente puede hacer esto. Pruebe OllyDbg . (edición: ¡que tiene un gran desensamblador que incluso decodifica los parámetros para llamadas WinAPI!)
La suite explorer puede hacer lo que quieras.
Las excelentes respuestas del post de psoul a su pregunta, así que no replicaré su buen trabajo, pero creo que ayudaría a explicar por qué esto 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 de computadora modernos se producen a través de una serie de conversiones, comenzando con la introducción de un cuerpo de instrucciones de texto legibles para las personas (llamado "código fuente") y terminando con un cuerpo de instrucciones legibles por computadora (llamadas alternativamente "binarias" o "máquina"). código").
La forma en que una computadora ejecuta un conjunto de instrucciones de código de máquina es, en última instancia, muy simple. Cada acción que puede realizar un procesador (p. Ej., Leer de la memoria, agregar dos valores) se representa mediante un código numérico. Si te dijera que el número 1 significa grito y el número 2 significa risita, y luego sostengo las tarjetas con 1 o 2 en ellas esperando que grites o que te rías como corresponde, 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 de operación") y la información ("argumentos") sobre la que actúan los códigos de operación.
Ahora, el lenguaje ensamblador es un lenguaje informático donde cada palabra de comando en el idioma representa exactamente un código de operación en el procesador. Hay una traducción directa 1: 1 entre un comando de lenguaje ensamblador y un código de operación del procesador. Esta es la razón por la cual el ensamblaje de codificación para un procesador x386 es diferente al ensamblado de codificación para un procesador ARM.
El desensamblaje es simplemente esto: un programa lee el código binario (el código de la máquina), reemplaza los códigos de operación con sus comandos equivalentes en lenguaje ensamblador y genera el resultado como un archivo de texto. Es importante entender esto; Si su computadora puede leer el binario, también puede leer el binario, ya sea manualmente con una tabla de códigos de operación en su mano (ick) o por medio 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 es, en última instancia, soplar aire caliente. No puede permitir de inmediato que la computadora lea los datos del programa y también prohibir que la computadora lea los datos del programa.
(No me malinterpretes, ha habido intentos de hacerlo. Funcionan tan bien como DRM en los archivos de canciones).
Sin embargo, hay advertencias para el enfoque de desmontaje. Los nombres de las variables no existen; Tal cosa no existe para su CPU. Las llamadas a la biblioteca son tan confusas como el infierno y, a menudo, requieren el desmontaje de otros binarios. Y es muy difícil leer el ensamblaje en las mejores condiciones.
La mayoría de los programadores profesionales no pueden sentarse y leer lenguaje ensamblador sin tener un dolor de cabeza. Para un aficionado simplemente no va a suceder.
De todos modos, esta es una explicación un tanto pasada por alto, pero espero que ayude. Todos pueden sentirse libres de corregir cualquier error de mi parte; ha sido un tiempo. ;)
Lo que quieres es un tipo de software llamado "Desensamblador".
Google rápido produce esto: http://www.geocities.com/~sangcho/disasm.html
No puedo creer que nadie haya dicho nada sobre el 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 de Ollydbg 1.0, pero con el error de resolución de nombres corregido. Tiene una API de Python bien soportada para una fácil extensibilidad, por lo que puede escribir sus scripts de Python para ayudarlo en el análisis.
Además, hay uno bueno que Peter del equipo de Corelan escribió llamado mona.py , excelente herramienta por cierto.
Puede obtener información al verlo en ensamblaje, pero creo que lo más fácil es encender una máquina virtual y ver qué hace. Asegúrate de que no tengas recursos compartidos abiertos ni nada por el estilo por el que pueda saltar;)
Puedes usar dotPeek, muy bueno para descompilar archivos exe. Es gratis.
Si no tienes tiempo, envía el malware a cwsandbox:
http://jon.oberheide.org/blog/2008/01/15/detecting-and-evading-cwsandbox/
HTH
Si solo está tratando de averiguar qué 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 VMWare gratuito es muy útil para este tipo de trabajo. Puede crear una imagen "limpia" y luego volver a eso cada vez que ejecute el malware.
Boomerang también puede valer la pena echarle un vistazo.
x64dbg
es un buen depurador de código abierto que se mantiene activamente.
Con un depurador puede recorrer el ensamblaje del programa de forma interactiva.
Con un desensamblador , puede ver el ensamblaje del programa con más detalle.
Con un descompilador , puede volver a convertir un programa en un código fuente parcial, asumiendo que sabe en qué se escribió (lo que puede descubrir con herramientas gratuitas como PEiD . Si el programa está empaquetado, primero tendrá que desempaquetarlo. O Detect-it-Easy si no puede encontrar PEiD en cualquier lugar. DIE tiene una sólida comunidad de desarrolladores en github actualmente).
Depuradores
- OllyDbg , un depurador de 32 bits excelente, gratuito, para el cual puede encontrar numerosos complementos y scripts hechos por el usuario para que sea aún más útil.
- WinDbg , gratuito, un depurador bastante capaz por parte de Microsoft. WinDbg es especialmente útil para mirar los elementos internos de Windows, ya que sabe más sobre las estructuras de datos que otros depuradores.
- SoftICE , SICE a los amigos. El desarrollo comercial se detuvo en 2006. SoftICE es una especie de herramienta incondicional que se ejecuta debajo del sistema operativo (y detiene todo el sistema cuando se invoca). SoftICE todavía es utilizado por muchos profesionales, aunque puede ser difícil de obtener y puede que no funcione en algún hardware (o software, es decir, no funcionará en las tarjetas gfx de Vista o NVIDIA).
Desensambladores:
- IDA Pro (comercial): desensamblador / depurador de la parte superior de la línea. Lo utilizan la mayoría de los profesionales, como analistas de malware, etc. Sin embargo, cuesta bastante dinero (existe una versión gratuita , pero es bastante limitada)
- W32Dasm (gratis) - un poco anticuado, pero hace el trabajo. Creo que W32Dasm es abandware en estos días, y hay numerosos hacks creados por los usuarios para agregar alguna funcionalidad muy útil. Tendrás que mirar alrededor para encontrar la mejor versión.
Descompiladores:
- Visual Basic: VB Decompiler , comercial, produce un bytecode algo identificable.
- Delphi: DeDe , gratis, produce código fuente de buena calidad.
- C: HexRays , comercial, un complemento para IDA Pro de la misma compañía. Produce excelentes resultados, pero cuesta mucho dinero, y no se venderá a nadie (o eso me dicen).
- .NET (C #): dotPeek , libre, descompila los ensamblados .NET 1.0-4.5 a C #. Soporte para archivos .dll, .exe, .zip, .vsix, .nupkg y .winmd.
Algunas herramientas relacionadas que pueden ser útiles en lo que sea que esté haciendo son los editores de recursos como ResourceHacker (gratis) y un buen editor hexadecimal como Hex Workshop (comercial).
Además, si está realizando un análisis de malware (o utiliza SICE) , le sugiero de todo corazón que ejecute todo dentro de una máquina virtual, a saber, VMware Workstation . En el caso de SICE, protegerá su sistema real de los BSOD y, en el caso del malware, protegerá su sistema real del programa objetivo. Puede leer sobre el análisis de malware con VMware here .
Personalmente, ruedo con Olly, WinDbg y W32Dasm, y algunas herramientas de utilidad más pequeñas.
Además, recuerde que desmontar o incluso depurar el software de otras personas suele ser contra el EULA como mínimo :)