SlideShare uma empresa Scribd logo
Decompiladores



I.T. Informática de Sistemas
          Traductores

Manuel Martín Salvador
    draxus@correo.ugr.es
      http://draxus.org
¿Qué es un decompilador?




Es un programa que realiza la operación
  inversa de un compilador: obtener el
código 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 código
●   Para mejorar el programa
●   Por si has perdido el código
¿Es legal?

    La licencia de la mayoría de los programas
    propietarios prohíben explícitamente la
    decompilación, pero en algunos países hay leyes
    que la permiten para los siguientes casos:
✔   Para propósitos 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 están 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 código de un programa binario.
●   Si bien es cierto que no todo programa se puede decompilar,
    hay casos en los que podemos obtener un código útil.
●   La verdad es que la mayoría de los decompiladores actuales sólo
    son capaces de usarse en programas preparados y no en el
    MundoReal(TM)
¿Es posible?

                                          Ensamblador
    Código C         Ensamblador
                                           optimizado


                     ;---- i = 10;
void main()
                       mov si, 10
{
                     ;---- j = 20;        ;---- k = i*j + 5;
  int i, j, k;
                       mov di, 20          mov ax, 10
                     ;---- k = i*j + 5;    mov bx, 20
     i = 10;
                       mov ax, si          mul bx
     j = 20;
                       mov bx, di          add ax, 5
                       mul bx              mov [bp+6], ax
     k = i*j + 5;
                       add ax, 5
}
                       mov [bp+6], ax
¿Es posible?

Código C      Ensamblador 1       Ensamblador 2



                                    cmp [bp+2], 20
               cmp [bp+2], 20
                                    jg lab1
if (i>20){     jle lab1
                                    jmp lab2
    j=30;
                                 lab1:
}               mov [bp+4], 30
                                    mov [bp+4], 30
else{           jmp lab2
                                    jmp lab3
    j=40;    lab1:
                                 lab2:
}               mov [bp+4], 40
                                    mov [bp+4], 40
j++;         lab2:
                                 lab3:
                inc [bp+4]
                                    inc [bp+4]
¿Cómo funciona?
                binario


           análisis sintáctico

           análisis semántico

   generación de código intermedio

generación del grafo del flujo de control

       análisis del flujo de datos

      análisis del flujo de control

         generación de código



          código de alto nivel
¿Cómo funciona?


1º Averiguar el compilador
2º Encontrar el main()
3º Definir las funciones
4º Agrupar el código en asignaciones,
  condiciones, saltos y llamadas a
  funciones.
¿Cómo funciona?
                 Asignación



mov ax, [bp+4]
mov bx, 20
mul bx                        i = ( i*20 ) + 4;
add ax, 4
mov [bp+4], ax
¿Cómo funciona?
                        Saltos

 mov ax, [bp+4]
 cmp ax, 10
 jnz lab1
                   if (i != 10) goto lab1;   if (i!= 10){
 mov bx, 15            j = 15;                   j = 20;
 mov [bp+2], bx        goto lab2;            }
                   lab1:                     else{
  jmp lab2             j = 20;                   j = 15;
lab1:              lab2:                     }
  mov bx,20
  mov [bp+2], bx
lab2:
¿Cómo funciona?
             Llamada a funciones


mov ax, [bp+4];
push ax
mov ax, [bp+2];
                             i = func(j, i);
push ax
call _func
mov [bp+4], ax
Tipos de decompiladores
●   Código máquina
●   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)
●   Más 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!
¿Qué pasa con C/C++?

Los compiladores de Java, .NET y Flash no generan código binario, si
      no bytecode, esto es, código para ser ejecutable sobre sus
  máquinas virtuales. Por eso estos lenguajes son multiplataforma.

 En cambio, los compiladores de C generan código optimizado en
  binario para un procesador determinado (x86, AMD64, SPARC...)

De esta manera, es mucho más difícil decompilar programas en C.
 La única documentación hoy día que he podido encontrar es una
 tesis de Cristina Cifuentes (Universidad de Queensland) dedicada
  exclusivamente a la decompilación en C en la arquitectura i386.

