SlideShare a Scribd company logo
1 of 43
REVERSING
Técnicas de Ingeniería Inversa
Reversing, Técnicas de Ingeniería Inversa 2
Who Am I
• Eduardo Blázquez (Fare9, F9, el de la foto de Ilonqueen,…)
• Graduado en Ingeniería de Computadores por la UAH
• Junior Malware Analyst en Panda Security
• Con intereses en Reversing, exploiting, análisis de malware y no
tan análisis…
@Farenain https://f9.29wspy.ru
Reversing, Técnicas de Ingeniería Inversa 3
About Me
Reversing, Técnicas de Ingeniería Inversa 4
Reversing, una introducción
Algo de terminología
“La Ingeniería inversa conocida en el mundo anglosajón como reversing. Realización
de una ‘contra-elaboración’ de un producto. En nuestro caso, nos referiremos a
obtener el código o esquemas de un software compilado”
Reversing, Técnicas de Ingeniería Inversa 5
Terminología
• Arquitectura de computadores
• Lenguaje Ensamblador
• Disassemblers
• Debuggers
• Usos del Reversing (Malware Analysis, Exploiting, “Cracking”…)
Reversing, Técnicas de Ingeniería Inversa 6
Arquitectura de Computadores
Según Kai Hwang y Fayé Briggs, la arquitectura de computadores “es
en realidad, un concepto del sistema que integra hardware, software,
algoritmos y lenguajes para realizar grandes cálculos”
Según J. L. Baer es “el arte o ciencia de planificar, diseñar, construir y
dar tratamiento decorativo a los computadores”
Y… blah, blah, blah, blah
Reversing, Técnicas de Ingeniería Inversa 7
Arquitectura de Computadores
Sólo era una aburrida introducción para poner la arquitectura de Von
Neumann.
Reversing, Técnicas de Ingeniería Inversa 8
Lenguaje Ensamblador
• Nivel más bajo en la cadena del software
• “Lenguaje del reversing por excelencia”
• Es una clase de lenguaje, no un lenguaje en sí
• Es la representación a nivel “humano” del código máquina
• Es dependiente de la arquitectura
Reversing, Técnicas de Ingeniería Inversa 9
Disassemblers
Programas que toman los binarios ejecutables como entrada, y
generan textos que contengan el código ensamblador del programa
completo o parte.
Cada desensamblado es específico de la arquitectura.
Son usados en un análisis o reversing estático.
Disassemblers más conocidos…
Reversing, Técnicas de Ingeniería Inversa 10
Debuggers
Programa que permite observar otro programa durante su ejecución.
Esto permite ver las trazas, posibles errores, modificaciones del
sistema. Todo esto instrucción por instrucción.
Existen dos tipos, unos vienen integrados en los IDEs, y debuggers
como programas a parte.
Debuggers más conocidos…
Reversing, Técnicas de Ingeniería Inversa 11
Special Thanks To
Duncan Ogilvie (Main x64dbg Developer) and x64dbg community (they are a
great community), for let me give this talk and little training with x64dbg.
In final training, we will use his debugger with some plugins I’ve installed and
packed in zip for students.
Reversing, Técnicas de Ingeniería Inversa 12
Usos del reversing
• Análisis de malware: para obtener en detalle qué acciones realiza
un malware, se analiza el código a bajo nivel.
• Exploiting: igual que antes se analiza el código de un programa
para buscar vulnerabilidades.
• Cracking: no hace falta explicarlo, ¿no?
Reversing, Técnicas de Ingeniería Inversa 13
Arquitectura x86-32
• Arquitectura CISC de 32 bits, se trata de una arquitectura Little-
Endian.
• Opera en dos modos:
• Modo Real: según arranca, soporta instrucciones de 16 bits.
• Modo Protegido: un modo en el que soporta la paginación, y la
memoria virtual.
Reversing, Técnicas de Ingeniería Inversa 14
Los anillos de poder: de Ring O a Ring 3
• La arquitectura x86 soporta el concepto de separación de
privilegios.
• Para ello se usan 4 anillos de privilegio, el Ring 0 (mayor nivel de
privilegio) y el Ring 3 (menor nivel de privilegio), Ring 1 y 2 no
suelen utilizarse.
• Los sistemas operativos suelen implementar el nivel de usuario en
el Ring 3 y el nivel de kernel en el Ring 0.
Reversing, Técnicas de Ingeniería Inversa 15
Los Registros
• Se trata de pequeños montones de memoria disponibles para la
CPU de acceso rápido.
• Tenemos 4 categorías principales:
Reversing, Técnicas de Ingeniería Inversa 16
Los Registros
• Estos registros tienen un tamaño de 32 bits, pero algunos de ellos
pueden ser divididos en porciones más pequeñas
Reversing, Técnicas de Ingeniería Inversa 17
Los Registros
• Algunos registros aunque generales, suelen tener unos usos
concretos
Registro Propósito
EAX Acumulador, producto, división…
ECX Contador en bucles
ESI Fuente en operaciones de cadenas/memoria
EDI Destino en operaciones de cadenas/memoria
EBP Base de los frames de pila (ya lo veremos)
ESP Puntero de la pila (ya lo veremos)
EDX Suele utilizarse en productos, divisiones junto con EAX
Reversing, Técnicas de Ingeniería Inversa 18
Los Registros
• Otros registros interesantes (que no se suelen tratar):
• CRX: registros de control.
• CR0: Controla la paginación.
• CR1,5,6,7: Reservados para la CPU.
• CR2: contiene la dirección que provoque un fallo de página.
• CR3: guarda la dirección base de la estructura de paginación.
• CR4: controla la virtualización.
• DRX: usados para establecer breakpoints de hardware.
• DR0-DR3: guardan la dirección del breakpoint.
• DR4-DR7: usados para status.
• Registros específicos del modelo (MSRs): variables según el
procesor (AMD e Intel usan diferentes)
Reversing, Técnicas de Ingeniería Inversa 19
Sintaxis de Ensamblador
• Dependiendo del assembler/disassember usado, hay dos sintaxis
diferentes, Intel y AT&T.
Intel
mov ecx, 40233033h
mov ecx, [eax]
mov ecx, eax
AT&T
movl $40233033h, %ecx
movl (%eax), %ecx
movl %ecx, %eax
Reversing, Técnicas de Ingeniería Inversa 20
Set de Instrucciones
Moviendo Datos
Instrucción MOV
En Intel x86 de 32 bits, se permiten los siguientes tipos de
movimientos:
• Valor Inmediato a registro. mov eax,40h
• Registro a registro. mov eax, ebx
• Inmediato a memoria. mov [04030201h],33h
• Registro a memoria y memoria a registro. mov [04052233h], ebx
• Memoria a memoria (con algunas instrucciones) inc dword ptr [04032221h]
Reversing, Técnicas de Ingeniería Inversa 21
Set de Instrucciones
Acceso a memoria
Como se ha visto, se usan los corchetes ([ ]) para el acceso a memoria, los accesos
se pueden hacer a byte, word y dword de la siguiente forma:
• byte: mov al, byte ptr [<address>]
• word: mov ax, word ptr [<address>]
• dword: mov eax, dword ptr [<address>]
A memoria se puede acceder también a través de registros, por índice, índice y
desplazamiento…
• mov ebx, [eax] ; acceso a memoria por registro
• mov ebx, [eax + 8] ; acceso por desplazamiento
• mov ebx, [eax + esi * 4] ; acceso por índice y desplazamiento…
Reversing, Técnicas de Ingeniería Inversa 22
Set de Instrucciones
LEA eso y LEA lo otro
LEA (Load Effective Address) es una instrucción que hace uso de los corchetes,
pero en lugar de cargar de memoria, evalúa la expresión entre corchetes, y asigna el
valor. (También lo permiten los ensambladores para hacer multiplicaciones).
LEA ebx, [ebp + 3] ; Mete en ebx, el valor que tenga ebp + 3
LEA edx, [eax * 5] ; Mete en edx, el valor que tenga eax * 5
movb,movw, movd
Mueven un byte, word o double, de una dirección apuntada por ESI, a una dirección
apuntada por EDI.
LEA esi, [04050607h + 03h]; esi ahora = 0405060Ah
LEA edi, [04050600h + 02h]; edi ahora = 04050602h
movd; mueve los 4 bytes apuntados por 0405060Ah a la dirección 04050602h
Reversing, Técnicas de Ingeniería Inversa 23
Set de Instrucciones
Instrucciones Aritméticas
• ADD eax, 02h ; eax = eax + 2
• SUB eax, 20h ; eax = eax – 20h
• inc eax; eax = eax + 1
• dec eax; eax = eax – 1
Instrucciones Lógicas
• AND eax, 00000100h ; operación AND ( 1 cuando ambos están a 1)
• OR eax, FFFFFFFFh ; operación OR ( 1 cuando al menos uno está a 1)
• XOR eax,eax ; operación XOR (1 exclusivo 1-0 o 0-1)
• NOT eax; da la vuelta a todos los bits (Complemento a 1)
• SHL/SHL eax,<numero/cl> ; desplaza bits a izq. o der. n veces
• ROL/ROR eax,<numero/cl> ; rota bits a izq. o der. n veces
Reversing, Técnicas de Ingeniería Inversa 24
Set de Instrucciones
Multiplicación
• MUL <reg/mem> ; multiplica por al,ax o eax y guarda en ax, dx:ax o edx:eax
• IMUL <reg/mem> ; multiplica por al,ax o eax y guarda en ax, dx:ax o edx:eax
• IMUL <reg1>,<reg2/mem>; reg1 = reg1 * reg2/mem
• IMUL <reg1>,<reg2/mem>,<numero>; reg1 = reg2/mem * numero
División
• DIV <reg/mem> ; divide edx:eax o dx:ax o ax entre valor dado, y guarda
resultado en eax o ax o al, y resto en edx o dx o ah.
• IDIV <reg/mem> ; divide edx:eax o eax o ax entre valor dado, y guarda
resultado en eax o ax o al, y resto en edx o dx o ah.
Reversing, Técnicas de Ingeniería Inversa 25
Push y Pop, la hora de la Stack
La Pila o Stack
Se trata de una zona de memoria la cual empieza en zonas altas de memoria, y
crece hacia las zonas bajas. Se trata de una estructura LIFO.
Para saber la dirección del stack se revisa el registro ESP. Se usa en conjunto de
EBP para quedar “frames”.
La stack se usa en los programas para: pasar parámetros a las funciones, variables
locales, guardar el estado del procesador en un momento dado…
Reversing, Técnicas de Ingeniería Inversa 26
Push y Pop, la hora de la Stack
Antes de nada y para poder entenderlo todo, vamos a ver las funciones para meter y
sacar valores de la stack. Recordemos habría que meter 4 bytes (32 bits).
Meter valores en la stack:
push <reg/mem/inmediato>
Esto es igual que:
sub esp,4
mov [esp],<reg/mem/inmediato>
pop <reg/mem>
Esto es igual que:
mov <reg/mem>,[esp]
add esp,4
Reversing, Técnicas de Ingeniería Inversa 27
Push y Pop, la hora de la Stack
En programación, se utilizan las funciones para evitar la repetición de código, pero el
programa debe saber a dónde volver tras acabar la función.
Estas funciones normalmente suelen tener parámetros, los cuales son pasados por
la pila. Luego se realiza una llamada a la función (CALL)
Al entrar a una función, se introduce la dirección de retorno y se crea un pequeño
“frame” o “marco”, para que la función tenga “su propia pila”.
Entonces se reserva espacio para variables locales.
Finalmente, se “libera” el pequeño frame de la pila, se recupera el valor de retorno
para ir, y se “liberan” los parámetros. (RET)
Reversing, Técnicas de Ingeniería Inversa 28
Push y Pop, la hora de la Stack
int suma(int a,int b)
{
int valor;
valor = a + b;
return valor;
}
suma(1,2)
proc suma
push ebp
mov ebp,esp
sub esp,4
mov eax, [ebp + 8]
mov ebx, [ebp + C]
mov [esp],ebx
add [esp], eax
mov eax, [esp]
mov esp,ebp
pop ebp
ret 8
endp
push 2
push 1
call suma
Reversing, Técnicas de Ingeniería Inversa 29
Push y Pop, la hora de la Stack
Convenciones de llamada
Son “normas” que índican cómo se pasan los parámetros a una función (primero los
de la derecha o primero los de la izquierda), y cómo se limpian los parámetros de la
pila (si tiene que limpiarla el método que llama a una función, o el método llamado).
CDECL STDCALL
proc suma
push ebp
mov ebp,esp
sub esp,4
mov eax, [ebp + 8]
mov ebx, [ebp + C]
mov [esp],ebx
add [esp], eax
mov eax, [esp]
mov esp,ebp
pop ebp
ret 8
endp
push 2
push 1
call suma
add esp,8
push 2
push 1
call suma
proc suma
push ebp
mov ebp,esp
sub esp,4
mov eax, [ebp + 8]
mov ebx, [ebp + C]
mov [esp],ebx
add [esp], eax
mov eax, [esp]
mov esp,ebp
pop ebp
ret
endp
Reversing, Técnicas de Ingeniería Inversa 30
Saltos In/Condicionales
Para cambiar el flujo de ejecución de un programa, se utilizan los saltos. Estos nos
permiten dirigir la ejecución del programa.
Dos tipos de salto:
• Incondicionales: siempre se toman (Instrucción JMP)
• Condicionales: se toman dependiendo de una condición (Instrucciones Jcc)
Antes ya vimos un tipo de salto incondicional con la instrucción CALL.
Los saltos condicionales, dependen de valores dentro de un registro conocido como
“EFLAGS”.
Reversing, Técnicas de Ingeniería Inversa 31
EFLAGS
Los valores de estos EFLAGS son modificados después de instrucciones como las
aritmetico-lógicas. Ya que indican ciertas situaciones de interés que se han podido
dar.
Los valores de los EFLAGS al ser bits serán sólo ‘0’ o ‘1’.
Para establecer estos valores, se suelen utilizar unas instrucciones llamadas de
“comparación”. Estas son:
• CMP: compara dos números restando uno con otro, pero sin guardar el
resultado en ningún registro.
• TEST: realiza una operación lógica AND, igualmente sin guardar el resultado
en ningún registro.
Tras esto se pueden establecer los siguientes flags:
• zero flag(zf): el resultado dio 0
• carry flag(cf): el resultado dio un acarreo (overflow números sin signo).
• sign flag(sf): el resultado es negativo.
• Overflow flag(of): números con signo que desbordan su máximo.
Reversing, Técnicas de Ingeniería Inversa 32
Saltos Condicionales
Por tanto, los saltos condicionales revisarán los valores de estos EFLAGS.
Vamos a ver una tabla que explique los saltos más típicos:
Salto condicional Descripción EFLAGS
Implicados
JB/JNAE Salta si por debajo, o no mayor ni igual, números sin signo. CF = 1
JNB/JAE No por debajo, por encima o igual, sin signo. CF = 0
JE/JZ Igual o cero. ZF = 1
JNE/JNZ No igual, no cero. ZF = 0
JL Menor qué, números con signo. (SF ^ OV) = 1
JGE/JNL Mayor o igual, no menor que, números con signo. (SF ^ OV) = 0
JG/JNLE Mayor, no menor o igual que, números con signo. ((SF ^ OV)|ZF) = 0
Reversing, Técnicas de Ingeniería Inversa 33
Sigamos con la teoría
Reversing, Técnicas de Ingeniería Inversa 34
Ejecutables de Windows
Archivos PE
Se conoce así a los ejecutables de Windows, PE (Portable Executable). Este se usa
en archivos ejecutables, código objeto y DLLs.
Se trata de una estructura con la información necesaria para que el cargador del
sistema, pueda arrancar una aplicación.
Esta estructura cuenta con una cabecera, con información valiosa (por ejemplo en el
análisis de malware), tenemos por ejemplo: librerías y funciones enlazadas,
funciones importadas, funciones exportadas (en las DLLs)…
Reversing, Técnicas de Ingeniería Inversa 35
Ejecutables de Windows
Secciones de un archivo PE
• .text: sección que contiene las instrucciones que la CPU ejecuta.
• .rdata: contiene información de importaciones y exportaciones. Esta sección
también puede guardar información de sólo lectura. Suele dividirse en .idata
(importaciones) y .edata (exportaciones).
• .data: contiene los datos globales del programa.
• .rsrc: contiene los recursos usados por el ejecutable.
Reversing, Técnicas de Ingeniería Inversa 36
Que continúe la teoría
Reversing, Técnicas de Ingeniería Inversa 37
Empieza el CRACKME
Reversing, Técnicas de Ingeniería Inversa 38
Bibliografía (I)
Reversing, Técnicas de Ingeniería Inversa 39
Bibliografía (II)
Reversing, Técnicas de Ingeniería Inversa 40
Reversing, Técnicas de Ingeniería Inversa 41
Reversing, Técnicas de Ingeniería Inversa 42
DOMO ARIGATO MR ROBOTO
Reversing, Técnicas de Ingeniería Inversa 43
@Farenain
https://f9.29wspy.ru
f9@29wspy.ru

More Related Content

What's hot

José Selvi - Unprivileged Network Post-Exploitation [RootedCON 2011]
José Selvi - Unprivileged Network Post-Exploitation [RootedCON 2011]José Selvi - Unprivileged Network Post-Exploitation [RootedCON 2011]
José Selvi - Unprivileged Network Post-Exploitation [RootedCON 2011]
RootedCON
 
Hugo Teso - Inguma 0.5 Red Wagon [Rooted CON 2012]
Hugo Teso - Inguma 0.5 Red Wagon [Rooted CON 2012]Hugo Teso - Inguma 0.5 Red Wagon [Rooted CON 2012]
Hugo Teso - Inguma 0.5 Red Wagon [Rooted CON 2012]
RootedCON
 
Gabriel Gonzalez - Man-In-Remote: PKCS11 for fun and non-profit [RootedCON 2011]
Gabriel Gonzalez - Man-In-Remote: PKCS11 for fun and non-profit [RootedCON 2011]Gabriel Gonzalez - Man-In-Remote: PKCS11 for fun and non-profit [RootedCON 2011]
Gabriel Gonzalez - Man-In-Remote: PKCS11 for fun and non-profit [RootedCON 2011]
RootedCON
 
José Ramón Palanco - NoSQL Security [RootedCON 2011]
José Ramón Palanco - NoSQL Security [RootedCON 2011]José Ramón Palanco - NoSQL Security [RootedCON 2011]
José Ramón Palanco - NoSQL Security [RootedCON 2011]
RootedCON
 

What's hot (20)

Pablo sanemeteriovalencia
Pablo sanemeteriovalenciaPablo sanemeteriovalencia
Pablo sanemeteriovalencia
 
José Selvi - Unprivileged Network Post-Exploitation [RootedCON 2011]
José Selvi - Unprivileged Network Post-Exploitation [RootedCON 2011]José Selvi - Unprivileged Network Post-Exploitation [RootedCON 2011]
José Selvi - Unprivileged Network Post-Exploitation [RootedCON 2011]
 
Juan Antonio Calles & Patricia Rada - Biohacking: Almacenando información en ...
Juan Antonio Calles & Patricia Rada - Biohacking: Almacenando información en ...Juan Antonio Calles & Patricia Rada - Biohacking: Almacenando información en ...
Juan Antonio Calles & Patricia Rada - Biohacking: Almacenando información en ...
 
Presentacion Python
Presentacion  Python Presentacion  Python
Presentacion Python
 
Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [Ro...
Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [Ro...Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [Ro...
Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [Ro...
 
Seguridad so pi_2011
Seguridad so pi_2011Seguridad so pi_2011
Seguridad so pi_2011
 
Hugo Teso - Inguma 0.5 Red Wagon [Rooted CON 2012]
Hugo Teso - Inguma 0.5 Red Wagon [Rooted CON 2012]Hugo Teso - Inguma 0.5 Red Wagon [Rooted CON 2012]
Hugo Teso - Inguma 0.5 Red Wagon [Rooted CON 2012]
 
Clase3_Python-CTIC
Clase3_Python-CTICClase3_Python-CTIC
Clase3_Python-CTIC
 
Artipcs
ArtipcsArtipcs
Artipcs
 
Gabriel Gonzalez - Man-In-Remote: PKCS11 for fun and non-profit [RootedCON 2011]
Gabriel Gonzalez - Man-In-Remote: PKCS11 for fun and non-profit [RootedCON 2011]Gabriel Gonzalez - Man-In-Remote: PKCS11 for fun and non-profit [RootedCON 2011]
Gabriel Gonzalez - Man-In-Remote: PKCS11 for fun and non-profit [RootedCON 2011]
 
Clase1_Python-CTIC
Clase1_Python-CTICClase1_Python-CTIC
Clase1_Python-CTIC
 
Introduccion a Python
Introduccion a PythonIntroduccion a Python
Introduccion a Python
 
04 j flex
04 j flex04 j flex
04 j flex
 
TUTORIAL JAVA
TUTORIAL JAVATUTORIAL JAVA
TUTORIAL JAVA
 
Curso de Python
Curso de PythonCurso de Python
Curso de Python
 
David Reguera & Yago Jesus - Rootkit Busters ES [rooted2019]
David Reguera & Yago Jesus - Rootkit Busters ES [rooted2019]David Reguera & Yago Jesus - Rootkit Busters ES [rooted2019]
David Reguera & Yago Jesus - Rootkit Busters ES [rooted2019]
 
José Ramón Palanco - NoSQL Security [RootedCON 2011]
José Ramón Palanco - NoSQL Security [RootedCON 2011]José Ramón Palanco - NoSQL Security [RootedCON 2011]
José Ramón Palanco - NoSQL Security [RootedCON 2011]
 
Instalar Python 2.7 y 3 en Windows (Anaconda)
Instalar Python 2.7 y 3 en Windows (Anaconda)Instalar Python 2.7 y 3 en Windows (Anaconda)
Instalar Python 2.7 y 3 en Windows (Anaconda)
 
Clase4_Python-CTIC
Clase4_Python-CTICClase4_Python-CTIC
Clase4_Python-CTIC
 
Criptografia convencional
Criptografia convencionalCriptografia convencional
Criptografia convencional
 

Similar to Eduardo Blázquez - Técnicas de Ingeniería Inversa I & II [rooted2018]

Ts11 tiltepec isaac _alvarez_cruz
Ts11 tiltepec isaac _alvarez_cruzTs11 tiltepec isaac _alvarez_cruz
Ts11 tiltepec isaac _alvarez_cruz
Isaak Alvarez Krux
 
Instituto tecologico de tuxtla gutierez
Instituto tecologico de tuxtla  gutierezInstituto tecologico de tuxtla  gutierez
Instituto tecologico de tuxtla gutierez
Isaak Alvarez Krux
 

Similar to Eduardo Blázquez - Técnicas de Ingeniería Inversa I & II [rooted2018] (20)

Slides taller de exploiting Navaja Negra 4ed
Slides taller de exploiting Navaja Negra 4edSlides taller de exploiting Navaja Negra 4ed
Slides taller de exploiting Navaja Negra 4ed
 
Clase 2 GuiaPractica.pdf
Clase 2 GuiaPractica.pdfClase 2 GuiaPractica.pdf
Clase 2 GuiaPractica.pdf
 
Sistemas operativos ii
Sistemas operativos iiSistemas operativos ii
Sistemas operativos ii
 
Exploits y stack overflows en windows 2017
Exploits y stack overflows en windows 2017Exploits y stack overflows en windows 2017
Exploits y stack overflows en windows 2017
 
Ejecuciondeinstrucciones
EjecuciondeinstruccionesEjecuciondeinstrucciones
Ejecuciondeinstrucciones
 
Risc Cisc
Risc  CiscRisc  Cisc
Risc Cisc
 
Unidad 1 interfaz
Unidad 1 interfazUnidad 1 interfaz
Unidad 1 interfaz
 
Material taller de exploiting Navaja Negra 4ed
Material taller de exploiting Navaja Negra 4edMaterial taller de exploiting Navaja Negra 4ed
Material taller de exploiting Navaja Negra 4ed
 
Segundo blog arquitectura de hardware tercer corte
Segundo blog arquitectura de hardware tercer corteSegundo blog arquitectura de hardware tercer corte
Segundo blog arquitectura de hardware tercer corte
 
Presentación Proyecto de Grado: X-ISCKER
Presentación Proyecto de Grado: X-ISCKERPresentación Proyecto de Grado: X-ISCKER
Presentación Proyecto de Grado: X-ISCKER
 
Ts11 tiltepec isaac _alvarez_cruz
Ts11 tiltepec isaac _alvarez_cruzTs11 tiltepec isaac _alvarez_cruz
Ts11 tiltepec isaac _alvarez_cruz
 
Instituto tecologico de tuxtla gutierez
Instituto tecologico de tuxtla  gutierezInstituto tecologico de tuxtla  gutierez
Instituto tecologico de tuxtla gutierez
 
El cpu
El cpuEl cpu
El cpu
 
Computadores RISC
Computadores RISCComputadores RISC
Computadores RISC
 
Microcomputadoras al detalle
Microcomputadoras al detalleMicrocomputadoras al detalle
Microcomputadoras al detalle
 
Microcomputadoras al detalle
Microcomputadoras al detalleMicrocomputadoras al detalle
Microcomputadoras al detalle
 
Microcomputadoras al detalle
Microcomputadoras al detalleMicrocomputadoras al detalle
Microcomputadoras al detalle
 
Introducción al exploiting win32
Introducción al exploiting win32Introducción al exploiting win32
Introducción al exploiting win32
 
Workshop reversing
Workshop reversingWorkshop reversing
Workshop reversing
 
T 25
T 25T 25
T 25
 

More from RootedCON

More from RootedCON (20)

Rooted2020 A clockwork pentester - Jose Carlos Moral & Alvaro Villaverde
Rooted2020 A clockwork pentester - Jose Carlos Moral & Alvaro VillaverdeRooted2020 A clockwork pentester - Jose Carlos Moral & Alvaro Villaverde
Rooted2020 A clockwork pentester - Jose Carlos Moral & Alvaro Villaverde
 
rooted2020 Sandbox fingerprinting -_evadiendo_entornos_de_analisis_-_victor_c...
rooted2020 Sandbox fingerprinting -_evadiendo_entornos_de_analisis_-_victor_c...rooted2020 Sandbox fingerprinting -_evadiendo_entornos_de_analisis_-_victor_c...
rooted2020 Sandbox fingerprinting -_evadiendo_entornos_de_analisis_-_victor_c...
 
Rooted2020 hunting malware-using_process_behavior-roberto_amado
Rooted2020 hunting malware-using_process_behavior-roberto_amadoRooted2020 hunting malware-using_process_behavior-roberto_amado
Rooted2020 hunting malware-using_process_behavior-roberto_amado
 
Rooted2020 compliance as-code_-_guillermo_obispo_-_jose_mariaperez_-_
Rooted2020 compliance as-code_-_guillermo_obispo_-_jose_mariaperez_-_Rooted2020 compliance as-code_-_guillermo_obispo_-_jose_mariaperez_-_
Rooted2020 compliance as-code_-_guillermo_obispo_-_jose_mariaperez_-_
 
Rooted2020 the day i_ruled_the_world_deceiving_software_developers_through_op...
Rooted2020 the day i_ruled_the_world_deceiving_software_developers_through_op...Rooted2020 the day i_ruled_the_world_deceiving_software_developers_through_op...
Rooted2020 the day i_ruled_the_world_deceiving_software_developers_through_op...
 
Rooted2020 si la-empresa_ha_ocultado_el_ciberataque,_como_se_ha_enterado_el_r...
Rooted2020 si la-empresa_ha_ocultado_el_ciberataque,_como_se_ha_enterado_el_r...Rooted2020 si la-empresa_ha_ocultado_el_ciberataque,_como_se_ha_enterado_el_r...
Rooted2020 si la-empresa_ha_ocultado_el_ciberataque,_como_se_ha_enterado_el_r...
 
Rooted2020 wordpress-another_terror_story_-_manuel_garcia_-_jacinto_sergio_ca...
Rooted2020 wordpress-another_terror_story_-_manuel_garcia_-_jacinto_sergio_ca...Rooted2020 wordpress-another_terror_story_-_manuel_garcia_-_jacinto_sergio_ca...
Rooted2020 wordpress-another_terror_story_-_manuel_garcia_-_jacinto_sergio_ca...
 
Rooted2020 Atacando comunicaciones-de_voz_cifradas_-_jose_luis_verdeguer
Rooted2020 Atacando comunicaciones-de_voz_cifradas_-_jose_luis_verdeguerRooted2020 Atacando comunicaciones-de_voz_cifradas_-_jose_luis_verdeguer
Rooted2020 Atacando comunicaciones-de_voz_cifradas_-_jose_luis_verdeguer
 
rooted2020-Rootkit necurs no_es_un_bug,_es_una_feature_-_roberto_santos_-_jav...
rooted2020-Rootkit necurs no_es_un_bug,_es_una_feature_-_roberto_santos_-_jav...rooted2020-Rootkit necurs no_es_un_bug,_es_una_feature_-_roberto_santos_-_jav...
rooted2020-Rootkit necurs no_es_un_bug,_es_una_feature_-_roberto_santos_-_jav...
 
Rooted2020 stefano maccaglia--_the_enemy_of_my_enemy
Rooted2020 stefano maccaglia--_the_enemy_of_my_enemyRooted2020 stefano maccaglia--_the_enemy_of_my_enemy
Rooted2020 stefano maccaglia--_the_enemy_of_my_enemy
 
Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palom...
Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palom...Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palom...
Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palom...
 
Rooted2020 virtual pwned-network_-_manel_molina
Rooted2020 virtual pwned-network_-_manel_molinaRooted2020 virtual pwned-network_-_manel_molina
Rooted2020 virtual pwned-network_-_manel_molina
 
Rooted2020 van a-mear_sangre_como_hacer_que_los_malos_lo_paguen_muy_caro_-_an...
Rooted2020 van a-mear_sangre_como_hacer_que_los_malos_lo_paguen_muy_caro_-_an...Rooted2020 van a-mear_sangre_como_hacer_que_los_malos_lo_paguen_muy_caro_-_an...
Rooted2020 van a-mear_sangre_como_hacer_que_los_malos_lo_paguen_muy_caro_-_an...
 
Rooted2020 todo a-siem_-_marta_lopez
Rooted2020 todo a-siem_-_marta_lopezRooted2020 todo a-siem_-_marta_lopez
Rooted2020 todo a-siem_-_marta_lopez
 
Rooted2020 roapt evil-mass_storage_-_tu-ya_aqui_-_david_reguera_-_abel_valero
Rooted2020 roapt evil-mass_storage_-_tu-ya_aqui_-_david_reguera_-_abel_valeroRooted2020 roapt evil-mass_storage_-_tu-ya_aqui_-_david_reguera_-_abel_valero
Rooted2020 roapt evil-mass_storage_-_tu-ya_aqui_-_david_reguera_-_abel_valero
 
Rooted2020 live coding--_jesus_jara
Rooted2020 live coding--_jesus_jaraRooted2020 live coding--_jesus_jara
Rooted2020 live coding--_jesus_jara
 
Rooted2020 legalidad de-la_prueba_tecnologica_indiciaria_cuando_tu_papi_es_un...
Rooted2020 legalidad de-la_prueba_tecnologica_indiciaria_cuando_tu_papi_es_un...Rooted2020 legalidad de-la_prueba_tecnologica_indiciaria_cuando_tu_papi_es_un...
Rooted2020 legalidad de-la_prueba_tecnologica_indiciaria_cuando_tu_papi_es_un...
 
Rooted2020 hackeando el-mundo_exterior_a_traves_de_bluetooth_low-energy_ble_-...
Rooted2020 hackeando el-mundo_exterior_a_traves_de_bluetooth_low-energy_ble_-...Rooted2020 hackeando el-mundo_exterior_a_traves_de_bluetooth_low-energy_ble_-...
Rooted2020 hackeando el-mundo_exterior_a_traves_de_bluetooth_low-energy_ble_-...
 
Rooted2020 evading deep-learning_malware_detectors_-_javier_yuste
Rooted2020 evading deep-learning_malware_detectors_-_javier_yusteRooted2020 evading deep-learning_malware_detectors_-_javier_yuste
Rooted2020 evading deep-learning_malware_detectors_-_javier_yuste
 
Rooted2020 encontrando 0days-en_2020_-_antonio_morales
Rooted2020 encontrando 0days-en_2020_-_antonio_moralesRooted2020 encontrando 0days-en_2020_-_antonio_morales
Rooted2020 encontrando 0days-en_2020_-_antonio_morales
 

Recently uploaded

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 

Recently uploaded (15)

Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptx
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmeril
 

Eduardo Blázquez - Técnicas de Ingeniería Inversa I & II [rooted2018]

  • 2. Reversing, Técnicas de Ingeniería Inversa 2 Who Am I • Eduardo Blázquez (Fare9, F9, el de la foto de Ilonqueen,…) • Graduado en Ingeniería de Computadores por la UAH • Junior Malware Analyst en Panda Security • Con intereses en Reversing, exploiting, análisis de malware y no tan análisis… @Farenain https://f9.29wspy.ru
  • 3. Reversing, Técnicas de Ingeniería Inversa 3 About Me
  • 4. Reversing, Técnicas de Ingeniería Inversa 4 Reversing, una introducción Algo de terminología “La Ingeniería inversa conocida en el mundo anglosajón como reversing. Realización de una ‘contra-elaboración’ de un producto. En nuestro caso, nos referiremos a obtener el código o esquemas de un software compilado”
  • 5. Reversing, Técnicas de Ingeniería Inversa 5 Terminología • Arquitectura de computadores • Lenguaje Ensamblador • Disassemblers • Debuggers • Usos del Reversing (Malware Analysis, Exploiting, “Cracking”…)
  • 6. Reversing, Técnicas de Ingeniería Inversa 6 Arquitectura de Computadores Según Kai Hwang y Fayé Briggs, la arquitectura de computadores “es en realidad, un concepto del sistema que integra hardware, software, algoritmos y lenguajes para realizar grandes cálculos” Según J. L. Baer es “el arte o ciencia de planificar, diseñar, construir y dar tratamiento decorativo a los computadores” Y… blah, blah, blah, blah
  • 7. Reversing, Técnicas de Ingeniería Inversa 7 Arquitectura de Computadores Sólo era una aburrida introducción para poner la arquitectura de Von Neumann.
  • 8. Reversing, Técnicas de Ingeniería Inversa 8 Lenguaje Ensamblador • Nivel más bajo en la cadena del software • “Lenguaje del reversing por excelencia” • Es una clase de lenguaje, no un lenguaje en sí • Es la representación a nivel “humano” del código máquina • Es dependiente de la arquitectura
  • 9. Reversing, Técnicas de Ingeniería Inversa 9 Disassemblers Programas que toman los binarios ejecutables como entrada, y generan textos que contengan el código ensamblador del programa completo o parte. Cada desensamblado es específico de la arquitectura. Son usados en un análisis o reversing estático. Disassemblers más conocidos…
  • 10. Reversing, Técnicas de Ingeniería Inversa 10 Debuggers Programa que permite observar otro programa durante su ejecución. Esto permite ver las trazas, posibles errores, modificaciones del sistema. Todo esto instrucción por instrucción. Existen dos tipos, unos vienen integrados en los IDEs, y debuggers como programas a parte. Debuggers más conocidos…
  • 11. Reversing, Técnicas de Ingeniería Inversa 11 Special Thanks To Duncan Ogilvie (Main x64dbg Developer) and x64dbg community (they are a great community), for let me give this talk and little training with x64dbg. In final training, we will use his debugger with some plugins I’ve installed and packed in zip for students.
  • 12. Reversing, Técnicas de Ingeniería Inversa 12 Usos del reversing • Análisis de malware: para obtener en detalle qué acciones realiza un malware, se analiza el código a bajo nivel. • Exploiting: igual que antes se analiza el código de un programa para buscar vulnerabilidades. • Cracking: no hace falta explicarlo, ¿no?
  • 13. Reversing, Técnicas de Ingeniería Inversa 13 Arquitectura x86-32 • Arquitectura CISC de 32 bits, se trata de una arquitectura Little- Endian. • Opera en dos modos: • Modo Real: según arranca, soporta instrucciones de 16 bits. • Modo Protegido: un modo en el que soporta la paginación, y la memoria virtual.
  • 14. Reversing, Técnicas de Ingeniería Inversa 14 Los anillos de poder: de Ring O a Ring 3 • La arquitectura x86 soporta el concepto de separación de privilegios. • Para ello se usan 4 anillos de privilegio, el Ring 0 (mayor nivel de privilegio) y el Ring 3 (menor nivel de privilegio), Ring 1 y 2 no suelen utilizarse. • Los sistemas operativos suelen implementar el nivel de usuario en el Ring 3 y el nivel de kernel en el Ring 0.
  • 15. Reversing, Técnicas de Ingeniería Inversa 15 Los Registros • Se trata de pequeños montones de memoria disponibles para la CPU de acceso rápido. • Tenemos 4 categorías principales:
  • 16. Reversing, Técnicas de Ingeniería Inversa 16 Los Registros • Estos registros tienen un tamaño de 32 bits, pero algunos de ellos pueden ser divididos en porciones más pequeñas
  • 17. Reversing, Técnicas de Ingeniería Inversa 17 Los Registros • Algunos registros aunque generales, suelen tener unos usos concretos Registro Propósito EAX Acumulador, producto, división… ECX Contador en bucles ESI Fuente en operaciones de cadenas/memoria EDI Destino en operaciones de cadenas/memoria EBP Base de los frames de pila (ya lo veremos) ESP Puntero de la pila (ya lo veremos) EDX Suele utilizarse en productos, divisiones junto con EAX
  • 18. Reversing, Técnicas de Ingeniería Inversa 18 Los Registros • Otros registros interesantes (que no se suelen tratar): • CRX: registros de control. • CR0: Controla la paginación. • CR1,5,6,7: Reservados para la CPU. • CR2: contiene la dirección que provoque un fallo de página. • CR3: guarda la dirección base de la estructura de paginación. • CR4: controla la virtualización. • DRX: usados para establecer breakpoints de hardware. • DR0-DR3: guardan la dirección del breakpoint. • DR4-DR7: usados para status. • Registros específicos del modelo (MSRs): variables según el procesor (AMD e Intel usan diferentes)
  • 19. Reversing, Técnicas de Ingeniería Inversa 19 Sintaxis de Ensamblador • Dependiendo del assembler/disassember usado, hay dos sintaxis diferentes, Intel y AT&T. Intel mov ecx, 40233033h mov ecx, [eax] mov ecx, eax AT&T movl $40233033h, %ecx movl (%eax), %ecx movl %ecx, %eax
  • 20. Reversing, Técnicas de Ingeniería Inversa 20 Set de Instrucciones Moviendo Datos Instrucción MOV En Intel x86 de 32 bits, se permiten los siguientes tipos de movimientos: • Valor Inmediato a registro. mov eax,40h • Registro a registro. mov eax, ebx • Inmediato a memoria. mov [04030201h],33h • Registro a memoria y memoria a registro. mov [04052233h], ebx • Memoria a memoria (con algunas instrucciones) inc dword ptr [04032221h]
  • 21. Reversing, Técnicas de Ingeniería Inversa 21 Set de Instrucciones Acceso a memoria Como se ha visto, se usan los corchetes ([ ]) para el acceso a memoria, los accesos se pueden hacer a byte, word y dword de la siguiente forma: • byte: mov al, byte ptr [<address>] • word: mov ax, word ptr [<address>] • dword: mov eax, dword ptr [<address>] A memoria se puede acceder también a través de registros, por índice, índice y desplazamiento… • mov ebx, [eax] ; acceso a memoria por registro • mov ebx, [eax + 8] ; acceso por desplazamiento • mov ebx, [eax + esi * 4] ; acceso por índice y desplazamiento…
  • 22. Reversing, Técnicas de Ingeniería Inversa 22 Set de Instrucciones LEA eso y LEA lo otro LEA (Load Effective Address) es una instrucción que hace uso de los corchetes, pero en lugar de cargar de memoria, evalúa la expresión entre corchetes, y asigna el valor. (También lo permiten los ensambladores para hacer multiplicaciones). LEA ebx, [ebp + 3] ; Mete en ebx, el valor que tenga ebp + 3 LEA edx, [eax * 5] ; Mete en edx, el valor que tenga eax * 5 movb,movw, movd Mueven un byte, word o double, de una dirección apuntada por ESI, a una dirección apuntada por EDI. LEA esi, [04050607h + 03h]; esi ahora = 0405060Ah LEA edi, [04050600h + 02h]; edi ahora = 04050602h movd; mueve los 4 bytes apuntados por 0405060Ah a la dirección 04050602h
  • 23. Reversing, Técnicas de Ingeniería Inversa 23 Set de Instrucciones Instrucciones Aritméticas • ADD eax, 02h ; eax = eax + 2 • SUB eax, 20h ; eax = eax – 20h • inc eax; eax = eax + 1 • dec eax; eax = eax – 1 Instrucciones Lógicas • AND eax, 00000100h ; operación AND ( 1 cuando ambos están a 1) • OR eax, FFFFFFFFh ; operación OR ( 1 cuando al menos uno está a 1) • XOR eax,eax ; operación XOR (1 exclusivo 1-0 o 0-1) • NOT eax; da la vuelta a todos los bits (Complemento a 1) • SHL/SHL eax,<numero/cl> ; desplaza bits a izq. o der. n veces • ROL/ROR eax,<numero/cl> ; rota bits a izq. o der. n veces
  • 24. Reversing, Técnicas de Ingeniería Inversa 24 Set de Instrucciones Multiplicación • MUL <reg/mem> ; multiplica por al,ax o eax y guarda en ax, dx:ax o edx:eax • IMUL <reg/mem> ; multiplica por al,ax o eax y guarda en ax, dx:ax o edx:eax • IMUL <reg1>,<reg2/mem>; reg1 = reg1 * reg2/mem • IMUL <reg1>,<reg2/mem>,<numero>; reg1 = reg2/mem * numero División • DIV <reg/mem> ; divide edx:eax o dx:ax o ax entre valor dado, y guarda resultado en eax o ax o al, y resto en edx o dx o ah. • IDIV <reg/mem> ; divide edx:eax o eax o ax entre valor dado, y guarda resultado en eax o ax o al, y resto en edx o dx o ah.
  • 25. Reversing, Técnicas de Ingeniería Inversa 25 Push y Pop, la hora de la Stack La Pila o Stack Se trata de una zona de memoria la cual empieza en zonas altas de memoria, y crece hacia las zonas bajas. Se trata de una estructura LIFO. Para saber la dirección del stack se revisa el registro ESP. Se usa en conjunto de EBP para quedar “frames”. La stack se usa en los programas para: pasar parámetros a las funciones, variables locales, guardar el estado del procesador en un momento dado…
  • 26. Reversing, Técnicas de Ingeniería Inversa 26 Push y Pop, la hora de la Stack Antes de nada y para poder entenderlo todo, vamos a ver las funciones para meter y sacar valores de la stack. Recordemos habría que meter 4 bytes (32 bits). Meter valores en la stack: push <reg/mem/inmediato> Esto es igual que: sub esp,4 mov [esp],<reg/mem/inmediato> pop <reg/mem> Esto es igual que: mov <reg/mem>,[esp] add esp,4
  • 27. Reversing, Técnicas de Ingeniería Inversa 27 Push y Pop, la hora de la Stack En programación, se utilizan las funciones para evitar la repetición de código, pero el programa debe saber a dónde volver tras acabar la función. Estas funciones normalmente suelen tener parámetros, los cuales son pasados por la pila. Luego se realiza una llamada a la función (CALL) Al entrar a una función, se introduce la dirección de retorno y se crea un pequeño “frame” o “marco”, para que la función tenga “su propia pila”. Entonces se reserva espacio para variables locales. Finalmente, se “libera” el pequeño frame de la pila, se recupera el valor de retorno para ir, y se “liberan” los parámetros. (RET)
  • 28. Reversing, Técnicas de Ingeniería Inversa 28 Push y Pop, la hora de la Stack int suma(int a,int b) { int valor; valor = a + b; return valor; } suma(1,2) proc suma push ebp mov ebp,esp sub esp,4 mov eax, [ebp + 8] mov ebx, [ebp + C] mov [esp],ebx add [esp], eax mov eax, [esp] mov esp,ebp pop ebp ret 8 endp push 2 push 1 call suma
  • 29. Reversing, Técnicas de Ingeniería Inversa 29 Push y Pop, la hora de la Stack Convenciones de llamada Son “normas” que índican cómo se pasan los parámetros a una función (primero los de la derecha o primero los de la izquierda), y cómo se limpian los parámetros de la pila (si tiene que limpiarla el método que llama a una función, o el método llamado). CDECL STDCALL proc suma push ebp mov ebp,esp sub esp,4 mov eax, [ebp + 8] mov ebx, [ebp + C] mov [esp],ebx add [esp], eax mov eax, [esp] mov esp,ebp pop ebp ret 8 endp push 2 push 1 call suma add esp,8 push 2 push 1 call suma proc suma push ebp mov ebp,esp sub esp,4 mov eax, [ebp + 8] mov ebx, [ebp + C] mov [esp],ebx add [esp], eax mov eax, [esp] mov esp,ebp pop ebp ret endp
  • 30. Reversing, Técnicas de Ingeniería Inversa 30 Saltos In/Condicionales Para cambiar el flujo de ejecución de un programa, se utilizan los saltos. Estos nos permiten dirigir la ejecución del programa. Dos tipos de salto: • Incondicionales: siempre se toman (Instrucción JMP) • Condicionales: se toman dependiendo de una condición (Instrucciones Jcc) Antes ya vimos un tipo de salto incondicional con la instrucción CALL. Los saltos condicionales, dependen de valores dentro de un registro conocido como “EFLAGS”.
  • 31. Reversing, Técnicas de Ingeniería Inversa 31 EFLAGS Los valores de estos EFLAGS son modificados después de instrucciones como las aritmetico-lógicas. Ya que indican ciertas situaciones de interés que se han podido dar. Los valores de los EFLAGS al ser bits serán sólo ‘0’ o ‘1’. Para establecer estos valores, se suelen utilizar unas instrucciones llamadas de “comparación”. Estas son: • CMP: compara dos números restando uno con otro, pero sin guardar el resultado en ningún registro. • TEST: realiza una operación lógica AND, igualmente sin guardar el resultado en ningún registro. Tras esto se pueden establecer los siguientes flags: • zero flag(zf): el resultado dio 0 • carry flag(cf): el resultado dio un acarreo (overflow números sin signo). • sign flag(sf): el resultado es negativo. • Overflow flag(of): números con signo que desbordan su máximo.
  • 32. Reversing, Técnicas de Ingeniería Inversa 32 Saltos Condicionales Por tanto, los saltos condicionales revisarán los valores de estos EFLAGS. Vamos a ver una tabla que explique los saltos más típicos: Salto condicional Descripción EFLAGS Implicados JB/JNAE Salta si por debajo, o no mayor ni igual, números sin signo. CF = 1 JNB/JAE No por debajo, por encima o igual, sin signo. CF = 0 JE/JZ Igual o cero. ZF = 1 JNE/JNZ No igual, no cero. ZF = 0 JL Menor qué, números con signo. (SF ^ OV) = 1 JGE/JNL Mayor o igual, no menor que, números con signo. (SF ^ OV) = 0 JG/JNLE Mayor, no menor o igual que, números con signo. ((SF ^ OV)|ZF) = 0
  • 33. Reversing, Técnicas de Ingeniería Inversa 33 Sigamos con la teoría
  • 34. Reversing, Técnicas de Ingeniería Inversa 34 Ejecutables de Windows Archivos PE Se conoce así a los ejecutables de Windows, PE (Portable Executable). Este se usa en archivos ejecutables, código objeto y DLLs. Se trata de una estructura con la información necesaria para que el cargador del sistema, pueda arrancar una aplicación. Esta estructura cuenta con una cabecera, con información valiosa (por ejemplo en el análisis de malware), tenemos por ejemplo: librerías y funciones enlazadas, funciones importadas, funciones exportadas (en las DLLs)…
  • 35. Reversing, Técnicas de Ingeniería Inversa 35 Ejecutables de Windows Secciones de un archivo PE • .text: sección que contiene las instrucciones que la CPU ejecuta. • .rdata: contiene información de importaciones y exportaciones. Esta sección también puede guardar información de sólo lectura. Suele dividirse en .idata (importaciones) y .edata (exportaciones). • .data: contiene los datos globales del programa. • .rsrc: contiene los recursos usados por el ejecutable.
  • 36. Reversing, Técnicas de Ingeniería Inversa 36 Que continúe la teoría
  • 37. Reversing, Técnicas de Ingeniería Inversa 37 Empieza el CRACKME
  • 38. Reversing, Técnicas de Ingeniería Inversa 38 Bibliografía (I)
  • 39. Reversing, Técnicas de Ingeniería Inversa 39 Bibliografía (II)
  • 40. Reversing, Técnicas de Ingeniería Inversa 40
  • 41. Reversing, Técnicas de Ingeniería Inversa 41
  • 42. Reversing, Técnicas de Ingeniería Inversa 42 DOMO ARIGATO MR ROBOTO
  • 43. Reversing, Técnicas de Ingeniería Inversa 43 @Farenain https://f9.29wspy.ru f9@29wspy.ru