Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: VirucKingX en 29 Abril 2006, 23:10 pm



Título: Un reto !!!
Publicado por: VirucKingX en 29 Abril 2006, 23:10 pm
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:



Título: Re: Un reto !!!
Publicado por: _Sergi_ en 29 Abril 2006, 23:13 pm
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)


Título: Re: Un reto !!!
Publicado por: VirucKingX en 29 Abril 2006, 23:31 pm
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

ÿÿÿRMÜ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  :-(


Título: Re: Un reto !!!
Publicado por: _Sergi_ en 30 Abril 2006, 00:15 am
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.


Título: Re: Un reto !!!
Publicado por: VirucKingX en 30 Abril 2006, 00:24 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


Título: Re: Un reto !!!
Publicado por: Gangrel en 30 Abril 2006, 03:29 am
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.


Título: Re: Un reto !!!
Publicado por: yofoxD en 30 Abril 2006, 04:05 am
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.


Título: Re: Un reto !!!
Publicado por: moe88 en 30 Abril 2006, 08:46 am
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





Título: Re: Un reto !!!
Publicado por: JuszR en 30 Abril 2006, 09:13 am
http://foro.elhacker.net/index.php/topic,121123.0.html
http://foro.elhacker.net/index.php/topic,114392.0.html

Sin ofender, pero como siempre... los programadores de Vb brillan por su conocimiento.


Título: Re: Un reto !!!
Publicado por: Hendrix en 30 Abril 2006, 13:05 pm
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



Título: Re: Un reto !!!
Publicado por: Krnl64 en 30 Abril 2006, 13:28 pm
Lo que si se puede hacer, es ver el codigo en Hexa.

Eso te serviria para volver a 'crear' el archivo si lo guardas en 1 fichero de recursos o en 1 matriz.

En cuanto a Descompiladores de VB, hay varios pero VB-Reformer hay que comprarlo. No se si estara en la mula.

Hay otro  que se llama  VB Decompile que te permite ver el codigo fuente, pero si lo compras claro.

Salu2


Título: Re: Un reto !!!
Publicado por: BenRu en 30 Abril 2006, 14:45 pm
Citar
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....

Si no he entendido mal, X.Cyclop lo dice en plan ironico xD

Citar
en primer lugar deberías conocer cual es el lenguaje original, y eso no siempre (casi nunca) es conocido.

Algunas veces se puede, prueba a hacer un sencillo programa en Visual Basic y habrelo con un editor hexadecimal...veras que pone.. (en las primeras lineas)

MSVBVM60.DLL -> Esto indica claramente que es una dll de Microsoft Visual Basic 6.0

C:\Archivos de programa\Microsoft Visual Studio\VB98\VB6.OLB -> Esto lo he visto por la mitad, muestra claramente que es de Visual Basic

Existen mas cosas, como por ejemplo; Form1, Command1, TextBox1...esto te puede dar algunas pistas...

Ahora veamos en C:

Si analizais la parte ascii, podeis ver palabras que dicen: printf, getchar, scanf, double, int...etc
Ademas, si esta compilado con el Dev-C++, te puede decir el directorio y el nombre del archivo *.c

C:/Documents and Settings/BenRu/Escritorio/calculadora.c

Bueno, me voy ya a comer xD...despues si eso explico el de Delphi  :D


Título: Re: Un reto !!!
Publicado por: Meg en 30 Abril 2006, 15:15 pm
bueno supongo k si habra alguna forma de ver el codigo fuente  yo no tengo ni idea de crakear pero supongo k los crakers para hacer un crack de un videojuego o de un programa tendran k ver el codigo fuente amos no estoy seguro de eso es solo suposicion mia pero es lojico.
o alomejor lo hacen solo viendo el codigo en hexadecimal??
otra cosa esos pogramas no se llaman descompiladores se llaman decompiladoes xD


Título: Re: Un reto !!!
Publicado por: JuszR en 30 Abril 2006, 17:41 pm
Se dice decompilar. ;D

¿Porqué no leen los links que puse? Allí está clara la información: Se obtiene el código en Asm, osea, unos cuantos millones de líneas más.

Si no he entendido mal, X.Cyclop lo dice en plan ironico xD
No, lo digo en serio.


Título: Re: Un reto !!!
Publicado por: VirucKingX en 30 Abril 2006, 19:45 pm
Gracias por sus respuesta, No pense q mi pregunta iva a provocar tanta controversia  :huh:


bye


Título: Re: Un reto !!!
Publicado por: WarGhost en 30 Abril 2006, 20:06 pm
Yo encontre un codigo de un programa en VB6 que es un descompilador parcial de programas echos en vb6.

aqui dejo el link(del codigo de fuentes):
http://rapidshare.de/files/19288732/Semi_VB_Decompiler.rar.html

;D Salu2, WarGhost


Título: Re: Un reto !!!
Publicado por: JuszR en 30 Abril 2006, 20:19 pm
Gracias por sus respuesta, No pense q mi pregunta iva a provocar tanta controversia  :huh:
¿Será por no leer? Preguntaron 3 veces lo mismo, en menos de 5 días. :-\


Título: Re: Un reto !!!
Publicado por: sch3m4 en 1 Mayo 2006, 01:02 am
el unico lenguaje que se puede descompilar por completo, o al menos que yo sepa, es Java, con un descompilador como "Decafe"


Título: Re: Un reto !!!
Publicado por: Hendrix en 2 Mayo 2006, 00:11 am
exacto Lympex, VB creo que no se puede decompilar al completo...kon el prgorama que me descargue (a principios de mi etapa como programador de VB) creo que solo te decia los titulos de los Forms que kontenia, el titulo de los .bas si es que tenian y algunos pocos kodigos....era poka info que te daba...pero si, decompilarse (anke sea muy poko) se puede....

Salu2

Hendrix



Título: Re: Un reto !!!
Publicado por: Robokop en 2 Mayo 2006, 01:01 am
Si yo ya habia probado un programa similar a este y solamente te dicen los labels forms y titulos en si el codigo que es lo importante no te lo da ,tal vez es imposible para nosotros por no conocer el codigo de visual basic ,pero si supieramos con exatitud como lo tranforma se podria lograr algo ...


Título: Re: Un reto !!!
Publicado por: Webagent007 en 2 Mayo 2006, 02:18 am
no se puede (y menos en los lenguajes modernos) si le mueves por ahi en el visual basic vas a ver que hay diferentes tipos de compilaciones (p-code, para hyper-trend etc)

puedes pasar a traducirlo con hexagesimal (los crackeadores a los que les debemos los programas gratuitos ;D) usan hexagesimal y algun debugger, como SoftICE

Aun así, es como si tomaras una escopeta y le disparas al programa en la pierna...asi ni protesta  :P

Ademas...no me gusta copiar codigo  ::)

saludos


Título: Re: Un reto !!!
Publicado por: Kizar en 2 Mayo 2006, 15:13 pm
VB-Reformer no se si es de pago, pero yo le tengo y en ambos casos te le puedes bajar de el emule.
NOTA: Este programa no te da el codigo fuente del programa, lo unico que te da son las propiedades de los controles, las imagenes y las dependencias del exe. El codigo fuente te le deja ver en asm.

Salu2


Título: Re: Un reto !!!
Publicado por: sch3m4 en 2 Mayo 2006, 15:18 pm
entonces sí te lo da, en ASM, pero te lo da xD.

Ademas...no me gusta copiar codigo ::)

El ver el código de un programa no necesariamente tiene que ser para copiarlo. Incluso es bueno ver otros códigos que no sean los tuyos para aprender cómo funciona el programa y maneras distintas de programar  ;)


Título: Re: Un reto !!!
Publicado por: SeniorX en 8 Mayo 2006, 06:15 am
Sin ofender, pero como siempre... los programadores de Vb brillan por su conocimiento.
jajaja que directo  :-X


Título: Re: Un reto !!!
Publicado por: Kizar en 8 Mayo 2006, 23:36 pm
W32Dasm te da el codigo fuente en asm de cuelkier ejecutable PE en ASM.