Foro de elhacker.net

Programación => Ingeniería Inversa => Mensaje iniciado por: ApOkAlizE en 11 Diciembre 2011, 18:22 pm



Título: ¿Como crear mi propio desensamblador en C++?
Publicado por: ApOkAlizE en 11 Diciembre 2011, 18:22 pm
Pues me gustaria a ver si teneis por ahí algun tutorial de como crear nuestros propios desensambladores aunque entiendo que crear un desensamblador debe ser una tarea difícil.
De paso queria preguntar, si por ejemplo si tu creas un programa en C++ y creas un sistema de cifrado, o sea que hay un algoritmo... si al desensamblar se puede ver el algoritmo, lo pregunto porque por ejemplo entonces si se pudieraa ver no serviria de nada que por ejemplo un programa, por ejemplo un cliente de chat encriptara las conversaciones, ya que luego desensamblando el .exe podriamos ver como se cifra todo... ¿alguien sabe si se podría ver?
Muchas gracias de antemano.


Título: Re: ¿Como crear mi propio desensamblador en C++?
Publicado por: MCKSys Argentina en 12 Diciembre 2011, 16:51 pm
Pues me gustaria a ver si teneis por ahí algun tutorial de como crear nuestros propios desensambladores aunque entiendo que crear un desensamblador debe ser una tarea difícil.

Si, es difícil. Te recomiendo usar uno ya existente. En SourceForge encontraras algunos...

De paso queria preguntar, si por ejemplo si tu creas un programa en C++ y creas un sistema de cifrado, o sea que hay un algoritmo... si al desensamblar se puede ver el algoritmo

Utilizando Ingeniería Inversa, se analiza el programa (en el caso de C++, instrucciones ASM) a fin de obtener el algoritmo usado.

Por lo que la respuesta es si, si se puede obtener el algoritmo.

Saludos!


Título: Re: ¿Como crear mi propio desensamblador en C++?
Publicado por: ukol en 12 Diciembre 2011, 20:44 pm
Yo no diría que es difícil hacer un desemsamblador, aunque claro, quién soy yo para decirlo cuando no he hecho ninguno y ya lo intenté varias veces. Yo diría que no es una tarea difícil pero sí pesada. Aunque la verdad, es lo que dice MCKSys, ya hay muchos hechos y de código abierto. Uno muy asequible parece ser el del Ollydbg, la única parte que tiene liberada es precisamente el desensamblador.
Si aún así te apetece hacerlo hay un tutorial bastante chulo y conocido: http://www.spiralspace.com/Depot/Projects/Disassembler/ (http://www.spiralspace.com/Depot/Projects/Disassembler/)

Respecto a lo segundo, sí que sirve cifrar los mensajes, los algoritmos de cifrado son difícilmente inversibles, que no reversibles, creo que lo he dicho bien, de nada te sirve tenerlos si no conoces la clave. Sino prueba a adivinar cuál es la palabra que con md5hash da esto
Código:
4d186321c1a7f0f354b297e8914ab240
.El algoritmo es muy conocido pero el de calcular la inversa no existe.


Título: Re: ¿Como crear mi propio desensamblador en C++?
Publicado por: karmany en 12 Diciembre 2011, 23:38 pm
También puedes usar potentes librerías como esta pedazo de librería en C que se puede usar bajo licencia LGPL:
http://www.beaengine.org/ (http://www.beaengine.org/)


Título: Re: ¿Como crear mi propio desensamblador en C++?
Publicado por: ApOkAlizE en 13 Diciembre 2011, 15:10 pm
Si, es difícil. Te recomiendo usar uno ya existente. En SourceForge encontraras algunos...

Utilizando Ingeniería Inversa, se analiza el programa (en el caso de C++, instrucciones ASM) a fin de obtener el algoritmo usado.

Por lo que la respuesta es si, si se puede obtener el algoritmo.

Saludos!

pero si desensamblandolo se puede obtener el algoritmo ¿como se hace por ejemplo para que un sistema de cifrado no se pueda ver? por ejemplo los registros cifrados por el propio sistema operativo o librerias que encriptan para un programa tipo chat ¿como es que dicen que no se puede o es muy difícil descifrar porque si solo se trata de desensamblar...?


Título: Re: ¿Como crear mi propio desensamblador en C++?
Publicado por: _Enko en 13 Diciembre 2011, 15:25 pm
Estas confundiendo cosas.
No es lo mismo un archivo o un mensaje cifrado, que una ejecutable cifrada.

Una ejecutable que fue cifrada, forzosamente debe contener el algoritmo del decifrado para que le procesador la pueda ejecutar. Tarde o temprano termina siendo decifrada y ejecutada. Es decir, la ejecutable debe contener la llave. Si esta cifrada para que la use una sola persona, con una sola llave posible, entonces hay que saber cual es la clave. Si no se sabe, fuerza bruta y lleva tiempo.

En el caso de un chat, parte del cifrado puede estar ocurriendo en el servidor, donde no tienes acceso.
Los algoritmos md5, sha, aes son de conocimiento publico. El tema es que aun sabiendo como es el algoritmo, sin tener la llave correcta puede llevar dias/meses/años de fuerza bruta.

Saludos.


Título: Re: ¿Como crear mi propio desensamblador en C++?
Publicado por: ukol en 13 Diciembre 2011, 15:46 pm
También puedes usar potentes librerías como esta pedazo de librería en C que se puede usar bajo licencia LGPL:
http://www.beaengine.org/ (http://www.beaengine.org/)
karmany ¿has usado BeaEngine? tengo la curiosidad si se puede saber, ¿para qué? por cierto, me fijé que no trae ensamblador, que curioso, ¿no?


Título: Re: ¿Como crear mi propio desensamblador en C++?
Publicado por: karmany en 13 Diciembre 2011, 17:34 pm
No he programado con esa librería, sólo la he usado como plugin en Olly y en alguna herramienta que hay de prueba. Esa página tiene muchísima información de cómo usar la librería. Como curiosidad, recuerdo que el plugin en Olly ralentizaba el desensamblado (tal vez alguna configuración) pero esto era hace tiempo, ahora no sé cómo será.

Yo lo he comentado como otra propuesta más, porque como tú dices se puede descargar el código  del desensamblado que usa OllyDBG.


Título: Re: ¿Como crear mi propio desensamblador en C++?
Publicado por: ApOkAlizE en 14 Diciembre 2011, 22:56 pm
Enko con un chat no me refiero a que haya un servidor por medio, sino directamente de PC a PC sin intermedios, por ejemplo imaginate que hablamos de tu ordenador al mio entonces el programa de chat debe tener el algoritmo en su codigo tanto para cifrar como descifrar lo que tu me envias a mi, por tanto, si alguien lo desensamblara podria leer todo lo que nos estamos escribiendo ¿me equivoco?


Título: Re: ¿Como crear mi propio desensamblador en C++?
Publicado por: MCKSys Argentina en 15 Diciembre 2011, 20:45 pm
El saber el algoritmo de codificacion de un mensaje, no implica el poder decodificarlo.

Por ejemplo, si usas Blowfish para cifrar y la clave es lo suficientemente larga, sera MUY complicado (casi imposible) para el atacante poder descifrar el codigo. AUN sabiendo el algoritmo usado...

Para mayor referencia, mira aqui: http://es.wikipedia.org/wiki/Encriptacion

Saludos!