2. ¿Quienes somos y qué hacemos?
Empresa altamente especializada en el desarrollo,
implementación y aseguramiento de tecnologías de
información.
Análisis de vulnerabilidades
Pruebas de penetración internas y
externas.
Revisión de aplicaciones (black box/white
box/cristal box)
Revisión de aplicaciones móviles (iPhone/
Android/BB)
PIA
Desarrollo Web / móvil
3. ¿Qué es la ingeniería inversa?
“Es el proceso de extraer información o pistas sobre el
diseño de algo hecho por el hombre”
- Eldad Eilam
5. Evolución de microprocesadores Intel
Tipo de procesador Carácteristicas
Registros de 16 bits, 1 MB de 63 KB de
8088, 8086 segmentos de memoria
Modo protegido de 16 bits, 16 MB de 64KB de
80286 segmentos de memoria. Nuevas instrucciones
añadidas a 8088, 8086
Registros de 32 bits. Modo protegido de 32
80386 bits. 4GB de memoria direccionable
Muchas versiones: 486, Pentium, Xenon,
80x86 velocidad de procesamiento aumentada
Itanium Procesador de 64 bits
7. Categorías de registros
Categoría Nombre Propósito
EAX, EBX, ECX, EDX, AX,
Utilizados para manipular
Registros generales BX, CX, DX, AH, BH, CH, DH,
datos
AL, BL, CL, DL
Punteros en el código, la
Registros de
CS, SS, DS, ES, FS, GS pila y segmentos de datos
segmentos adicionales
Indica el desplazamiento de
Registros de
EBP, ESI, EDI, ESP la memoria durante la
desplazamiento ejecución de un programa
Usados por el CPU para
Registros especiales ZF, IF, SF, EIP registrar los resultados de
las operaciones
8. Lenguaje ensamblador
Lenguaje de programación de bajo nivel. Al hacer el
reversing, en el mejor de los casos, será el lenguaje de
programación que veremos.
10. Instrucciones básicas de ASM (1)
Sintaxis NASM Ejemplo NASM Ejemplo AT&T
mov <destino>,<origen> mov eax, 51h mov $51h, %eax
add <destino>,<origen> add eax, 51h addl $51h, %eax
sub <destino>,<origen> sub eax, 51h sub $51h, %eax
push <valor> push eax push %eax
pop <destino> pop eax popl %eax
xor <destino>,<origen> xor eax, eax xor %eax,%eax
11. Instrucciones básicas de ASM (2)
Sintaxis NASM Ejemplo NASM Ejemplo AT&T
jnz <destino> / jne
jne inicio jne inicio
<destino>
jz <destino> / je <destino> jz bucle jz bucle
jmp <destino> jmp fin jmp fin
call <destino> call subrutina1 call subrutina1
ret ret ret
inc <destino> inc eax inc %eax
12. Instrucciones básicas de ASM (3)
Sintaxis NASM Ejemplo NASM Ejemplo AT&T
dec <destino> dec eax dec %eax
lea <destino>,<origen> lea eax,[dsi+4] leal 4(%dsi),%eax
int <valor> int 0x80 int $0x80
13. Modos de asignación (1)
Modo de asignación Descripción Ejemplo
Los registros guardan la
información que se ha de
Registro manipular. No hay interacción mov ebx, edx
con la memoria. Ambos registros
han de tener el mismo tamaño.
El operando de origen es
un valor numérico. Se
Inmediato mov eax, 1234h
asume el valor decimal. Se
utiliza h para hex
El primer operando es la
dirección de memoria que
Directo mov [4321h], eax
se ha de manipular. Está
marcada con corchetes
14. Modos de asignación (2)
Modo de asignación Descripción Ejemplo
El primer operando es un
registro entre corchetes
Registro indirecto mov [di], ecx
que guarda la dirección que
se ha de manipular
La dirección efectiva que se
ha de manipular se calcula
Relativo de base mov edx, 20[ebx]
utilizando ebx o ebp como
valor de desplazamiento
El mismo que Relativo de
base, pero se hace uso de
Relativo indexado mov ecx, 20[esi]
EDI y ESI para mantener el
desplazamiento
15. Modos de asignación (3)
Modo de asignación Descripción Ejemplo
La dirección efectiva se
encuentra combinando los
Relativo indexado de base mov eax, [bx][si]+1
métodos de base e
indexado
16. Básicos de GDB (1)
Comando Descripción
b función Configura un breakpoint en una función
Configura un breakpoint en una dirección
b *mem
de memoria
Muestra información sobre los puntos de
info b
interrupción
delete b Elimina un breakpoint
Ejecuta el programa con los argumentos
run <args>
dados
Muestra información acerca del estado
info reg
del registro
17. Básicos de GDB (2)
Comando Descripción
stepi / si Ejecuta una instrucción máquina
next / n Ejecuta una función
Comando de retroceso que muestra los
bt
nombres de los stack frames
Se desplaza hacia arriba y hacia abajo
up / down
por los stack frames
Imprime una variable / Imprime un
print var / print $<reg>
registro
Examina la memoria en la que N=número de unidades
a mostrar, T=tipo de datos a motrar (x:hexs, d:dec,
x /NT A c:car, s:cadena, i:instrucción), A=dirección absoluta o
nombre simbollico como principal
18. Básicos de GDB (3)
Comando Descripción
Examina la memoria en la que N=número
de unidades a mostrar, T=tipo de datos a
x /NT A motrar (x:hexs, d:dec, c:car, s:cadena,
i:instrucción), A=dirección absoluta o
nombre simbollico como principal
quit ¡Alohá!
33. ¿Dónde aprender?
Programming from the ground up
Jonathan Bartleet
Reversing: secrets of reverse engineering
Eldan Eilam
Tutorial de cracking
Ricardo Narvaja