¿Como crear mi propio desensamblador en C++?

Iniciado por ApOkAlizE, 11 Diciembre 2011, 18:22 PM

0 Miembros y 1 Visitante están viendo este tema.

ApOkAlizE

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.
Los virus informaticos son como las personas, hacen lo posible para destruir y hacen lo impossible para no ser destruidos... - ApOkAlizE

MCKSys Argentina

Cita de: 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.

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

Cita de: ApOkAlizE en 11 Diciembre 2011, 18:22 PM
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!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


ukol

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/

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 4d186321c1a7f0f354b297e8914ab240.El algoritmo es muy conocido pero el de calcular la inversa no existe.

karmany

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/

ApOkAlizE

Cita de: MCKSys Argentina en 12 Diciembre 2011, 16:51 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...?
Los virus informaticos son como las personas, hacen lo posible para destruir y hacen lo impossible para no ser destruidos... - ApOkAlizE

_Enko

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.

ukol

Cita de: 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/
karmany ¿has usado BeaEngine? tengo la curiosidad si se puede saber, ¿para qué? por cierto, me fijé que no trae ensamblador, que curioso, ¿no?

karmany

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.

ApOkAlizE

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?
Los virus informaticos son como las personas, hacen lo posible para destruir y hacen lo impossible para no ser destruidos... - ApOkAlizE

MCKSys Argentina

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!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."