Los pocos decompiladores existentes para C no son automáticos, es
   decir, necesitan la interacción del usuario y sólo funcionan con
                         programas pequeños.
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

http://www.program-transformation.org/Transform/BobStoutOnDecompilation
¿Cómo evitarlo?
●   Ofuscar el código: convertir el programa en otro equivalente por
    medio de transformaciones de forma que no se consiga código útil
    al decompilar. Por ejemplo:
         ➔   Que todos los nombres de funciones y
             variables carezcan de sentido
         ➔   Incluir ocasionalmente cálculos y bucles
             sin sentido
         ➔   Esconder números pequeños en
             cadenas de texto
         ➔   Crear métodos grandes, en vez de
             utilizar subrutinas
         ➔   Distribuir los métodos entre las
             subclases

●   Tamperproofing: es una técnica para ocultar el código del
    programa, añadiendo código extra de manera que sea
    imposible reobtener el código original al decompilar.
Referencias


●     Watermarking, Tamper-Proofing, and Obfuscation - Tools for Software Protection
     http://www.cs.arizona.edu/~collberg/Research/Publications/CollbergThomborson2000a/index.html

●    Program Transformation http://www.program-transformation.org
●    Wikipedia http://en.wikipedia.org/wiki/Decompiler
●    DebugMode http://www.debugmode.com/dcompile/
●    Criptonomicón http://www.iec.csic.es/CRIPTONOMICON/java/ofuscacion.html
●    Nolan, Godfrey - Decompiling Java



    Imágenes
       Tango Icons http://tango.freedesktop.org/ CC by-sa
       Gray Cow http://openclipart.org/media/files/mairin/3076 PD
FIN




Gracias

Mais conteúdo relacionado

Mais procurados

51036806 proyecto-ejemplo-ingenieria-de-software
51036806 proyecto-ejemplo-ingenieria-de-software51036806 proyecto-ejemplo-ingenieria-de-software
51036806 proyecto-ejemplo-ingenieria-de-software
Miguel Angel Rodriguez
 
Atributos de calidad en el desarrollo de software
Atributos de calidad en el desarrollo de softwareAtributos de calidad en el desarrollo de software
Atributos de calidad en el desarrollo de software
Gustavo Cuen
 
Métrica de punto de función y lineas de codigo
Métrica de punto de función y lineas de codigoMétrica de punto de función y lineas de codigo
Métrica de punto de función y lineas de codigo
Jesús E. CuRias
 

Mais procurados (20)

ATRIBUTOS DE CALIDAD ARQUITECTURA DE SOFTWARE.pdf
ATRIBUTOS DE CALIDAD ARQUITECTURA DE SOFTWARE.pdfATRIBUTOS DE CALIDAD ARQUITECTURA DE SOFTWARE.pdf
ATRIBUTOS DE CALIDAD ARQUITECTURA DE SOFTWARE.pdf
 
7.modelado de los requerimientos escenarios y clases
7.modelado de los requerimientos  escenarios y clases7.modelado de los requerimientos  escenarios y clases
7.modelado de los requerimientos escenarios y clases
 
Metodologias de diseño de bd
Metodologias de diseño de bdMetodologias de diseño de bd
Metodologias de diseño de bd
 
Estimación Software por Puntos de Función
Estimación Software por Puntos de FunciónEstimación Software por Puntos de Función
Estimación Software por Puntos de Función
 
Conceptos basicos arquitectura de software
Conceptos basicos arquitectura de softwareConceptos basicos arquitectura de software
Conceptos basicos arquitectura de software
 
51036806 proyecto-ejemplo-ingenieria-de-software
51036806 proyecto-ejemplo-ingenieria-de-software51036806 proyecto-ejemplo-ingenieria-de-software
51036806 proyecto-ejemplo-ingenieria-de-software
 
Metodologia Incremental
Metodologia IncrementalMetodologia Incremental
Metodologia Incremental
 
Caracteristicas Microsoft SQL Server
Caracteristicas Microsoft SQL ServerCaracteristicas Microsoft SQL Server
Caracteristicas Microsoft SQL Server
 
Calidad del software
Calidad del softwareCalidad del software
Calidad del software
 
