PDA

Ver la Versión Completa : Desensamblar Un .Exe Copilado en lazarus


pedrolazarus
16-11-2012, 15:18:49
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
¿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.

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