Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Lazarus, FreePascal, Kylix, etc. (https://www.clubdelphi.com/foros/forumdisplay.php?f=14)
-   -   Desensamblar Un .Exe Copilado en lazarus (https://www.clubdelphi.com/foros/showthread.php?t=81464)

pedrolazarus 16-11-2012 15:18:49

Desensamblar Un .Exe Copilado en lazarus
 
He estado leyendo bastante en cuanto a Desensamblar y ofuscar codigo, por lo que he podido entender los NET son los "mas faciles" de Desensamblar, los mas dificiles C y C++, mi pregunta

¿Se puede obtener el codigo fuente de una aplicaión copilada en lazarus?

Yo solo he podido obtener los valores que se colocan por defecto en cada elemento que conforma un formulario(nombre,tamaño,fuente,entre otros recursos) mas no el codigo en pascal.

Ñuño Martínez 16-11-2012 15:53:14

Cita:

Empezado por pedrolazarus (Mensaje 449681)
¿Se puede obtener el codigo fuente de una aplicaión copilada en lazarus?

No.

De hecho es imposible obtener el código fuente de cualquier programa mínimamente complejo escrito en un lenguaje de alto nivel o nivel medio, salvo que el ejecutable contenga información de depuración completa y sin optimizar absolutamente nada.

Cita:

Empezado por pedrolazarus (Mensaje 449681)
por lo que he podido entender los NET son los "mas faciles" de Desensamblar

Falso.

La máquina virtual CLR se comporta de forma similar a cualquier microprocesador, mediante op-codes que representan operaciones elementales. No conozco los detalles, pero no creo que use una estructura similar a las viejas máquinas virtuales BASIC (la única que conozco de la que se puede obtener el código fuente, puesto que cada op-code es una instrucción BASIC), así que dudo se pueda desensamblar el código fuente de ningún programa, salvo que el ejecutable contenga información de depuración completa y sin optimizar absolutamente nada.

Ojo: Esto no significa que sea imposible obtener un código fuente que funcione (lo que se llama código equivalente) a partir de un ejecutable, pero nunca podrás obtener el código original. Es más, dependiendo de las opciones de compilación, incluso puede ser imposible obtener un código equivalente en el lenguaje de programación original.

pedrolazarus 16-11-2012 16:14:03

Cita:

Empezado por Ñuño Martínez (Mensaje 449684)
No.

De hecho es imposible obtener el código fuente de cualquier programa mínimamente complejo escrito en un lenguaje de alto nivel o nivel medio, salvo que el ejecutable contenga información de depuración completa y sin optimizar absolutamente nada.


O sea que da lo mismo utilizar o no un ofucador? igualmente no podran ver el codigo que es lo importante pero si los recursos (formularios,edits, y demas)

Ñuño Martínez 26-11-2012 20:44:52

Depende. Los ofuscadores se suelen usar cuando el código fuente es visible (por ejemplo, JavaScript, REXX, Bash...). Pero sí, en el caso de los lenguajes compilados es un poco pérdida de tiempo, porque si se compila con optimización y sin depuración se suele ofuscar bastante.

Delphius 28-11-2012 03:52:42

A ver... tengo entendido que ofuscar no lo hace ningún compilador... de a lo que tengo entendido ofuscar no es nada más y nada menos que simplemente hacer el código más difícil de leer (algo muy perjudicial a la salud mental de quien tendrá que darle mantenimiento al código... Y si se recuerda cierta frase de Martin Fowler ¡mejor no digo! :D ).
De ofuscar se lo puede hacer en cualquier lenguaje... pero hay ciertos lenguajes crípticos que se prestan más fáciles de hacer eso.
O para decirlo más vulgarmente, ¡el código espaquetti!
De hecho, hay hasta concurso sobre ofuscamiento. Algunos están tan a divino pedo que hasta se esmeran en escribir código en forma de dibujos... a lo muy ascii-paint... formas de estrellas, coronas, corazones...

Y también se suele entender al término como añadir instrucciones "dummy" que sirven para dificultar un poco más a algún posible listillo que intente usar algún desemblador, debugger o editor hexadecimal. En este caso lo que se busca es añadir instrucciones que no aportan valor real al ejecutable pero que están para evitar o al menos dificultad que alguien pudiera reconocer algunas posibles instrucciones que se realizan... sumas y restas, intercambio de caracteres, inversión de palabras, o descomponer y recomponer numéros son algunos ejemplos que pueden servir a modo de distracción y evitar que alguien descubra algún proceso que consideremos sensible.

Como puede verse, la ofuscación esto no depende de un lenguaje... sino de habilidad de un programador.

Ñuño Martínez 30-11-2012 11:00:34

Cita:

Empezado por Delphius (Mensaje 450701)
tengo entendido que ofuscar no lo hace ningún compilador...

Hombre, estrictamente hablando no, pero si compilas algo con optimizaciones y demás y luego recuperas en lenguaje ensamblador el resultado (si no recuerdo mal, con los compiladores GCC esto se hace añadiendo la opción -S al comando de compilación) el resultado es bastante ilegible... :rolleyes:;)

Casimiro Notevi 30-11-2012 12:34:28

Cita:

Empezado por Ñuño Martínez (Mensaje 450948)
Hombre, estrictamente hablando no, pero si compilas algo con optimizaciones y demás y luego recuperas en lenguaje ensamblador el resultado (si no recuerdo mal, con los compiladores GCC esto se hace añadiendo la opción -S al comando de compilación) el resultado es bastante ilegible... :rolleyes:;)

Claro, para que no se puedan buscar cadenas de texto y cosas legibles, como: "vidas=vidas-1" :)

donald shimoda 08-12-2012 22:20:32

Cita:

Empezado por pedrolazarus (Mensaje 449681)
He estado leyendo bastante en cuanto a Desensamblar y ofuscar codigo, por lo que he podido entender los NET son los "mas faciles" de Desensamblar, los mas dificiles C y C++, mi pregunta

El código intermedio generado en dot net es muy fácil de seguir, es verdad. Por eso existe cantidad de ofuscadores para dot net.

Saludos.

maxid 11-12-2012 19:24:18

Todo se puede desensamblar, pero a asembler, si esta compilado sin depuracion y optimizado solo quedan las instrucciones que leerá el micro.
El desensamblador recoree todo el ejecutable y te va a dejar bloques que serian un procedimiento o funcion y una larga lista de instrucciones y direcciones hexadecimal.
Los crackers hacen eso para averiguar donde estan las llaves para habilitar software. Si lo ofuscas le haces el trabajo mas tedioso, pero lo mas seguro que haga mas lenta tu aplicacion.


La franja horaria es GMT +2. Ahora son las 12:25:15.

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