elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Ingeniería Inversa (Moderadores: karmany, .:UND3R:., MCKSys Argentina)
| | |-+  [DUDA] Encontrar diferencias entre ejecutable compilado y código fuente modifica
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [DUDA] Encontrar diferencias entre ejecutable compilado y código fuente modifica  (Leído 9,490 veces)
chompux

Desconectado Desconectado

Mensajes: 4


Ver Perfil
[DUDA] Encontrar diferencias entre ejecutable compilado y código fuente modifica
« en: 24 Mayo 2015, 07:15 am »

Hola queridos compañeros, normalmente solo leo los post que vienen aqui, porque gran parte de las cosas ya se preguntaron, y las que no es porque uno las puede llegar a encontrar por uno mismo, pero hoy tengo un problema bastante extraño, yo tengo el código fuente de una aplicación, el cual es una versión modificada de una libre, y tengo el ejecutable de otra aplicación modificada de la misma versión libre, existe la manera de generar el seudocodigo que es diferente entre ellas? algunas cosas que agrego esta persona a su aplicacion me interesa saber como funcionan, como referencia final el codigo original tiene una licencia MIT que segun yo es totalmente legal usar el codigo de otras modificaciones =D  :P
« Última modificación: 24 Mayo 2015, 23:49 pm por chompux » En línea

HCK.

Desconectado Desconectado

Mensajes: 181



Ver Perfil
Re: (duda) Fusionar 2 Ejecutables
« Respuesta #1 en: 24 Mayo 2015, 09:27 am »

Hola queridos compañeros, normalmente solo leo los post que vienen aqui, porque gran parte de las cosas ya se preguntaron, y las que no es porque uno las puede llegar a encontrar por uno mismo, pero hoy tengo un problema bastante extraño, yo tengo el código fuente de una aplicación, el cual es una versión modificada de una libre, y tengo el ejecutable de otra aplicación modificada de la misma versión libre, existe la manera de generar el seudocodigo que es diferente entre ellas? algunas cosas que agrego esta persona a su aplicacion me interesa saber como funcionan, como referencia final el codigo original tiene una licencia MIT que segun yo es totalmente legal usar el codigo de otras modificaciones =D  :P

Si conoces las modificaciones técnicas o diferencias entre uno y otro, puedes ir a las funciones que realizan esas acciones en el código modificado y contemplar las diferencias ejecutando el ejecutable original y el modificado con el depurador el código, e ir eliminando las funciones "extras" o dejándolas lo más parecidas a las originales...
Si eres nuevo programando, y no sabes como funciona, lo mejor es que vayas leyendo código de la versión modificada poco a poco e interpretando que hace, y luego de la versión original, interpretar ls diferencia y "googlear" poco a poco para interpretarlo correctamente.. Aprenderás mucho y acabarás encontrando las diferencias del original.

Por ejemplo; "sustituir botón click por radiobutton" (ejemplo cutre, pero vale...)
Y a partir de ahí vas modificando.

Si no es un lenguaje .NET, no podrás decompilar el código tal y como fue escrito y por lo tanto no podrás hacer lo que pides de la manera que quieres.
Lo más parecido a lo que pides seria usar ingeniería inversa del ejecutable, y si sabes hacerla no creo que preguntases.

Por cierto, si quieres mas opiniones, el termino de fusionar dos ejecutables esta mal... Deberías de cambiarlo por "Encontrar diferencias entre ejecutable compilado y código fuente modificado"...

Fusionar dos ejecutables es lo que hacen los lammers para saltarse el AV, y la gente no suele ni leer el tema... Aparte de no ser el término correcto de lo que quieres hacer.

Un saludo!  :)

« Última modificación: 24 Mayo 2015, 09:42 am por HCK. » En línea

chompux

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: (duda) Fusionar 2 Ejecutables
« Respuesta #2 en: 25 Mayo 2015, 02:16 am »


Si no es un lenguaje .NET, no podrás decompilar el código tal y como fue escrito y por lo tanto no podrás hacer lo que pides de la manera que quieres.
Lo más parecido a lo que pides seria usar ingeniería inversa del ejecutable, y si sabes hacerla no creo que preguntases.


Creo que fue compilado en lenguaje .NET pero no encuentro como descompilarlo lo malo es que no se que version de .NET es, ya intente con .NetReflactor pero como es una aplicacion de DirectX y solo dice "is not a .NET module." entonces no como resolver esto.
En línea

ThunderCls


Desconectado Desconectado

Mensajes: 455


Coder | Reverser | Gamer


Ver Perfil WWW
Re: [DUDA] Encontrar diferencias entre ejecutable compilado y código fuente modifica
« Respuesta #3 en: 25 Mayo 2015, 04:54 am »

1- Primero verifica que este realmente compilado en .NET y si no tiene ofuscacion, para esto puedes utilizar cualquier PE Analizer, te recomiendo RDG Packer Detector, pues es uno de los mas actualizados, AQUI
2- Luego si esta realmente creado en .NET usa cualquier decompiler como Reflector, ILSpy, etc.
3- Si esta ofuscado o protegido de alguna forma puedes probar pasandolo antes por el De4Dot, AQUI
4- Finalmente puedes usar tb IDA+BinDiff para obtener las diferencias entre dos ejecutables.

Saludos
En línea

-[ "…I can only show you the door. You're the one that has to walk through it." – Morpheus (The Matrix) ]-
http://reversec0de.wordpress.com
https://github.com/ThunderCls/
chompux

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: [DUDA] Encontrar diferencias entre ejecutable compilado y código fuente modifica
« Respuesta #4 en: 25 Mayo 2015, 05:23 am »

1- Primero verifica que este realmente compilado en .NET y si no tiene ofuscacion, para esto puedes utilizar cualquier PE Analizer, te recomiendo RDG Packer Detector, pues es uno de los mas actualizados, AQUI
2- Luego si esta realmente creado en .NET usa cualquier decompiler como Reflector, ILSpy, etc.
3- Si esta ofuscado o protegido de alguna forma puedes probar pasandolo antes por el De4Dot, AQUI
4- Finalmente puedes usar tb IDA+BinDiff para obtener las diferencias entre dos ejecutables.

Saludos


Hola nuevamente, ya intente lo que mencionas y parece que esta protegido. el RDG me muestra que esta escrito en VC++ 11.0 con lo cual confirmo que si es .NET, pero muestra que tiene multiples protectiones UPX que para ser sincero si desconozco de esto de las protecciones =S, aparecen 4 versiones de

UPX Detection Heuristica
UPX V0.8x
UPX V0.8 - V1.25
UPX V1.95 Beta -3.x"

Al intentar pasarlo a De4Dot no se obtiene resultado solo me pone "WARNING: The file isn't a .NET PE file", al revisar el foro por información del UPX encontre muchas cosas utiles, donde empiezo a revisar esto? para que me sirva en este fin? Gracias por las respuestas. =D
« Última modificación: 25 Mayo 2015, 05:26 am por chompux » En línea

ThunderCls


Desconectado Desconectado

Mensajes: 455


Coder | Reverser | Gamer


Ver Perfil WWW
Re: [DUDA] Encontrar diferencias entre ejecutable compilado y código fuente modifica
« Respuesta #5 en: 25 Mayo 2015, 06:06 am »

el RDG me muestra que esta escrito en VC++ 11.0 con lo cual confirmo que si es .NET

Tu mismo te distes la respuesta:
Al intentar pasarlo a De4Dot no se obtiene resultado solo me pone "WARNING: The file isn't a .NET PE file"

Visual C++ 11.0 no tiene nada que ver con el Framework .NET, por consiguiente tu ejecutable tampoco, el propio De4Dot te lo indica, asi que puedes descartar los decompiler .NET (Reflector, ILSpy, etc) para obtener codigo fuente o algun tipo de pseudocodigo en lenguaje de alto nivel, al final vas a tener que irte por la mas complicada y echar mano al reversing con IDA, OllyDbg o cualquier otro parecido y ver que puedes sacar en ASM, o irte por la opcion 4 que te comente antes + HexRays Decompiler para ayudarte un poco en pseudocodigo para las funciones diferentes.
En línea

-[ "…I can only show you the door. You're the one that has to walk through it." – Morpheus (The Matrix) ]-
http://reversec0de.wordpress.com
https://github.com/ThunderCls/
Eleкtro
Ex-Staff
*
Conectado Conectado

Mensajes: 9.878



Ver Perfil
Re: [DUDA] Encontrar diferencias entre ejecutable compilado y código fuente modifica
« Respuesta #6 en: 27 Mayo 2015, 01:43 am »

ya intente con .NetReflactor pero como es una aplicacion de DirectX y solo dice "is not a .NET module." entonces no como resolver esto.

Si la aplicación .Net Reflector te dice eso, entonces NO es un ensamblado .Net.

Puedes utilizar la herramienta PeId o también TridNet para analizar el .exe y determinar el lenguaje (con un posible margen de error).

PeId
TridNet

Nota: Preferiblemente deberías utilizar TridNet si no dispones de una buena base de firmas personalizada para PeId.



existe la manera de generar el seudocodigo que es diferente entre ellas?

