La compañía de seguridad Avast ha liberado —bajo licencia libre MIT— el código de su decompilador RetDec, permitiendo su acceso a la comunidad y la colaboración en un proyecto, que se lleva desarrollando desde 2011. Los decompiladores son programas que reconstruyen el código fuente de un archivo ejecutable, traduciéndolo a un lenguaje de alto nivel. Sería lo contrario de realizar una compilación. Se pueden utilizar por tanto para analizar vulnerabilidades, errores, y estudiar el código de cualquier software, malicioso o no.
#9:
#8, pero aquí lo que se pregunta es si tras decompilar y volver a compilar en el nuevo ejecutable se pierde algo respecto el ejecutable original. Así que aquí da igual comentarios y nombres de variables. No se está preguntando si se recupera el código original sino si al compilar quedará algo similar.
#8:
#4 Claro que se pierde. Al compilar, lo primero que hace el compilador es eliminar del ejecutable los comentarios que hay en el código fuente. Los nombres de variables también desaparecen porque son posiciones en memoria, igual sucederá con los nombres de clases, métodos, objetos. Los ciclos do-while, for, son reemplazados por saltos JNZ o JMP, no hay forma de retroceder a como era el ciclo originalmente.
#6:
#5
Warez u otros con intenciones menos cuestionables como Wine o ReactOS.
#3:
Como todo decompilador no es perfecto ni exacto. La heurística que utilicen no deja de ser una aproximación al código fuente original. Pero menos da una piedra.
#4 Claro que se pierde. Al compilar, lo primero que hace el compilador es eliminar del ejecutable los comentarios que hay en el código fuente. Los nombres de variables también desaparecen porque son posiciones en memoria, igual sucederá con los nombres de clases, métodos, objetos. Los ciclos do-while, for, son reemplazados por saltos JNZ o JMP, no hay forma de retroceder a como era el ciclo originalmente.
#8, pero aquí lo que se pregunta es si tras decompilar y volver a compilar en el nuevo ejecutable se pierde algo respecto el ejecutable original. Así que aquí da igual comentarios y nombres de variables. No se está preguntando si se recupera el código original sino si al compilar quedará algo similar.
#8 Eso lo daba por entendido. Me refería a las optimizaciones que un compilador hace al crear el código objeto. Por ejemplo el compilador de ADA es excelente en esto, creando código más rápido que lo que hubiera escrito un programador en assembler. Cuantos más cambios haga el compilador, más información original desaparece.
El artículo va precisamente de la dificultad de reconstruir el algorimo original, de ahí que esta cosa use heurística.
Como todo decompilador no es perfecto ni exacto. La heurística que utilicen no deja de ser una aproximación al código fuente original. Pero menos da una piedra.
#5#6 Por lo que leo solo corre en 32bits asi que hasta que no salga una version para 64 no creo que vaya a ayudar mucho. En la comunidad warez el gran problema es denuvo y se tardo mucho en crackear porque no habia decompilador de 64. Eso tengo entendido almenos.
La transformación del lenguaje ensamblador en código máquina la realiza un programa ensamblador, y la traducción inversa la puede efectuar un desensamblador.
Un verdadero programador no necesita ningun descompilador. Si eres programador, puedes leer directamente de la memoria las intrucciones de bajo nivel del código máquina.
Si no eres capaz, bueno, siempre te quedará trabajar en cárnicas para programar en java,c, o peor aun python y esas mariconadas. Pero no serás un programador, serás un puto albañil poniendo ladrillos hechos por otros.
¿Para esto no se podría aplicar IA?
Se analiza el codigo fuente y los binarios una vez compilados de multiples formas y con multiples parámetros o con diferentes compiladores. Todo esto del máximo de software abierto disponible. De ese aprendizaje de esa IA igual se puede hacer despues la inversa mucho mejor.
O se pueden crear multiples softwares, compilarlos, despues descompilarlos con este descompilador y despues comparar el codigo original con el código que sale de la descompilacion. Esa IA se va entrenando de esa forma y despues se le retroalimenta al descompilador que en teoria igual podria ir generando mejor codigo descompilado segun mejor se entrene.
Comentarios
#plugin para IDA: https://github.com/avast-tl/retdec-idaplugin
se puede compilar el decompilado y que salga un ejecutable funcional y parecido en tamaño al original??
#2 Eso depende enteramente de las optimizaciones que lleve el compilador. Pero en principio algo se perderá.
#4 Claro que se pierde. Al compilar, lo primero que hace el compilador es eliminar del ejecutable los comentarios que hay en el código fuente. Los nombres de variables también desaparecen porque son posiciones en memoria, igual sucederá con los nombres de clases, métodos, objetos. Los ciclos do-while, for, son reemplazados por saltos JNZ o JMP, no hay forma de retroceder a como era el ciclo originalmente.
#8, pero aquí lo que se pregunta es si tras decompilar y volver a compilar en el nuevo ejecutable se pierde algo respecto el ejecutable original. Así que aquí da igual comentarios y nombres de variables. No se está preguntando si se recupera el código original sino si al compilar quedará algo similar.
#8 Eso lo daba por entendido. Me refería a las optimizaciones que un compilador hace al crear el código objeto. Por ejemplo el compilador de ADA es excelente en esto, creando código más rápido que lo que hubiera escrito un programador en assembler. Cuantos más cambios haga el compilador, más información original desaparece.
El artículo va precisamente de la dificultad de reconstruir el algorimo original, de ahí que esta cosa use heurística.
#2 El software está compilado, quién lo descompilará? El descompilador que lo de descompile buen descompilador será.
Como todo decompilador no es perfecto ni exacto. La heurística que utilicen no deja de ser una aproximación al código fuente original. Pero menos da una piedra.
¿Balón de oxigeno a la comunidad warez, al facilitar buscar y eliminar protecciones?
#5
Warez u otros con intenciones menos cuestionables como Wine o ReactOS.
#5 #6 Por lo que leo solo corre en 32bits asi que hasta que no salga una version para 64 no creo que vaya a ayudar mucho. En la comunidad warez el gran problema es denuvo y se tardo mucho en crackear porque no habia decompilador de 64. Eso tengo entendido almenos.
#13
Hay un mucho software corriendo en 32 bits.
#14 Si pero ningun software de ese da problemas a los crackers.
#16
A Wine y ReactOS sí.
#17 Por cierto tengo que corregir. Lo que da problemas no es denuvo en si, es VMProtect.
#5 Por si sirve:
http://program-transformation.org/Transform/LegalityOfDecompilation
#relacionada: Peligros del Descompilador -ENG-
Peligros del Descompilador -ENG-
blog.ret2.ioEl código esta compilado ¿quién lo decompilará? El decompilador que lo decompile buen decompilador será.
¿Decompilador o descompilador?
Mas que descompilar sera desensamblar.
La transformación del lenguaje ensamblador en código máquina la realiza un programa ensamblador, y la traducción inversa la puede efectuar un desensamblador.
#12 Te da código C, no ensamblador (bueno, también), así que descompila.
Un verdadero programador no necesita ningun descompilador. Si eres programador, puedes leer directamente de la memoria las intrucciones de bajo nivel del código máquina.
Si no eres capaz, bueno, siempre te quedará trabajar en cárnicas para programar en java,c, o peor aun python y esas mariconadas. Pero no serás un programador, serás un puto albañil poniendo ladrillos hechos por otros.
Pero no esperes cobrar 1000 euros por ello.
#19 ¡Mirad todos un hacker!
#19 Fuerte cuñadismo rancio
#19 Un verdadero programador no necesita ningún descompilador. Puede leer directamente el código máquina en binario sin despeinarse.
#26 un verdadero programador detecta las ondas electromagnéticas.
vaaaaaale
¿Para esto no se podría aplicar IA?
Se analiza el codigo fuente y los binarios una vez compilados de multiples formas y con multiples parámetros o con diferentes compiladores. Todo esto del máximo de software abierto disponible. De ese aprendizaje de esa IA igual se puede hacer despues la inversa mucho mejor.
O se pueden crear multiples softwares, compilarlos, despues descompilarlos con este descompilador y despues comparar el codigo original con el código que sale de la descompilacion. Esa IA se va entrenando de esa forma y despues se le retroalimenta al descompilador que en teoria igual podria ir generando mejor codigo descompilado segun mejor se entrene.
#24 Y te pone hasta los comentarios. Totalmente factible.
El fuente decompilado se parece al original como un huevo a una castaña, aunque el resultado de compilar los dos sea muy parecido.