MetodologíAs Y Ciclos De Vida
MetodologíAs Y Ciclos De VidaMetodologíAs Y Ciclos De Vida
MetodologíAs Y Ciclos De Vida
 
Cuadro comparativo de enfoque estructurado y enfoque orientado
Cuadro comparativo de enfoque estructurado y enfoque orientadoCuadro comparativo de enfoque estructurado y enfoque orientado
Cuadro comparativo de enfoque estructurado y enfoque orientado
 
Validación y Verificación de Software
Validación y Verificación de SoftwareValidación y Verificación de Software
Validación y Verificación de Software
 
Gestión de la Calidad en Proyectos de Software
Gestión de la Calidad en Proyectos de SoftwareGestión de la Calidad en Proyectos de Software
Gestión de la Calidad en Proyectos de Software
 
Rup disciplinas
Rup disciplinasRup disciplinas
Rup disciplinas
 
Presentacion Java
Presentacion JavaPresentacion Java
Presentacion Java
 
Modelo del dominio
Modelo del dominioModelo del dominio
Modelo del dominio
 
Atributos de calidad en el desarrollo de software
Atributos de calidad en el desarrollo de softwareAtributos de calidad en el desarrollo de software
Atributos de calidad en el desarrollo de software
 
Diseño de Software
Diseño de SoftwareDiseño de Software
Diseño de Software
 
Métricas de Calidad del Software.pptx
Métricas de Calidad del Software.pptxMétricas de Calidad del Software.pptx
Métricas de Calidad del Software.pptx
 
Métrica de punto de función y lineas de codigo
Métrica de punto de función y lineas de codigoMétrica de punto de función y lineas de codigo
Métrica de punto de función y lineas de codigo
 

Semelhante a Decompiladores

Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Jose Manuel Mansilla Carrasco
 
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xx
freddymadriz
 
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Jose Manuel Mansilla Carrasco
 
"Hola Mundo" C18, PIC18F y MPLAB
"Hola Mundo"  C18,  PIC18F y MPLAB"Hola Mundo"  C18,  PIC18F y MPLAB
"Hola Mundo" C18, PIC18F y MPLAB
BlackD10
 

Semelhante a Decompiladores (20)

Abel Valero - VM + VFS = The Wooden Horse [rooted2018]
Abel Valero - VM + VFS = The Wooden Horse [rooted2018]Abel Valero - VM + VFS = The Wooden Horse [rooted2018]
Abel Valero - VM + VFS = The Wooden Horse [rooted2018]
 
AdV - Programación para no Programadores
AdV - Programación para no ProgramadoresAdV - Programación para no Programadores
AdV - Programación para no Programadores
 
Primera Interaula, 'Programación para no programadores'
Primera Interaula, 'Programación para no programadores'Primera Interaula, 'Programación para no programadores'
Primera Interaula, 'Programación para no programadores'
 
Presentacion Python
Presentacion  Python Presentacion  Python
Presentacion Python
 
Turbo c
Turbo cTurbo c
Turbo c
 
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xx
 
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xx
 
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xx
 
Clase 2 GuiaPractica.pdf
Clase 2 GuiaPractica.pdfClase 2 GuiaPractica.pdf
Clase 2 GuiaPractica.pdf
 
Jerónimo López | Introducción a GraalVM | Codemotion Madrid 2018
Jerónimo López | Introducción a GraalVM | Codemotion Madrid  2018  Jerónimo López | Introducción a GraalVM | Codemotion Madrid  2018
Jerónimo López | Introducción a GraalVM | Codemotion Madrid 2018
 
"Hola Mundo" C18, PIC18F y MPLAB
"Hola Mundo"  C18,  PIC18F y MPLAB"Hola Mundo"  C18,  PIC18F y MPLAB
"Hola Mundo" C18, PIC18F y MPLAB
 
CUESTIONARIO 2NDA UNIDAD
CUESTIONARIO 2NDA UNIDADCUESTIONARIO 2NDA UNIDAD
CUESTIONARIO 2NDA UNIDAD
 
FUNDAMENTOS PYTHON.ppsx
FUNDAMENTOS PYTHON.ppsxFUNDAMENTOS PYTHON.ppsx
FUNDAMENTOS PYTHON.ppsx
 
Historia de c++
Historia de c++Historia de c++
Historia de c++
 
Depuración Avanzada Con Win Dbg Y Vs 2010 (Basica)
Depuración Avanzada Con Win Dbg Y Vs 2010 (Basica)Depuración Avanzada Con Win Dbg Y Vs 2010 (Basica)
Depuración Avanzada Con Win Dbg Y Vs 2010 (Basica)
 
Historia de c++
Historia de c++Historia de c++
Historia de c++
 
C++
C++ C++
C++
 
Curso basico c sharp
Curso basico c sharpCurso basico c sharp
Curso basico c sharp
 
16.10.24 robots jus intro ros s4-5
16.10.24 robots jus intro ros s4-516.10.24 robots jus intro ros s4-5
16.10.24 robots jus intro ros s4-5
 
Curso basico c sharp
Curso basico c sharpCurso basico c sharp
Curso basico c sharp
 

Mais de Manuel Martín

Effects of change propagation resulting from adaptive preprocessing in multic...
Effects of change propagation resulting from adaptive preprocessing in multic...Effects of change propagation resulting from adaptive preprocessing in multic...
Effects of change propagation resulting from adaptive preprocessing in multic...
Manuel Martín
 
Operaciones Colectivas en MPI
Operaciones Colectivas en MPIOperaciones Colectivas en MPI
Operaciones Colectivas en MPI
Manuel Martín
 
Introducción a GNU/Linux
Introducción a GNU/LinuxIntroducción a GNU/Linux
Introducción a GNU/Linux
Manuel Martín
 
Presentación Día de la Libertad del Software 2011
Presentación Día de la Libertad del Software 2011Presentación Día de la Libertad del Software 2011
Presentación Día de la Libertad del Software 2011
Manuel Martín
 
Presentacion Taller de Introducción a Linux SFD2010
Presentacion Taller de Introducción a Linux SFD2010Presentacion Taller de Introducción a Linux SFD2010
Presentacion Taller de Introducción a Linux SFD2010
Manuel Martín
 

Mais de Manuel Martín (20)

Hogar (Des)Conectado
Hogar (Des)ConectadoHogar (Des)Conectado
Hogar (Des)Conectado
 
Automatizando el aprendizaje basado en datos
Automatizando el aprendizaje basado en datosAutomatizando el aprendizaje basado en datos
Automatizando el aprendizaje basado en datos
 
Modelling Multi-Component Predictive Systems as Petri Nets
Modelling Multi-Component Predictive Systems as Petri NetsModelling Multi-Component Predictive Systems as Petri Nets
Modelling Multi-Component Predictive Systems as Petri Nets
 
Brand engagement with mobile gamification apps from a developer perspective
Brand engagement with mobile gamification apps from a developer perspectiveBrand engagement with mobile gamification apps from a developer perspective
Brand engagement with mobile gamification apps from a developer perspective
 
Effects of change propagation resulting from adaptive preprocessing in multic...
Effects of change propagation resulting from adaptive preprocessing in multic...Effects of change propagation resulting from adaptive preprocessing in multic...
Effects of change propagation resulting from adaptive preprocessing in multic...
 
Improving transport timetables usability for mobile devices
Improving transport timetables usability for mobile devicesImproving transport timetables usability for mobile devices
Improving transport timetables usability for mobile devices
 
Automating Machine Learning - Is it feasible?
Automating Machine Learning - Is it feasible?Automating Machine Learning - Is it feasible?
Automating Machine Learning - Is it feasible?
 
Towards Automatic Composition of Multicomponent Predictive Systems
Towards Automatic Composition of Multicomponent Predictive SystemsTowards Automatic Composition of Multicomponent Predictive Systems
Towards Automatic Composition of Multicomponent Predictive Systems
 
From sensor readings to prediction: on the process of developing practical so...
From sensor readings to prediction: on the process of developing practical so...From sensor readings to prediction: on the process of developing practical so...
From sensor readings to prediction: on the process of developing practical so...
 
Quick presentation for the OpenML workshop in Eindhoven 2014
Quick presentation for the OpenML workshop in Eindhoven 2014Quick presentation for the OpenML workshop in Eindhoven 2014
Quick presentation for the OpenML workshop in Eindhoven 2014
 
Online Detection of Shutdown Periods in Chemical Plants: A Case Study
Online Detection of Shutdown Periods in Chemical Plants: A Case StudyOnline Detection of Shutdown Periods in Chemical Plants: A Case Study
Online Detection of Shutdown Periods in Chemical Plants: A Case Study
 
Artificial Intelligence for Automating Data Analysis
Artificial Intelligence for Automating Data AnalysisArtificial Intelligence for Automating Data Analysis
Artificial Intelligence for Automating Data Analysis
 
Handling concept drift in data stream mining
Handling concept drift in data stream miningHandling concept drift in data stream mining
Handling concept drift in data stream mining
 
Minería de secuencias de datos
Minería de secuencias de datosMinería de secuencias de datos
Minería de secuencias de datos
 
Minería de secuencias de datos
Minería de secuencias de datosMinería de secuencias de datos
Minería de secuencias de datos
 
AndalucíaPeople: Un sistema de recomendación para sitios de ocio de Andalucía
AndalucíaPeople: Un sistema de recomendación para sitios de ocio de AndalucíaAndalucíaPeople: Un sistema de recomendación para sitios de ocio de Andalucía
AndalucíaPeople: Un sistema de recomendación para sitios de ocio de Andalucía
 
Operaciones Colectivas en MPI
Operaciones Colectivas en MPIOperaciones Colectivas en MPI
Operaciones Colectivas en MPI
 
Introducción a GNU/Linux
Introducción a GNU/LinuxIntroducción a GNU/Linux
Introducción a GNU/Linux
 
Presentación Día de la Libertad del Software 2011
Presentación Día de la Libertad del Software 2011Presentación Día de la Libertad del Software 2011
Presentación Día de la Libertad del Software 2011
 
Presentacion Taller de Introducción a Linux SFD2010
Presentacion Taller de Introducción a Linux SFD2010Presentacion Taller de Introducción a Linux SFD2010
Presentacion Taller de Introducción a Linux SFD2010
 

Último