¿Generar pseudo-codigo?, el pseudo-código es un concepto, no se le puede denominar "código" sino más bien una descripción del código, y como tal, el pseudo-codigo no se define por un estándar, cada uno tiene su forma de elaborar un pseudo-codigo, por todo ello dudo mucho que exista alguna herramienta (al menos gratuita) que se haya molestado en la ardua tarea de desarrollar un algoritmo de interpretación para traducir el código máquina, código byte, o código de lenguaje específico a código humano, cosa que se podría llevar a cabo, ¿pero para qué lo iba a hacer alguien?, si la idea de la programación es empezar con pseudo-codigo, y luego convertirlo a un lenguaje específico, no al revés.
 


Encontrar diferencias entre ejecutable compilado y código fuente modifica

Es imposible restaurar una copia 100% exacta del código fuente original que se usó para compilar un programa, ya que al compilar, se modifica (se añade y se descartan) muchas partes de esos códigos que nosotros escribimos,
por ende, no puedes realizar una comparación más o menos automatizada y coherente entre las diferencias de 2 aplicaciones si por un lado tienes el código fuente de una (el código del lenguaje específico), y por el otro lado tienes el binario de la otra aplicación,
lo que quiero decir es que deberías tener o bien 2 código fuentes sin compilar, o bien dos binarios compilados, y cómo no puedes obtener una copia 100% exacta del código fuente del programa que ya tienes compilado por el motivo que ya he explicado, lo que debes hacer es compilar el código fuente que tienes sin compilar, y posteriórmente descompilas o en su defecto desamblas los dos binarios, obteniendo así las instrucciones compiladas de ambos binarios si desamblas, que sería "el código fuente en su estado más puro", o la traducción a código específico de lenguaje si usas un descompilador (lo cual te sería muchísimo más facil de entender, analizar y comparar),
en fin, con lo que obtengas ya si que podrás realizar una comparación eficiente, analizando el código descompilado de cada aplicación.

No te recomiendo ninguna herramienta en concreto ya que, aparte de que no soy ningún experto en la ingeniería inversa, desconozco en que lenguaje han desarrollado la aplicación que intentas analizar, y para cada lenguaje hay descompiladores distintos, aunque una herramienta general para desamblar sería IDA, y si la aplicación está desarrollada en C++ o Visual-C++ y dispones de la información de depuración, que es un archivo con extensión .pdb (si no lo tienes, puedes intentar pedirle al autor del programa que contruya el archivo de depuración y lo comparta), entonces también podrás descompilar parcialmente con IDA (pro), que ya sería algo muy positivo, por que de lo contrario, si no puedes descompilar, te resultará una pesadilla tener que comparar diferencias analizando las instrucciones/opcodes...

¿Cómo comparar las diferencias entre el código restaurado de ambas aplicaciones?, debes descompilar cada aplicación, y buscar el modo de exportar el material descompilado, es decir las classes, los archivos de texto plano, si es una buena herramienta de ingenieria inversa para la descompilación entonces seguro que permitirá una opción similar, sino ... busca una herramienta mejor; y si no puedes descompilar y en su defecto debes desamblar pues no sigas leyendo por que esto que voy a decir no te servirá...
en fin, una vez tengas los archivos descompilados de cada aplicación, comparas las diferencias entre cada archivo aplicando la técnica de comparación Diff,
existen multitud de herramientas que utilizan dicha técnica, tanto aplicaciones de escritorio (ej: Araxis Merge, la que yo uso) cómo servicios online (ej: https://www.diffchecker.com/).

Araxis Merge
Comparison of file comparison tools

Cita de: Araxis Merge

Saludos!
« Última modificación: 27 Mayo 2015, 02:11 am por Eleкtro » En línea



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Decompilar Ejecutable para obtener codigo fuente
Ingeniería Inversa
BrusAngel 5 46,721 Último mensaje 5 Julio 2008, 20:13 pm
por apuromafo CLS
videotuto como obtener el codigo fuente de un bat compilado
Scripting
Guerrerohgp 2 5,816 Último mensaje 9 Abril 2009, 22:32 pm
por 0x0309
Diferencias en el código fuente C y C++
Programación C/C++
theluigy13etv 5 3,768 Último mensaje 29 Enero 2012, 21:03 pm
por satu
Encontrar diferencias entre dos BIOS para corregirlas.
Dudas Generales
Hason 5 6,081 Último mensaje 20 Enero 2017, 19:17 pm
por Hason
¿Descargar código fuente de paquete o solo compilado?
GNU/Linux
novicio 0 4,993 Último mensaje 24 Agosto 2018, 18:57 pm
por novicio
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines