Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Descompilador (https://www.clubdelphi.com/foros/showthread.php?t=4518)

frankmch 18-10-2003 08:17:50

Descompilador
 
hola a todos.

mas que una duda es una curiosidad...

es posible descompilar un programa hecho con delphi?

de ser asi como se logra???

gracias

marcoszorrilla 18-10-2003 15:06:00

Yo guardo todos los proyectos completos en 2 discos duros y además en 2 CDs, de esta manera muy mal se tiene que dar para que no recupere el código fuente, de hecho nunca se me ha perdido.

Respecto a esos programas que citas, yo conozco uno y me lo bajé y me alegré mucho al ver que solamente recuperaba los DFM, pero en los Pas no había código.

Código:

procedure TForm1.Button1Click(Sender: TObject);
begin
// Address $442EBC
end;

Ojala no existan.

Un Saludo.

roman 19-10-2003 08:45:18

Bueno, existir existen, no recuerdo ahora cuál vi alguna vez. Sin embargo de poco sirven porque el código lo ponen en ensamblador y de eso a hacer un debug con Delphi sobre un .exe no hay mucha diferencia...

// Saludos

frankmch 20-10-2003 03:35:26

Pareciese no tener logica el no poder descompilar un programa, si pensamos en un programa como una funcion matematica, que de hecho se comportan asi, toda funcion tiene su inversa, algunas veces en un rango de valores, pero esta existe.
entonces mi interrogante es:
por que no es posible obtener codigo fuente a partir de un programa compilado???

en lenguajes como java que se compilan en la computadora mediante la maquina virtual es mas sencillo ya que se tiene un codigo medio o objeto.

una razon que se me ocurre es de interes comercial, pero opino que es una tarea posible...

gracias por los comentarios...

kinobi 20-10-2003 04:31:30

Hola,

Cita:

Posteado originalmente por frankmch
toda funcion tiene su inversa, algunas veces en un rango de valores, pero esta existe.
En realidad no es así. Para que una función tenga inversa, debe cumplir que sea biyectiva (inyectiva y suprayectiva).

La traducción de código dista mucho de ser una función biyectiva.

Cita:

Posteado originalmente por frankmch
una razon que se me ocurre es de interes comercial, pero opino que es una tarea posible...
Existen argumentos de mucho más peso:

1. Dado un código binario (ejecutable directamente por una máquina determinada y del que desconoces como ha sido generado): ¿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.

2. Opciones diferentes de generación de código del mismo compilador (p. ej. optimizaciones) 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, porque:

3. 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:

4. 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.

5. 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.

Desde luego pueden hacerse aproximaciones (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.

Saludos.

delphi.com.ar 20-10-2003 16:32:52

Como interesante te recomiendo buscar un programa llamado DeDe, que extrae el DFM de los resources del EXE y deja el código en ASM en los eventos de los componentes.... Me ha servido mas de una vez para saber que es lo que hace una aplicación en un determinado momento...

Si conoces al menos la base del ASM, para cualquier exe Win32, te recomiendo probar softare como el IDA Pro, WinDasm, SoftIce....


Saludos!

frankmch 21-10-2003 17:20:53

gracias por todos lo comentarios.

muy ilustrativas todas las conjeturas y opciones a tener en cuenta para descompilar un programa.
recuerdoles que mi planteamiento original fue hecho para un programa en delphi.

replanteo la pregunta :

¿es posible descompilar un programa hecho en delphi 5?

conociendo todas las etapas e inconvenientes (en mi opinion salvables) nombrados anteriormente.

puede que sea una tarea muy ardua, y que talves no halla tenido la suficiente investigacion o dedicacion.

en un comentario anterior a este citaron una serie de inconvenientes como las fases de compilacion y de generacion de codigo objeto, el analisis lexico, semantico, etc, etc.
todo lo que incluye llevar el fuente al exe.
aun asi las razones que han citado no me parecen sufucientes para descartar la posibilidad de una descompilacion.

es claro el nivel de complejidad, pero en condiciones controladas y a sabiendas de varias variables se podria llegar a algo mas que codigo asm.

claro que se deben conocer muchos parametros de compilacion que son privados de borland, o microsoft, o la casa que haga el compilador.

mi interes es por delphi ya que es mi lenguaje de trabajo.

mi opinion es que para saber como descompilar un programa hay que entender primeramente como se genera el ejecutable.

y mas alla de la teoria basica de compiladores como se genera el exe del lenguaje y version del programa dado.


en conclusion: "Tarea muy ardua pero no imposible"

y tal ves poco etica...

kinobi 21-10-2003 17:38:33

Hola,

Cita:

Posteado originalmente por frankmch
en conclusion: "Tarea muy ardua pero no imposible"
Bien, estoy de acuerdo. Al fin y al cabo todo lo que puede ser pensado puede ser realizado, al menos de forma teórica.

Ahora bien, el conjunto de variables que intervienen eleva la complejidad del problema a un punto que no resulta práctico abordarlo. Salvando las distancias, ¿es posible obtener energía de la fusión nuclear?. Sí, pero a costa de invertir mucha más energía en el proceso de la que obtenemos como resultado. Conclusión: La fusión nuclear no es (actualmente) un medio válido (práctico) para obtener energía.

Cita:

Posteado originalmente por frankmch
y tal ves poco etica...
Yo no le veo problemas éticos a la ingeniería inversa. En todo caso a los usos que se haga con los resultados que se obtienen de ella.

Saludos.

icaruss 30-11-2006 19:09:28

vean esto
 
http://es.wikipedia.org/wiki/ITER

lei hace un par de años un estudio cientifico publicado en la revista muy interesante en donde se explicaba la energia generada y consumida y los beneficios , etc. un proyecto anterior llamado JET requeria de cantidades gigantescas de combustible para generar energia termonuclear , pero en la revista que lei decia que el iter generaba algo asi como 10000 veces mas energia de la que consumia y que una vez andando se alimenta a asi mismo.

asi es que eso de que no se controla la energia termonuclear no es cierto , en cuanto a lo de la decompilacion seguro que si se puede , bastaria con un pequeño programado basado en redes neurales que analizara el problema , primero extrayendo los recursos y luego como dicen ahi que sustituye los eventos por ASM pues analizar en ASM y generar codigo , claro esta que no seria el codigo original , por la sencilla razon de que hay muchas maneras de programar lo mismo , nustro decompilador buscaria cualquier manera de hacer lo mismo que hace el ASM pero con codigo delphi , alfinal tendriamos un codigo delphi que haria lo mismo que el programa ensamblado solo que seguramente seria diferente del codigo original utilizado.

DTAR 01-12-2006 14:22:41

buen tema...
 
ami mi profesor de Arquitectura de Computadoras de segundo año de la facu me dijo que no es posible por el tema de las variables que son direcciones de memoria y que despues enves de traer variables un decompilador traeria direcciones... pero todo eso no viene al caso... si te sirve, miralo....

http://delphi.about.com/od/devutilit...ompiling_3.htm

rydem 15-03-2007 17:57:34

Como ya te han dicho
 
Obtener el código es prácticamente imposible por las siguientes razones, si tu creas un ejecutable a partir de un lenguaje X, lo que haces realmente es convertir las instrucciones de alto nivel a lenguaje máquina, en este punto puede ser reversible, pero si después de ello optimizas código, generalmente eliminado código inútil o repetido, se destruye el ensamblado original, a menos que recuperes el código original antes de optimizar no debería ser reversible, de lo contrario nunca llegaras al código fuente original, los exe se construyen con una cabecera bien definida(fácil de buscar y conocer, diferente para los sistemas operativos), luego viene el código fuente de ensamblador convertido a Hexagesimal, y al final ne recuerdo si lleva otra cabecera, pero no es complejo, de hecho yo he pensado compilar mis propios programas en asm y crear los exes yo mismo, según he mirado no es muy complicado.

Y creeme, eso de obtener 10 000 veces más energía de la suministrada es mentira, si fuera posible obtener tan solo 2veces la energía que uno consume para generarla, obtendrías energía para vivir eternamente, no haría falta ninguna otra fuente de energía, y según dijo alguien que no recuerdo, la energía ni se crea ni se destruye, se transforma, creo que es el principio de conservación de la energía, lo que significa que para obtener 2 Unidades de energías debes convertirlas de otro tipo de energía, sin incluir las perdidas que siempre se tienen en los procesos, fricción, resistencia, o sea, siempre salimos perdiendo.

Robert01 15-03-2007 18:24:01

en este sitio hay información sobre descompiladores. Ellos habían hecho uno que descompilaba cualquier programa y daba el código en c según me parece.

mario2000 21-03-2008 17:58:38

si se puede
 
DE Decompiler? restaura la mayor parte del código compilado y te ayuda a recuperar la mayor parte de las fuentes perdidas. Contiene el poderoso desensamblador que soporta comandos de Pentium Pro, incluidas las extensiones MMX y SSE. También tiene un motor rápido de emulación de código ensamblador El desensamblador incorporado te permite desensamblar un montón de funciones y lo presenta de una manera semidecompilada.
http://www.freedownloadmanager.org/e...003_p/free.htm

ya lo tengo :eek:;):D:p

gmontes 21-03-2008 18:23:08

creo que de decompiler ya se murio :mad:, o fue una buena broma :eek:

MAXIUM 21-03-2008 20:35:03

Una vez logre decompilar un proyecto delphi del que había perdido su código, lo malo es que no recuerdo si era para delphi 4 o 6, y peor no recuerdo el nombre del decompiler.

mario2000 21-03-2008 20:42:59

Como que ya murio yo descompile aller un programa con el, solo descarguenlo y pruebenlo veran que no es cuento :mad:, a mi me funciona solo que la ultima version cuesta unos 100 dolares pero el que lo quiere lo compra busca el crack. Tampoco es perfecto pero sirve mucho.:D

JoseFco 21-03-2008 21:53:14

Código:

procedure Unknown_2();
begin
{ '40D348
  loc_0040D348: test edx, edx
  loc_0040D34A: jz 40D352h
  loc_0040D34C: xchg edx, eax
  loc_0040D34D: mov ecx, [eax]
  loc_0040D34F: call [ecx]
  loc_0040D351: ret
}
end;

Esto es lo que obtienes con el De Decompiler. Puro asm.
Con tiempo y informacion reconstruir el programa. (emularlo) como quieran llamarle.Eso si mucha calma y mucha concentracion.
Alguna que otra herramienta para que nos ayude con el asm.

Un Saludo.

AzidRain 21-03-2008 23:37:01

A mi no me la pegan con eso de que quieren descompilar un software porque perdieron las fuentes...cualquier programador promedio siempre tiene un respaldo de su trabajo y si no, pues no es programador.

Resulta muy interesante el querer aprender a base de ver que hacen otros o como le hicieron los de tal empresa para hacer esa ventanita redondeada y cosas así. Vamos, eso viene desde la época del MS-DOS. Yo mismo "cree" una versión del famoso e indispensable PC-Tools en supuesto español que no era otra cosa que traducir vilmente las cadenas que aparecían en el exe con la ayuda de un editor hexadecimal. E incluso el mismo Turbo Pacal 3.0 circulaba en mi Uni traducido al español.

Afortunadamente para amuchos es imposible descompilar un software porque en primer lugar habremos de saber en que lenguaje se hizo y posteriormente hay mil y una variables que desde que este tema se ha manejado (allá por los 80s) nunca ha sido resuelto. Quienes conocen ensamblador saben que a veces una solo instrucción ASM equivale a muchísimas variantes de código fuente además de que cada compilador le pone su propio sabor al código que genera por lo que la cosa se complica bastante.

Además si el programador se tomó la molestia de hacer cosas "raras" en su código pues la cosa va de mal en peor. Por ejemplo, ¿Sabían que la mayor parte de las cadenas literales que ocupamos en Delphi son perfectamente visibles (y modificables) vía un editor hex?
Ejemplo:
Código:

  Cadena_Visible := 'Hola Mundo';
  Cadena_invisible := $48 + $6F + $6C + $61 + $60 + $4D + $75 + $6E + $64 + $6F;

Cadena_Visible será perfectamente identificable dentro del archivo EXE mientras que la otra no lo será.


Para concluir, si de verdad la necesidad es recuperar las fuentes, es mejor y más rápido partir de ceros (de paso se optimiza un poco de código) que ponerse a descubrir el hilo negro y además seguir siempre la regla de oro: "¡RESPALDA!".

JoseFco 22-03-2008 00:24:37

Hola AzidRain.

Entiendo tu punto y estoy muy de acuerdo en que algunos dicen querer recuperar un codigo perdido y en realidad quieren ver uno que alguien mas creo.Algunos creen que es facil, pero pronto se topan con una pared muy alta que pocos pueden escalar.( por suerte).
Pero yo me pregunto quien no se a robado aunque sea un .gif para su web? o miro el codigo de alguna pagina web para aprender algo de html?
Que tire la primera piedra quien este libre de pecados.

Retomando tu comentario anterior, una intrucion asm solo puede ejecutar lo que se le pidio.. ahora si dentro de ella misma se le pide que tome diferentes rutas de acuerdo a alguna condicion.Eso sigue siendo una sola intrucion asm.
El procesador entiende "call" y donde lo mandas "mov" y lo que quieres mover y a donde. En pocas palabras assamble es assamble y solo cambia si cambias el cpu.
En cuanto al lenguaje en el que fue creado un exe eso solo detiene a los novatos.
No respaldo la idea de decopilar exe. Tampoco critico a quien lo quiera hacer.
Solo comente porque el hilo esta interesante y el tema caliente.:D:D:D

Un Saludo.
PD: Decopilando no se aprende.. solo se practica y es tarea de quien algo ya aprendio.

MAXIUM 22-03-2008 02:41:19

Cita:

Cadena_invisible := $48 + $6F + $6C + $61 + $60 + $4D + $75 + $6E + $64 + $6F;
Mmmm... eso me da algunas ideas para encriptar ciertas cosas y proteger mi .exe ...


La franja horaria es GMT +2. Ahora son las 13:42:35.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi