Un reto !!!

Iniciado por VirucKingX, 29 Abril 2006, 23:10 PM

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

VirucKingX

Esta podria ser la pregunta mas lammer del planeta pero igual la voi a decir ^^

¿Seria posible ver el código fuente de un exe, ya compilado?

Lo primero que me vino a la cabeza es un IMPOSIBLE, pero como ustedes sabran y yo se que las cosas imposibles, son siempre posibles... Realmente me hizo pensar ese pregunta q lei en otro foro incluso aun la estoy pensando, jajaja

Y lo q me hace dudar aun mas, es cuando pasas un .exe a .rtf . Lo q pasa es q puedes ver partes del code  :P asi q no se si se podra.

bye si no se puede, diganme por q no se puede  :huh:



Bye

_Sergi_

Bueno lo primero. Eso no es que sea imposible. Es Super-Imposible. Y no voy a explicar por qué, es obvio.

Y lo segundo ¿Qué es eso de pasar de EXE a RTF?  :huh:
(es como si estuvieras diciendo que puedes convertir a un ser humano en un tractor, algo muy diferente de poner a un ser humano sobre un tractor, o al reves)
Proyecto de Ingeniero

VirucKingX

La unica respuesta que resivo es un NO, pero por q no  :huh:

mira si abres un exe con el wordpad, veras un code intendible te voi a mostrar un fracmento

ÿÿÿRMÜPQ‰]܉]̉]¼‰]¬‰]¨‰]¤‰] ‰]œ‰]˜‰]ˆ‰Tÿÿÿ‰Pÿÿÿ‰ÿÿÿ‰

no dice nada pero entre medio de todo es code aparecen cosas como : Proyecto1 Label2 Label1

y eso realmente a mi me hace dudar, y nuevamente me hago esa pregunta ¿ Por q no se puede ver el code de un exe ?

si alguien sabe por q no se puede q me explique, para q alfin borre esa pregunta de mi mente...

