Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-10-2003
frankmch frankmch is offline
Miembro
 
Registrado: jul 2003
Ubicación: venezuela
Posts: 76
Poder: 21
frankmch Va por buen camino
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
__________________
ing. frankmch
Responder Con Cita
  #2  
Antiguo 18-10-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 19-10-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #4  
Antiguo 20-10-2003
frankmch frankmch is offline
Miembro
 
Registrado: jul 2003
Ubicación: venezuela
Posts: 76
Poder: 21
frankmch Va por buen camino
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...
__________________
ing. frankmch
Responder Con Cita
  #5  
Antiguo 20-10-2003
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 23
kinobi Va por buen camino
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.

Última edición por kinobi fecha: 20-10-2003 a las 05:08:59.
Responder Con Cita
  #6  
Antiguo 20-10-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
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!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #7  
Antiguo 21-10-2003
frankmch frankmch is offline
Miembro
 
Registrado: jul 2003
Ubicación: venezuela
Posts: 76
Poder: 21
frankmch Va por buen camino
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...
__________________
ing. frankmch
Responder Con Cita
  #8  
Antiguo 21-10-2003
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 23
kinobi Va por buen camino
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.
Responder Con Cita
  #9  
Antiguo 30-11-2006
icaruss icaruss is offline
Registrado
 
Registrado: nov 2006
Posts: 1
Poder: 0
icaruss Va por buen camino
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.
Responder Con Cita
  #10  
Antiguo 01-12-2006
Avatar de DTAR
DTAR DTAR is offline
Miembro
 
Registrado: nov 2005
Posts: 53
Poder: 19
DTAR Va por buen camino
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
__________________
|DTAR|
Responder Con Cita
  #11  
Antiguo 15-03-2007
rydem rydem is offline
Registrado
 
Registrado: mar 2007
Posts: 4
Poder: 0
rydem Va por buen camino
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.

Última edición por rydem fecha: 15-03-2007 a las 18:06:28.
Responder Con Cita
  #12  
Antiguo 15-03-2007
Robert01 Robert01 is offline
Miembro
 
Registrado: feb 2006
Ubicación: Córdoba, Argentina
Posts: 895
Poder: 19
Robert01 Va por buen camino
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.
Responder Con Cita
  #13  
Antiguo 21-03-2008
mario2000 mario2000 is offline
Miembro
 
Registrado: abr 2007
Posts: 109
Poder: 18
mario2000 Va por buen camino
Smile 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

Última edición por dec fecha: 21-03-2008 a las 18:20:32.
Responder Con Cita
  #14  
Antiguo 21-03-2008
Avatar de gmontes
gmontes gmontes is offline
Miembro
 
Registrado: jul 2004
Ubicación: Culiacán, Sinaloa, México
Posts: 668
Poder: 20
gmontes Va por buen camino
creo que de decompiler ya se murio , o fue una buena broma
__________________
Todos llevamos nuestros demonios a cuestas..
Responder Con Cita
  #15  
Antiguo 21-03-2008
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.488
Poder: 20
MAXIUM Va camino a la fama
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.
Responder Con Cita
  #16  
Antiguo 21-03-2008
mario2000 mario2000 is offline
Miembro
 
Registrado: abr 2007
Posts: 109
Poder: 18
mario2000 Va por buen camino
Como que ya murio yo descompile aller un programa con el, solo descarguenlo y pruebenlo veran que no es cuento , 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.
Responder Con Cita
  #17  
Antiguo 21-03-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
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.
Responder Con Cita
  #18  
Antiguo 21-03-2008
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
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!".
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #19  
Antiguo 22-03-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
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.

Un Saludo.
PD: Decopilando no se aprende.. solo se practica y es tarea de quien algo ya aprendio.
Responder Con Cita
  #20  
Antiguo 22-03-2008
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.488
Poder: 20
MAXIUM Va camino a la fama
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 ...
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 11:54:24.


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
Copyright 1996-2007 Club Delphi