Decompiladores
Decompiladores
Decompiladores
Qu es un decompilador?
Por qu decompilar?
Para aprender
Por interoperabilidad
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:
Es posible?
Es posible?
Cdigo C
void main()
{
int i, j, k;
i = 10;
j = 20;
k = i*j + 5;
}
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
if (i>20){
j=30;
}
else{
j=40;
}
j++;
Ensamblador 1
cmp [bp+2], 20
jle lab1
mov [bp+4], 30
jmp lab2
lab1:
mov [bp+4], 40
lab2:
inc [bp+4]
Ensamblador 2
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
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:
if (i!= 10){
j = 20;
}
else{
j = 15;
}
Cmo funciona?
Llamada a funciones
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)
JreversePro (libre)
ClassCracker 3 (comercial)
Ms en http://java-decompiler.com
DEMO!
Decompiladores .NET
Decompiladores Flash
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?
Referencias
Wikipedia http://en.wikipedia.org/wiki/Decompiler
DebugMode http://www.debugmode.com/dcompile/
Criptonomicn http://www.iec.csic.es/CRIPTONOMICON/java/ofuscacion.html
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