(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
vazquezgarciajesusma
 
proyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmusproyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmus
raquelariza02
 

Último (20)

Introducción a la robótica con arduino..pptx
Introducción a la robótica con arduino..pptxIntroducción a la robótica con arduino..pptx
Introducción a la robótica con arduino..pptx
 
taller de tablas en word para estudiantes de secundaria
taller de tablas en word para estudiantes de secundariataller de tablas en word para estudiantes de secundaria
taller de tablas en word para estudiantes de secundaria
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
 
Licencias para el Uso y el Desarrollo de Software
Licencias para el Uso y el Desarrollo de SoftwareLicencias para el Uso y el Desarrollo de Software
Licencias para el Uso y el Desarrollo de Software
 
HIGADO Y TRAUMA HEPATICO UDABOL 2024 (3).pdf
HIGADO  Y TRAUMA HEPATICO UDABOL 2024 (3).pdfHIGADO  Y TRAUMA HEPATICO UDABOL 2024 (3).pdf
HIGADO Y TRAUMA HEPATICO UDABOL 2024 (3).pdf
 
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUALJORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
 
proyectos_social_y_socioproductivos _mapas_conceptuales
proyectos_social_y_socioproductivos _mapas_conceptualesproyectos_social_y_socioproductivos _mapas_conceptuales
proyectos_social_y_socioproductivos _mapas_conceptuales
 
Unidad 1- Historia y Evolucion de las computadoras.pdf
Unidad 1- Historia y Evolucion de las computadoras.pdfUnidad 1- Historia y Evolucion de las computadoras.pdf
Unidad 1- Historia y Evolucion de las computadoras.pdf
 
Inteligencia Artificial para usuarios nivel inicial
Inteligencia Artificial para usuarios nivel inicialInteligencia Artificial para usuarios nivel inicial
Inteligencia Artificial para usuarios nivel inicial
 
Gestión de concurrencia y bloqueos en SQL Server
Gestión de concurrencia y bloqueos en SQL ServerGestión de concurrencia y bloqueos en SQL Server
Gestión de concurrencia y bloqueos en SQL Server
 
Sistemas distribuidos de redes de computadores en un entorno virtual de apren...
Sistemas distribuidos de redes de computadores en un entorno virtual de apren...Sistemas distribuidos de redes de computadores en un entorno virtual de apren...
Sistemas distribuidos de redes de computadores en un entorno virtual de apren...
 
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfTrabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
 
lenguaje algebraico.pptx álgebra, trigonometria
lenguaje algebraico.pptx álgebra, trigonometrialenguaje algebraico.pptx álgebra, trigonometria
lenguaje algebraico.pptx álgebra, trigonometria
 
proyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmusproyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmus
 
Presentacion y Extension de tema para Blogger.pptx
Presentacion y Extension de tema para Blogger.pptxPresentacion y Extension de tema para Blogger.pptx
Presentacion y Extension de tema para Blogger.pptx
 
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
 
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptxleidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
 
3°ð_¦_â_¾ï¸_S34 PLAN DARUKEL DIDÃ_CTICA 23-24.docx
3°ð_¦_â_¾ï¸_S34 PLAN DARUKEL DIDÃ_CTICA 23-24.docx3°ð_¦_â_¾ï¸_S34 PLAN DARUKEL DIDÃ_CTICA 23-24.docx
3°ð_¦_â_¾ï¸_S34 PLAN DARUKEL DIDÃ_CTICA 23-24.docx
 
Diagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdfDiagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdf
 
manual-de-oleohidraulica-industrial-vickers.pdf
manual-de-oleohidraulica-industrial-vickers.pdfmanual-de-oleohidraulica-industrial-vickers.pdf
manual-de-oleohidraulica-industrial-vickers.pdf
 

Decompiladores

  • 1. Decompiladores I.T. Informática de Sistemas Traductores Manuel Martín Salvador draxus@correo.ugr.es http://draxus.org
  • 2. ¿Qué es un decompilador? Es un programa que realiza la operación inversa de un compilador: obtener el código fuente de un programa compilado
  • 3. ¿Por qué decompilar? ● Para arreglar bugs (errores) ● Para encontrar vulnerabilidades ● Para buscar malware ● Para aprender ● Por interoperabilidad ● Para optimizar el código ● Para mejorar el programa ● Por si has perdido el código
  • 4. ¿Es legal? La licencia de la mayoría de los programas propietarios prohíben explícitamente la decompilación, pero en algunos países hay leyes que la permiten para los siguientes casos: ✔ Para propósitos 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 están usando algoritmos protegidos por patentes
  • 5. ¿Es posible? ● Muchos creemos que de la misma forma que no se puede obtener una vaca de una hamburguesa, tampoco se puede obtener el código de un programa binario. ● Si bien es cierto que no todo programa se puede decompilar, hay casos en los que podemos obtener un código útil. ● La verdad es que la mayoría de los decompiladores actuales sólo son capaces de usarse en programas preparados y no en el MundoReal(TM)
  • 6. ¿Es posible? Ensamblador Código C Ensamblador optimizado ;---- i = 10; void main() mov si, 10 { ;---- j = 20; ;---- k = i*j + 5; int i, j, k; mov di, 20 mov ax, 10 ;---- k = i*j + 5; mov bx, 20 i = 10; mov ax, si mul bx j = 20; mov bx, di add ax, 5 mul bx mov [bp+6], ax k = i*j + 5; add ax, 5 } mov [bp+6], ax
  • 7. ¿Es posible? Código C Ensamblador 1 Ensamblador 2 cmp [bp+2], 20 cmp [bp+2], 20 jg lab1 if (i>20){ jle lab1 jmp lab2 j=30; lab1: } mov [bp+4], 30 mov [bp+4], 30 else{ jmp lab2 jmp lab3 j=40; lab1: lab2: } mov [bp+4], 40 mov [bp+4], 40 j++; lab2: lab3: inc [bp+4] inc [bp+4]
  • 8. ¿Cómo funciona? binario análisis sintáctico análisis semántico generación de código intermedio generación del grafo del flujo de control análisis del flujo de datos análisis del flujo de control generación de código código de alto nivel
  • 9. ¿Cómo funciona? 1º Averiguar el compilador 2º Encontrar el main() 3º Definir las funciones 4º Agrupar el código en asignaciones, condiciones, saltos y llamadas a funciones.
  • 10. ¿Cómo funciona? Asignación mov ax, [bp+4] mov bx, 20 mul bx i = ( i*20 ) + 4; add ax, 4 mov [bp+4], ax
  • 11. ¿Cómo funciona? Saltos mov ax, [bp+4] cmp ax, 10 jnz lab1 if (i != 10) goto lab1; if (i!= 10){ mov bx, 15 j = 15; j = 20; mov [bp+2], bx goto lab2; } lab1: else{ jmp lab2 j = 20; j = 15; lab1: lab2: } mov bx,20 mov [bp+2], bx lab2:
  • 12. ¿Cómo funciona? Llamada a funciones mov ax, [bp+4]; push ax mov ax, [bp+2]; i = func(j, i); push ax call _func mov [bp+4], ax
  • 13. Tipos de decompiladores ● Código máquina ● Ensamblador ● Delphi ● Visual Basic ● Java ● .NET ● Python ● Flash ● C/C++
  • 14. Decompiladores Java ● Jdec (libre) ● JODE (libre) ● Jad (gratis) ● Mocha (gratis, obsoleto) ● JreversePro (libre) ● ClassCracker 3 (comercial) ● DJ Java Decompiler (gratis) ● Más en http://java-decompiler.com DEMO!
  • 15. 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)
  • 16. Decompiladores Flash Sothink SWF Decompiler (gratis) http://www.sothink.com/product/flashdecompiler/ Gordon Flash Decompiler (comercial) http://www.futurecandy.net/ DEMO!
  • 17. ¿Qué pasa con C/C++? Los compiladores de Java, .NET y Flash no generan código binario, si no bytecode, esto es, código para ser ejecutable sobre sus máquinas virtuales. Por eso estos lenguajes son multiplataforma. En cambio, los compiladores de C generan código optimizado en binario para un procesador determinado (x86, AMD64, SPARC...) De esta manera, es mucho más difícil decompilar programas en C. La única documentación hoy día que he podido encontrar es una tesis de Cristina Cifuentes (Universidad de Queensland) dedicada exclusivamente a la decompilación en C en la arquitectura i386. Los pocos decompiladores existentes para C no son automáticos, es decir, necesitan la interacción del usuario y sólo funcionan con programas pequeños.
  • 18. 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 http://www.program-transformation.org/Transform/BobStoutOnDecompilation
  • 19. ¿Cómo evitarlo? ● Ofuscar el código: convertir el programa en otro equivalente por medio de transformaciones de forma que no se consiga código útil al decompilar. Por ejemplo: ➔ Que todos los nombres de funciones y variables carezcan de sentido ➔ Incluir ocasionalmente cálculos y bucles sin sentido ➔ Esconder números pequeños en cadenas de texto ➔ Crear métodos grandes, en vez de utilizar subrutinas ➔ Distribuir los métodos entre las subclases ● Tamperproofing: es una técnica para ocultar el código del programa, añadiendo código extra de manera que sea imposible reobtener el código original al decompilar.
  • 20. Referencias ● Watermarking, Tamper-Proofing, and Obfuscation - Tools for Software Protection http://www.cs.arizona.edu/~collberg/Research/Publications/CollbergThomborson2000a/index.html ● Program Transformation http://www.program-transformation.org ● Wikipedia http://en.wikipedia.org/wiki/Decompiler ● DebugMode http://www.debugmode.com/dcompile/ ● Criptonomicón http://www.iec.csic.es/CRIPTONOMICON/java/ofuscacion.html ● Nolan, Godfrey - Decompiling Java Imágenes Tango Icons http://tango.freedesktop.org/ CC by-sa Gray Cow http://openclipart.org/media/files/mairin/3076 PD