Académique Documents
Professionnel Documents
Culture Documents
Qu es un decompilador?
Es un programa que realiza la operacin inversa de un compilador: obtener el cdigo fuente de un programa compilado
Por qu decompilar?
Para arreglar bugs (errores) Para encontrar vulnerabilidades Para buscar malware Para aprender Por interoperabilidad Para optimizar el cdigo Para mejorar el programa Por si has perdido el cdigo
Es legal?
La licencia de la mayora de los programas propietarios prohben explcitamente la decompilacin, pero en algunos pases hay leyes que la permiten para los siguientes casos:
Para propsitos de interoperabilidad con otro software o hardware Para corregir errores en aquellos casos en el que el propietario no pueda hacerlos Para saber si se estn usando algoritmos protegidos por patentes
Es posible?
Muchos creemos que de la misma forma que no se puede obtener una vaca de una hamburguesa, tampoco se puede obtener el cdigo de un programa binario. Si bien es cierto que no todo programa se puede decompilar, hay casos en los que podemos obtener un cdigo til. La verdad es que la mayora de los decompiladores actuales slo son capaces de usarse en programas preparados y no en el MundoReal(TM)
Es posible?
Cdigo C Ensamblador Ensamblador optimizado
;---- i = 10; mov si, 10 ;---- j = 20; mov di, 20 ;---- k = i*j + 5; mov ax, si mov bx, di mul bx add ax, 5 mov [bp+6], ax
;---- k = i*j + 5; mov ax, 10 mov bx, 20 mul bx add ax, 5 mov [bp+6], ax
Es posible?
Cdigo C Ensamblador 1 Ensamblador 2
cmp [bp+2], 20 jle lab1 mov [bp+4], 30 jmp lab2 lab1: mov [bp+4], 40 lab2: inc [bp+4]
cmp [bp+2], 20 jg lab1 jmp lab2 lab1: mov [bp+4], 30 jmp lab3 lab2: mov [bp+4], 40 lab3: inc [bp+4]
Cmo funciona?
binario anlisis sintctico anlisis semntico generacin de cdigo intermedio generacin del grafo del flujo de control anlisis del flujo de datos anlisis del flujo de control generacin de cdigo
Cmo funciona?
1 Averiguar el compilador 2 Encontrar el main() 3 Definir las funciones 4 Agrupar el cdigo en asignaciones, condiciones, saltos y llamadas a funciones.
Cmo funciona?
Asignacin
mov ax, [bp+4] mov bx, 20 mul bx add ax, 4 mov [bp+4], ax
i = ( i*20 ) + 4;
Cmo funciona?
Saltos
mov ax, [bp+4] cmp ax, 10 jnz lab1 mov bx, 15 mov [bp+2], bx jmp lab2 lab1: mov bx,20 mov [bp+2], bx lab2:
Cmo funciona?
Llamada a funciones
mov ax, [bp+4]; push ax mov ax, [bp+2]; push ax call _func mov [bp+4], ax
i = func(j, i);
Tipos de decompiladores
Cdigo mquina Ensamblador Delphi Visual Basic Java .NET Python Flash C/C++
Decompiladores Java
Jdec (libre) JODE (libre) Jad (gratis) Mocha (gratis, obsoleto) JreversePro (libre) ClassCracker 3 (comercial) DJ Java Decompiler (gratis) Ms en http://java-decompiler.com
DEMO!
Decompiladores .NET
Salamander (.NET 2.0 comercial) Anakrino (.NET 1.1) LSW DotNet-Lab (decompilador, ofuscador y otros) Lutz Roeder's Programming.NET (comercial) Dis# (.NET 2.0 comercial) Spices.net (.NET 2.0 decompilador, ofuscador y otros; comercial) Decompiler.NET (.NET 2.0 comercial)
Decompiladores Flash
Sothink SWF Decompiler (gratis) http://www.sothink.com/product/flashdecompiler/ Gordon Flash Decompiler (comercial) http://www.futurecandy.net/ DEMO!
Decompiladores C
dcc (i386,DOS)
http://www.itee.uq.edu.au/~cristina/dcc.html#example
boomerang
http://boomerang.sourceforge.net/cando.php?hidemenu
DisC (TurboC)
http://www.debugmode.com/dcompile/disc.htm
DEMO!
Cmo evitarlo?
Ofuscar el cdigo: convertir el programa en otro equivalente por medio de transformaciones de forma que no se consiga cdigo til al decompilar. Por ejemplo:
Que todos los nombres de funciones y variables carezcan de sentido Incluir ocasionalmente clculos y bucles sin sentido Esconder nmeros pequeos en cadenas de texto Crear mtodos grandes, en vez de utilizar subrutinas Distribuir los mtodos entre las subclases
Tamperproofing: es una tcnica para ocultar el cdigo del programa, aadiendo cdigo extra de manera que sea imposible reobtener el cdigo original al decompilar.
Referencias
Program Transformation http://www.program-transformation.org Wikipedia http://en.wikipedia.org/wiki/Decompiler DebugMode http://www.debugmode.com/dcompile/ Criptonomicn http://www.iec.csic.es/CRIPTONOMICON/java/ofuscacion.html Watermarking, Tamper-Proofing, and Obfuscation - Tools for Software Protection Nolan, Godfrey - Decompiling Java
http://www.cs.arizona.edu/~collberg/Research/Publications/CollbergThomborson2000a/index.html
http://adrastea.ugr.es/search*spi/?searchtype=t&searcharg=Decompiling+Java
Imgenes
Tango Icons http://tango.freedesktop.org/ CC by-sa Gray Cow http://openclipart.org/media/files/mairin/3076 PD
FIN
Gracias