Workshop reversing

  • Published on
    23-Jun-2015

  • View
    1.016

  • Download
    0

Embed Size (px)

DESCRIPTION

Workshop about reversing ;) Presented at BugCON 2012 and ENLi 2012

Transcript

<ul><li> 1. Workshop: Reverse engineering Carlos A. Lozano Vargas augusto@bluemammut.com</li></ul> <p> 2. Quienes somos y qu hacemos?Empresa altamente especializada en el desarrollo,implementacin y aseguramiento de tecnologas deinformacin.Anlisis de vulnerabilidadesPruebas de penetracin internas yexternas.Revisin de aplicaciones (black box/whitebox/cristal box)Revisin de aplicaciones mviles (iPhone/Android/BB)PIADesarrollo Web / mvil 3. Qu es la ingeniera inversa?Es el proceso de extraer informacin o pistas sobre eldiseo de algo hecho por el hombre- Eldad Eilam 4. Bsicos de microprocesadoresEncargado de realizar los clculos de los equipos decmputo. ok, ok... mejor lean Wikipedia ;) 5. Evolucin de microprocesadores Intel Tipo de procesador Carcteristicas Registros de 16 bits, 1 MB de 63 KB de8088, 8086 segmentos de memoriaModo protegido de 16 bits, 16 MB de 64KB de80286 segmentos de memoria. Nuevas instruccionesaadidas a 8088, 8086Registros de 32 bits. Modo protegido de 3280386 bits. 4GB de memoria direccionableMuchas versiones: 486, Pentium, Xenon,80x86 velocidad de procesamiento aumentadaItaniumProcesador de 64 bits 6. RegistrosSecciones de memoria que se usan internamente enel procesador para almacenar informacin. 7. Categoras de registrosCategora Nombre Propsito EAX, EBX, ECX, EDX, AX, Utilizados para manipular Registros generalesBX, CX, DX, AH, BH, CH, DH, datosAL, BL, CL, DL Punteros en el cdigo, laRegistros deCS, SS, DS, ES, FS, GSpila y segmentos de datos segmentosadicionalesIndica el desplazamiento deRegistros deEBP, ESI, EDI, ESP la memoria durante la desplazamientoejecucin de un programa Usados por el CPU para Registros especialesZF, IF, SF, EIPregistrar los resultados delas operaciones 8. Lenguaje ensambladorLenguaje de programacin de bajo nivel. Al hacer elreversing, en el mejor de los casos, ser el lenguaje deprogramacin que veremos. 9. AT&amp;T vs NASMAT&amp;T NASM CMD , # CMD , ; comentario%eaxeax$0x800x80 10. Instrucciones bsicas de ASM (1) Sintaxis NASMEjemplo NASMEjemplo AT&amp;T mov ,mov eax, 51h mov $51h, %eax add ,add eax, 51h addl $51h, %eax sub ,sub eax, 51h sub $51h, %eaxpush push eaxpush %eax pop pop eaxpopl %eax xor ,xor eax, eax xor %eax,%eax 11. Instrucciones bsicas de ASM (2)Sintaxis NASM Ejemplo NASM Ejemplo AT&amp;T jnz / jne jne inicio jne iniciojz / je jz bucle jz buclejmp jmp finjmp fincall call subrutina1call subrutina1retretretinc inc eax inc %eax 12. Instrucciones bsicas de ASM (3) Sintaxis NASM Ejemplo NASMEjemplo AT&amp;Tdec dec eax dec %eaxlea , lea eax,[dsi+4] leal 4(%dsi),%eax int int 0x80int $0x80 13. Modos de asignacin (1) Modo de asignacinDescripcin EjemploLos registros guardan la informacin que se ha de Registro manipular. No hay interaccinmov ebx, edxcon la memoria. Ambos registros han de tener el mismo tamao. El operando de origen es un valor numrico. SeInmediato mov eax, 1234hasume el valor decimal. Se utiliza h para hex El primer operando es la direccin de memoria que Directomov [4321h], eax se ha de manipular. Estmarcada con corchetes 14. Modos de asignacin (2) Modo de asignacin Descripcin Ejemplo El primer operando es unregistro entre corchetes Registro indirectomov [di], ecxque guarda la direccin quese ha de manipularLa direccin efectiva que se ha de manipular se calcula Relativo de basemov edx, 20[ebx] utilizando ebx o ebp comovalor de desplazamiento El mismo que Relativo debase, pero se hace uso de Relativo indexado mov ecx, 20[esi]EDI y ESI para mantener eldesplazamiento 15. Modos de asignacin (3) Modo de asignacinDescripcinEjemplo La direccin efectiva seencuentra combinando losRelativo indexado de base mov eax, [bx][si]+1 mtodos de base e indexado 16. Bsicos de GDB (1) ComandoDescripcinb funcinConfigura un breakpoint en una funcin Configura un breakpoint en una direccin b *mem de memoria Muestra informacin sobre los puntos deinfo b interrupcin delete b Elimina un breakpoint Ejecuta el programa con los argumentosrun dadosMuestra informacin acerca del estado info reg del registro 17. Bsicos de GDB (2)ComandoDescripcin stepi / si Ejecuta una instruccin mquina next / nEjecuta una funcinComando de retroceso que muestra los btnombres de los stack framesSe desplaza hacia arriba y hacia abajoup / down por los stack frames Imprime una variable / Imprime unprint var / print $ registro Examina la memoria en la que N=nmero de unidadesa mostrar, T=tipo de datos a motrar (x:hexs, d:dec, x /NT Ac:car, s:cadena, i:instruccin), A=direccin absoluta o nombre simbollico como principal 18. Bsicos de GDB (3) ComandoDescripcin Examina la memoria en la que N=nmero de unidades a mostrar, T=tipo de datos ax /NT Amotrar (x:hexs, d:dec, c:car, s:cadena, i:instruccin), A=direccin absoluta onombre simbollico como principal quit Aloh! 19. OllyBDG 20. Immunity DBG 21. IDA Pro 22. Hello world! 0x08048414 :push %ebp 0x08048415 :mov%esp,%ebp 0x08048417 :and$0xfffffff0,%esp 0x0804841a :sub$0x10,%esp 0x0804841d :movl $0x8048500,(%esp) 0x08048424 : call 0x804833c 0x08048429 : movl $0x0,(%esp) 0x08048430 : call 0x804834c 23. exit()0x080483e4 :push %ebp0x080483e5 :mov%esp,%ebp0x080483e7 :and$0xfffffff0,%esp0x080483ea :sub$0x10,%esp0x080483ed :movl $0x0,(%esp)0x080483f4 : call 0x8048318 24. if() 0x080483e4 :push %ebp 0x080483e5 :mov%esp,%ebp 0x080483e7 :and$0xfffffff0,%esp 0x080483ea :sub$0x20,%esp 0x080483ed :movl $0x0,0x1c(%esp) 0x080483f5 : cmpl $0x0,0x1c(%esp) 0x080483fa : jne0x804840a 0x080483fc : movl $0x80484f0,(%esp) 0x08048403 : call 0x8048318 0x08048408 : jmp0x804842b 0x0804840a : cmpl $0x1,0x1c(%esp) 0x0804840f : jne0x804841f 0x08048411 : movl $0x80484fa,(%esp) 0x08048418 : call 0x8048318 0x0804841d : jmp0x804842b 0x0804841f : movl $0x8048503,(%esp) 0x08048426 : call 0x8048318 0x0804842b : leave 0x0804842c : ret 25. for()0x080483e4 :push %ebp0x080483e5 :mov%esp,%ebp0x080483e7 :and$0xfffffff0,%esp0x080483ea :sub$0x20,%esp0x080483ed :movl $0x0,0x1c(%esp)0x080483f5 : jmp0x8048411 0x080483f7 : mov$0x80484e0,%eax0x080483fc : mov0x1c(%esp),%edx0x08048400 : mov%edx,0x4(%esp)0x08048404 : mov%eax,(%esp)0x08048407 : call 0x804831c 0x0804840c : addl $0x1,0x1c(%esp)0x08048411 : cmpl $0xa,0x1c(%esp)0x08048416 : jle0x80483f7 0x08048418 : leave0x08048419 : ret 26. while()0x080483e4 :push %ebp0x080483e5 :mov%esp,%ebp0x080483e7 :and$0xfffffff0,%esp0x080483ea :sub$0x20,%esp0x080483ed :movl $0x0,0x1c(%esp)0x080483f5 : jmp0x8048411 0x080483f7 : mov$0x80484e0,%eax0x080483fc : mov0x1c(%esp),%edx0x08048400 : mov%edx,0x4(%esp)0x08048404 : mov%eax,(%esp)0x08048407 : call 0x804831c 0x0804840c : addl $0x1,0x1c(%esp)0x08048411 : cmpl $0xa,0x1c(%esp)0x08048416 : jle0x80483f7 0x08048418 : leave0x08048419 : ret 27. meet.c - main(1) 0x080484e6 :push %ebp 0x080484e7 :mov%esp,%ebp 0x080484e9 :and$0xfffffff0,%esp 0x080484ec :sub$0x10,%esp 0x080484ef :mov0xc(%ebp),%eax 0x080484f2 : add$0x8,%eax 0x080484f5 : mov(%eax),%edx 0x080484f7 : mov0xc(%ebp),%eax 0x080484fa : add$0x4,%eax 0x080484fd : mov(%eax),%eax 0x080484ff : mov%edx,0x4(%esp) 0x08048503 : mov%eax,(%esp) 0x08048506 : call 0x8048474 28. meet.c - main(2) 0x0804850b : mov 0xc(%ebp),%eax 0x0804850e : add $0x8,%eax 0x08048511 : mov (%eax),%ecx 0x08048513 : mov 0xc(%ebp),%eax 0x08048516 : add $0x4,%eax 0x08048519 : mov (%eax),%edx 0x0804851b : mov $0x804860c,%eax 0x08048520 : mov %ecx,0x8(%esp) 0x08048524 : mov %edx,0x4(%esp) 0x08048528 : mov %eax,(%esp) 0x0804852b : call0x8048398 0x08048530 : leave 0x08048531 : ret 29. meet.c - greeting(1) 0x08048474 :push %ebp 0x08048475 :mov%esp,%ebp 0x08048477 :sub$0x1c8,%esp 0x0804847d :mov0x8(%ebp),%eax 0x08048480 : mov%eax,-0x1ac(%ebp) 0x08048486 : mov0xc(%ebp),%eax 0x08048489 : mov%eax,-0x1b0(%ebp) 0x0804848f : mov%gs:0x14,%eax 0x08048495 : mov%eax,-0xc(%ebp) 0x08048498 : xor%eax,%eax 0x0804849a : mov-0x1b0(%ebp),%eax 0x080484a0 : mov%eax,0x4(%esp) 0x080484a4 : lea-0x19c(%ebp),%eax 0x080484aa : mov%eax,(%esp) 0x080484ad : call 0x8048388 30. meet.c - greeting(2) 0x080484b2 :mov $0x8048600,%eax 0x080484b7 :lea -0x19c(%ebp),%edx 0x080484bd :mov %edx,0x8(%esp) 0x080484c1 :mov -0x1ac(%ebp),%edx 0x080484c7 :mov %edx,0x4(%esp) 0x080484cb :mov %eax,(%esp) 0x080484ce :call0x8048398 0x080484d3 :mov -0xc(%ebp),%edx 0x080484d6 :xor %gs:0x14,%edx 0x080484dd : je0x80484e4 0x080484df : call0x80483a8 0x080484e4 : leave 0x080484e5 : ret 31. Ingeniera en reversa en C# 32. Ingeniera en reversa en Java 33. Dnde aprender?Programming from the ground upJonathan BartleetReversing: secrets of reverse engineeringEldan EilamTutorial de crackingRicardo Narvaja</p>