bye  :-(


Bye

_Sergi_

Bueno me he decidido a explicarlo, ya que nadie lo hace. Lo primero. ¿Sabes lo que es compilar? Bien compilar es pasar un código, escrito en un lenguaje cualquiera (p.ej VB) a instrucciones que entienda un microprocesador. Es decir, pasar "A + B = C" a "01010101011101011".

Cuando tu abres un EXE , con el bloc de notas o con el Worpad, ves código binario (representado por caracteres sin sentido) acompañado de algunas palabras. Estas palabras son generalmente recursos del programa, es decir, partes del programa que no requieren ser procesadas (ya se que esto no es asi, es para que se me entienda). Asi, por ejemplo puedes ver el contenido de TextBoxes, el texto de botones.... pero el resto, solo tiene sentido para un micro.

Y tu dirás, dado ese codigo binario ¿No es posible pasarlo al lenguaje original de nuevo, es decir, descompilarlo?

El primer problema es... ¿a qué lenguaje de alto nivel corresponde? ¿Tiene correspondencia con cualquier lenguaje de alto nivel?. Es decir, en primer lugar deberías conocer cual es el lenguaje original, y eso no siempre (casi nunca) es conocido.

Por otro lado, Opciones diferentes de generación de código del mismo compilador (p. ej. optimizaciones -como el caso del P-Code y el N-Code de VB) generan distintos binarios para el mismo código fuente, y sin conocer esas opciones (y no las conoces) no podrás regenerar el código fuente original. Eso suponiendo que hablemos de la misma versión del compilador.

Por que, además, diferentes versiones del mismo compilador generan códigos binarios diferentes para el mismo fuente. La misma situación que el caso anterior. Por no hablar de que se pueden utilizar diferentes compiladores para el mismo fuente. No existen dos compiladores diferentes del mismo lenguaje que generen el mismo binario para un código fuente dado. Además, al compilar, el compilador ignora cientos de lineas de código que para un humano tienen sentido, eso sin contar con los nombres de funciones, comentarios...... al final todos estos acaban siendo direcciones de memoria y otros tantos datos imposibles de recomponer.

A parte de eso, un compilador genera (normalmente) código binario a través de varias fases. Es decir, que incluso suponiendo que se pudieran solventar los problemas anteriores, habría que repetirlo a varios niveles, no en un único paso. Eso sin contar que un ejecutable final puede estar comprimido, cifrado, empaquetado o protegido de mil y un formas.

Desde luego pueden hacerse intentos (inservibles, a no ser para casos triviales) al código original, pero una solución universal (que funcione y lo haga bien en todos los casos posibles) no existe ni existirá. Nunca.
Proyecto de Ingeniero

VirucKingX

Cita de: _Sergi_ en 30 Abril 2006, 00:15 AM

Desde luego pueden hacerse intentos (inservibles, a no ser para casos triviales) al código original, pero una solución universal (que funcione y lo haga bien en todos los casos posibles) no existe ni existirá. Nunca.


E leido con cuidado lo q has escrito, pero cave destacar y ten en cuanta lo q voi a decir: lo q no se puede, con el tiempo es posible. Solo falta un desquiciado q haga el trabajo por nosotros... jajaja ( Esto siempre a sucedido a lo largo de la historia )


bye Bien explicado, al fin me he sacado un peso de mi conciencia ¿ Pero no completa ?  ;D


Bye

Gangrel

Convertir un ejecutable a su codigo original es imposible y ya lo dijo y explico _Sergi_, Es como si yo tengo una estatua y la rompo en pedasitos y despues te paso todos los pedasos y te digo: "pega los pedasos y arma la estatua de nuevo". Tomando en cuenta que tu nunca viste la estatua en su forma original.

Pero lo que si se puede hacer con un exe es desensamblarlo (de seguro lo escrivi mal), esto quiere decir: ver su codigo fuente en codigo ASM.
La educacion no es un privilegio, es un derecho.

http://www.usuarios.lycos.es/protg

yofoxD

pues si nos vamos por el ejemplo de la estatua pienso que es posible ya que de alguna forma se debe poder regresar a su estado original ya que esos pedasos provienen de la estatua asi no la hayas visto, debido a que si hay  mas de 1 millon de formas de tratar de armarla 1 deberia ser pero quien tendria tanta paciencia  y tanta dedicacion para realizarlo :P????? como ya lo dijo viruc solo el tiempo lo dira.

moe88

Bueno, aporto una info mas, aparece en el libro Hacking Etico, en el cápitulo 12, y habla de los analisis pasivos de soft.

DESCOMPILADORES

Los descompiladores es posiblemene el santo grial de la auditoria de binarios.Con una correcta descompilcion desaparece el concepto de codigo cerrado aunque, como mencionamons anteriormente, la verdadera descompilcion es practicamente imposible. Pero no esta todo perdido. Algunos lenguajes aceptan la descompilacion sin problemas. Se trata de lenguajes que no podemos considerar esctrictamente compilados, sino una mezcla de lenguaje compilado e interpretado, como Java, Java es un ejemplo de lenguaje que se compila de forma intermedia independiente del equipo, lo que se suele denominar, codigo de bytes.

(El parrafo sigue hablando de java )

Existen varios descompiladores de java de código abierto que resultan perfectos para recuperar codigo fuente de java, entre los que destacan JReversePro, Jad, Mocha, DJ y otros.

(A continuacion da un ejemplo de descompilacion en java, y la verdad, no esta mal, eso si, es un codigo sencillo, en el resultado, se pierden los nombres de las variables locales, por ejemplo, aunque el JReversePro, crea sus propios nombres)

DESCOMPILACION EN OTROS LENGUAJES COMPILADOS

Al contrario de lo que sucede en Java, que compila su codigo en bytes independientemente de la plataforma, lenguajes como C o C++ se compilan en un lenguaje especifico de la plataforma y se vinculan a librerias concretas del sistema operativo, lo que constituye el primer obstaculo para descompilar programas escritos en estos lenguajes. Un descompilador perfecto resultaria util para un lenguaje concreto, y probablemente, para un solo sistema operativo. Para complicarlo todo, se puede eliminar toda la informacion sobre nombres (simbolos) y depuracion de un programa compilado, lo que impide la recuperacion de los nombres originales utilizados en el programa, como los nombres de variables y funciones, y la informacion sobre tipos.No obstante, la investigacion y el desarrollo de descompiladores continuan.Dos posibles opciones son el descompilador Dcc, para ejecutables i386 DOS y Desquirr, un complemento para IDA Pro.

Referencias

JRevPro en http://sourceforge.net/projects/jrevpro
Mocha en www.brouhaha.com/~eric/computers/mocha.html
Jad en www.kpdus.com/jad.html
IDA Pro en www.datarescue.com/idabase
Desquir en http://desquirr.sourceforge.net/desquirr
The Dcc Decompiler en www.itee.uq.edu.au/~cristina/dcc.html

Bueno, que actualmente sacar el code de un programa compilado es un sueño, creo que estamos de acuerdo, pero vamos... el futuro... uf....

un saludo




JuszR

- No programming language is perfect. There is not even a single best language; there are only languages well suited or perhaps poorly suited for particular purposes. [Herbert Mayer]

Hendrix

Exacto, se pueden descompilar programas en VB...ahora mismo no me akuerdo del programa...kreo que es uno que se tiene que komprar...no se, yo nunka lo e echo.... :-\ :-\ :-\

Pero de existir si que existen.... :-\ :-\ :-\

Salu2

Hendrix

"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián