Pwneando Ensamblador (Con Ejemplos)
Pwneando Ensamblador (Con Ejemplos)
Pwneando Ensamblador (Con Ejemplos)
Contacto: chr1x@resrever.net
1
Agradecimientos
Quiero dar las gracias principalmente a Ricardo Narvaja que aunque no tengo el gusto de
conocerlo fue mi inspiracin para realizar este e-Book. Son ese tipo de personas que regala
todo su conocimiento sin esperar nada a cambio.
De igual modo quiero agradecer a la Mexican g4ng-bang, a mis grandes amigos desde hace
ya muchos aos con los cuales he pasado muy buenos momentos a su lado, buenos, malos,
pero siempre juntos, y ellas son (por orden alfabtico, para no herir sentimientos XD)
Lilith
alt3kx
b0rr3x
b3ck
calderpwn
chipx0r
ch0ks
Carlos Ayala
Daemon
Dex
Despise
hkm
hecky
nitr0us
NataShell666
preth00nker
r1lx0r
Raito
Gracias!
2
Contenido
Introduccin ........................................................................................................................4
Por qu aprender Ensamblador?......................................................................................4
Por qu Ensamblador e Ingeniera Inversa de Cdigo (RCE)?..............................................4
Temas y Objetivo..............................................................................................................6
Notas finales ....................................................................................................................6
Requerimientos....................................................................................................................7
Instalacin de MASM32 ........................................................................................................7
Instalacin y Configuracin de WinAsm Studio .......................................................................8
Comprobacin de funcionamiento: WinAsm Studio y MASM32...............................................9
Instalacin de Visual C++ 2005 Express ................................................................................11
Instalacin de Cygwin (Compilador gcc) ...............................................................................12
Instalacin y Configuracin de OllyDBG ...............................................................................14
Instalacin de IDA Freeware................................................................................................17
Importancia del dominio de las Herramientas ......................................................................19
Conociendo la interfaz y funcionamiento de OllyDbg ............................................................19
Conociendo la interfaz y funcionamiento de IDA Dissassembler ............................................37
Estructura de un Programa en Ensamblador ........................................................................50
Entendiendo los Registros del CPU ......................................................................................52
Aprendiendo el Set de Instrucciones x86..............................................................................52
La instruccin - INC.............................................................................................................52
3
Introduccin
Como dira mi hermano @r1lx0r... Endlzame el odo y convnceme de utilizar
Ensamblador. Bien, pues aqu va mi sp33ch!
Como muchos ya lo saben y para los que apenas se enteran, este es un nuevo proyecto
el cual he querido realizar desde hace ya hace bastante tiempo y heme aqu, tomando
una copa de vino tinto chileno escuchando mi cancin favorita de Hall & Oates Out
of touch y decidido a escribir el inicio de esta historia. Hehe, en fin, aqu vamos
En mi caso, buscando algn rea que pudiera considerar como un real challenge
algo que sobresaliera de las dems reas en el cual todos son expertos. Sabemos que
cualquiera pueda explotar un SQL Injection, descargar y compilar exploits, Defacear un
sitio Web o utilizar Frameworks de explotacin, pero pocos pueden
entender/programar en Ensamblador y muy pocos pueden realizar Ingeniera Inversa.
Aqu la diferencia.
4
Hoy da he llegado a la conclusin de buscar dicha especializacin, es por eso que me
he decidido el enfocar mi carrera profesional al estudio y al mastering del arte del
RCE.
Cracking Estoy seguro les suena conocido. Como sabrn de igual modo se requiere
conocimiento de lenguaje Ensamblador para poder meterse a esta actividad y
probablemente un poco acerca de otros lenguajes, por aquello de crear algn Keygen
o alguna herramientilla por ah. La ventaja del Cracking es que existen an material no
tan anticuado el cual tocan temas acerca de cmo auto-entrenarse utilizando
programas Crackme. Cmo entra en accin Ensamblador en esta rea? Sencillo. Si
en algn momento te has bajado un Tuto de cracking, supongo que te suena familiar el
nombre de la herramienta Ollydbg, pues bueno, para utilizarla necesitas saber
Ensamblador, por lo menos lo bsico, sin embargo, si estas tomando este asunto
enserio entonces debers de incrementar tu conocimiento en Ensamblador al mximo
nivel. Siempre es divertido estar jugando en el Lado oscuro de la fuerza, sin embargo
existen grandes riesgos con la cuestin de crackear software comercial por lo que hay
que irse con cuidado con este tema.
5
Actividades que van desde el reversing de Software as como el de la realizacin de
exploits para aprovecharse de dichas vulnerabilidades. Si lo que estas buscando es una
carrera formal en RCE, encontrar vulnerabilidades 0-day en Software de alto perfil y
probablemente ser entrevistado en algunas revistas, definitivamente tienes que
dominar Ensamblador como primer prioridad.
Como se habrn dado cuenta, Ensamblador es una pieza esencial para la rea lizacin de
este tipo de actividades, afortunadamente todas las herramientas pueden ser
utilizadas y combinadas- acorde a tu necesidad. Por ejemplo; podras utilizar OllyDBG
para realizar un anlisis dinmico de tus muestras de malware, si ests dispues to a
tomar el reto de resolver un Crackme o en su caso utilizarlo para analizar un software
en busca de vulnerabilidades. As que si te especializas en una herramienta, estars
matando dos pjaros de un tiro o ms.
Temas y Objetivo
Esta es una pregunta interesante. Planeo cubrir temas relacionados a RCE,
Ensamblador x86/IA32 (principalmente) en plataforma Windows (Win32), Linux
(POSIX) y algunas otras arquitecturas, y muchas cosas ms. Sin embargo, conforme
vayamos avanzando es como iremos cubriendo dichos temas.
Notas finales
No me considero ni creo ser un experto en el tema, por lo cual el contenido de esta
serie de posts podran contener algunos errores por lo cual cualquier sugerencia es
bienvenida. Para las crticas no-constructivas, ahrrense su tiempo. Como dicen... Si no
ayudas no estorbes. Sin ofender.
Quiero agradecer de antemano a todos aquellos amigos con los que hemos pasado
grandes momentos desde hace ya muchsimos aos.
Para concluir con esta entrada me gustara dejar unas palabras de +ORC...
6
Antes que nada, asumo que ustedes
1. No tienen problema con el idioma Ingls Esto es esencial ya que *casi* toda
la informacin disponible se encuentra en este idioma.
2. Manejo y entendimiento bsico de programacin con ANSI C/C++ o algn otro
lenguaje de Alto nivel, as como el uso de sus respectivos compiladores.
3. Tienen experiencia trabajando con Mquinas Virtuales Requeriremos de un
entorno virtual para poder trabajar durante todas las sesiones.
Requerimientos
Hasta este momento deben contar con lo siguiente:
1. Mquina virtual con Windows XP (de preferencia sin Service Pack). No importa
si utilizan VMWare o VirtualBox. En lo personal recomiendo VirtualBox ya que
como saben es gratuito y se evitan problemas futuros con respecto a
actualizaciones y similares.
2. Haber descargado el Software que se encuentra en la siguiente direccin:
http://www.resrever.net/p/software.html . OJO: Solamente descargado (no
instalarlo). Hay algunas adecuaciones que tendremos que realizar a la
configuracin del software para que puedan interactuar entre ellos sin ningn
problema. El proceso de instalacin/configuracin, dependiendo el caso los
estaremos cubriendo en las siguientes secciones.
Instalacin de MASM32
Amonos Rickys! Es hora de instalar el corazn de todo este asunto de
Ensamblador y me refiero al Compilador y Linker los cuales nos permitirn
convertir nuestro cdigo en Ensamblador a un hermoso archivo ejecutable.
Pasos a seguir:
7
Instalacin y Configuracin de WinAsm Studio
Para poder generar nuestro cdigo en ensamblador vamos a requerir de un IDE. El
IDE que eleg para trabajar es WinAsm Studio y prcticamente cuenta con una
Interfaz muy accesible e intuitiva. Una de las mejores caractersticas de este
software es que ya est configurado para trabajar con MASM32 (Compilador y
Linker) y de igual modo ya tiene una integracin con OllyDbg el cual nos ser de
gran utilidad en las prcticas posteriores.
Pasos a seguir:
Como nota adicional. Recuerden que deben respetar los paths de las herramientas y
no crear folders especiales para de este modo no experimentemos algn problema
despus.
8
Comprobacin de funcionamiento: WinAsm Studio y MASM32
Perfecto! Hasta este momento tenemos el Compilador, Linker y nuestro IDE instalados. Ahora,
probemos que no hay ningn problema y generemos un pequeo programa de prueba.
Pasos a seguir:
9
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
.data
MsgBoxCaption db "Resrever.Net",0
MsgBoxText db "Ensamblador r0x!",0
.code
start:
invoke MessageBox, NULL, addr MsgBoxText, addr MsgBoxCaption,
MB_OK
invoke ExitProcess, NULL
end start
4. Den click en el men: File => Save Project As y les pedir que asignen un nombre al
proyecto. Pueden utilizar el mismo nombre del proyecto para su programa.
5. Ahora vayan al men: Make => Go All o la combinacin de teclas: Shift + F8 para
compilar y linkear el cdigo ensamblador. Posterior a esta accin aparecer de
forma automtica la siguiente ventana:
10
Nice, eso quiere decir que nuestra instalacin de WinAsm Studio y MASM32
est trabajando a la perfeccin. Si a este momento a ustedes no les apareci la
pantalla anterior, verifiquen que paso omitieron.
Se preguntarn en este momento que significa todo ese cdigo que pegamos
en WinAsm Studio, pues bien, no se preocupen ya que explicaremos la funcin
de cada uno y de igual manera agregar ligas a sitios en donde profundizan en
la estructura del programa, opciones de configuracin y dems. El objetivo de
este paso fue bsicamente verificar que todo este correcto y en perfecto orden.
11
Pasos a seguir:
Pasos a seguir:
12
5. Al finalizar, nos presentar una pantalla preguntando si queremos generar
los iconos de acceso directo, dejamos seleccionadas dichas opciones y
finalizamos la instalacin.
6. Veremos que en el Escritorio ya tenemos el acceso directo a Cygwin y
accedemos a l.
13
Instalacin y Configuracin de OllyDBG
OllyDbg es una herramienta De facto en la cuestin de debuggear aplicaciones y
hay muchas reas que hacen uso de ella. Por ejemplo; los analistas de Malware las
utilizan para realizar un anlisis dinmico de sus muestras (samples). Los crackers
lo utilizan para identificar los puntos de entrada de datos (inputs) o para analizar
o tratar de identificar- los algoritmos utilizados para la proteccin de un software...
los security researchers quienes de igual modo lo utilizan para identificar el punto
de quiebre de un software y de este modo determinar el fault que les permitir
de algn modo controlar dicho comportamiento y convertirlo posteriormente en
una vulnerabilidad explotable. Interesante no? Bueno, OllyDbg es nuestro mejor
amigo desde este momento.
Pasos a seguir:
14
6. Den click en el menu: Options => Add to Explorer.
15
Esta accin permitir agregar al Explorador de Windows agregar un men para
que podamos abrir cualquier ejecutable utilizando el debugger.
En la pestaa CPU habiliten las opciones tal como son mostradas con el
marcador amarillo en la imagen.
16
Esta accin permitir a OllyDbg mostrarnos la ruta de los llamados utilizando
los CALLS de ensamblador, lo cual nos permitir trazar los saltos en el
cdigo.
Pasos a seguir:
Existen excelentes tutoriales y libros acerca del uso de la interfaz de IDA Pro, de
OllyDbg y prcticamente de todo el software que estaremos utilizando. Pueden
encontrar dichos recursos en el apartado Referencias en mi sitio web.
17
Les sugiero que visiten la seccin antes mencionada ya que siempre es bueno de cierto
modo dominar la interfaz de las herramientas que estemos usando, esto nos
permitir una mayor flexibilidad y facilidad de acceso a ciertas funcionalidades del
programa mientras nos encontremos manipulando archivos ejecutables.
Hasta este momento ya tenemos los componentes necesarios para irnos con todo a
aprender Ensamblador, recapitulemos:
1. WinAsm LISTO
2. MASM32 LISTO
3. Visual C++ 2005 LISTO
4. Cygwin LISTO
5. OllyDbg LISTO
6. IDA Freeware LISTO
7. Fuerza y Ganas LISTAS! ;)
Y bien... Seores pasajeros, sean tan amables de abrocharse sus cinturones que ya
estamos por empezar lo bueno. Hehehe.
18
Importancia del dominio de las Herramientas
Para poder llegar a ser experto en un rea en especfico debers dominar las
herramientas, es por ello que como ya hemos mencionado anteriormente, OllyDbg
e IDA sern *casi* nuestras herramientas principales y es por ello que veremos de
primer instancia como dominarlas para posteriormente no tener problemas con su
uso cuando ya estemos entrado en materia fuerte.
1. - Esta funcionalidad nos permite ver cules son los mdulos o dlls-
cargados por nuestro programa ejecutable entre otras cuestiones
relacionadas a mostrar un estatus.
19
En el primer recuadro de lado izquierdo se muestra la locacin de memoria
en donde los mdulos se han cargado y en el recuadro derecho el mdulo
en cuestin.
Veamos ms a detalle:
20
Ahora dividir en columnas esta pantalla para explicar a detalle que
significa cada cosa.
4D 5A = M Z
21
Ahora hablemos un poco acerca de los archivos o libreras cargadas
junto con el programa:
22
Esta accin nos direccionar a la pantalla principal de OllyDbg
posicionndonos en la direccin de memoria 00401000 o mejor
dicho Program entry point lo cual en palabras ms entendibles
significa que es el inicio del programa programa1.exe, es decir, el
lugar desde el cual se iniciar la ejecucin de instrucciones del
programa.
23
La primera columna tenemos la direccin Base. Una cosa es la
direccin base y otra el Entry point. Veamos la diferencia de
manera grfica.
Base = 00400000
Entry = 00401000
24
En la primera lnea del recuadro en la primera columna (columna de
las direcciones de memoria) veremos que contiene: 00400000. Algo
interesante aqu es que como pueden ver que en la columna
Section se encuentra en blanco, es decir, que no tiene una seccin
de instrucciones lo cual confirma que la direccin Base o el rea de
memoria reservada para programa1.exe que empieza en 00400000.
Como dato curioso, MZ son las iniciales del creador del formato
ejecutable Mark Zbikowski, un ingeniero de Micro$oft.
25
Ahora veamos donde se sita el Entry point el cual acorde a la
nota previamente indica que es: 00401000 y curiosamente vemos
que es la siguiente direccin de memoria (segunda lnea, primer
columna) es esta misma direccin. Sin embargo, en este caso en la
columna Section vern que ahora si contamos con una seccin, y
es la seccin .text la cual contiene las instrucciones que ejecutar
el procesador a la hora de ejecutar el programa programa1.exe.
26
Para concluir veamos las ltimas columnas que faltan por explicar:
=
27
Por ltimo, la quinta columna llamada File version es de gran ya
que nos muestra la versin del archivo.
3. - Esta funcionalidad es muy poderosa y til ya que nos permite ver una
radiografa de la memoria tanto desde la perspectiva del archivo ejecutable
que estamos cargando, como de la memoria utilizada por programas del
propio Sistema Operativo (kernel32.dll, gdi32.dll, user32.dll, etc.).
28
En el primer recuadro de izquierda a derecha encontrarn las columnas que
contienen las direcciones de memoria, tamao, el owner (el programa), las
secciones y el tipo de contenido.
29
Veamos cuales son los permisos de las secciones en programa1.exe.
Como podrn ver, cada una de las secciones tiene su propios permisos.
30
La seccin .text puede ejecutar y leer (EXECUTE|READ), la seccin .rdata
solamente leer (READ) y por ltimo la seccin .data solo puede leer y
escribir (READ|WRITE).
Continuemos...
2. Barra de Control Los botones contenidos en esta barra nos permitirn controlar
la ejecucin del programa.
31
Veamos
Esta es una de las opciones que mas estars utilizando. Tal como lo dice la
explicacin, se trata de ir paso a paso sobre cada lnea de instrucciones del
programa.
32
6. Presionas F8 cinco veces seguidas.
7. Ahora, veremos que la ejecucin par en el Breakpoint que
asignaste anteriormente y adems ejecut la rutina.
33
13. Esta accin brinca directamente a la instruccin RETN que es
la que indica el trmino de la ejecucin del programa.
10. Una forma rpida para dirigirnos hacia una direccin de memoria en
especfico es dando click en el ltimo botn: Go to Address in
Disassembler. Veamos que sucede.
34
Bien, por ltimo veamos de manera muy general los componentes de la
interfaz principal (ventanas) de OllyDbg.
35
5. Y por ltimo el viejo pero poderoso Stack!. Aqu es en
donde vern cmo es que los datos se van comportando
conforme un programa se encuentra en ejecucin. Acciones
como asignacin de variables las vern en el Stack de
OllyDbg.
Antes de cerrar este captulo de la interfaz de OllyDbg les comentar que para los que
no saban es posible disfrazar la interfaz con colores distintos a los que trae Olly por
default. Dirjanse aqu para saber las instrucciones que necesitan para que
personalicen su OllyDbg al gusto: http://www.ollydbg.de/schemes.htm.
En mi caso, pongo guapo a mi OllyDbg con el mismo tema que usa ImmunityDbg ])
36
Conociendo la interfaz y funcionamiento de IDA Dissassembler
r0x! Hemos llegado a un tema que a mucha gente le interesa y
desafortunadamente ha sido el menos documentado o explicado y me refiero al
uso de IDA.
Pasos a seguir:
1. Ejecutamos IDA Freeware, nos aparecer la pantalla (banner) inicial. Click en OK.
37
3. Posteriormente seleccionars la opcin Portable Executable:
38
6. La pantalla siguiente por default viene habilitada la opcin Create imports
segment y bsicamente su funcin es la de incluir en una ventana todos los
imports que utilice el ejecutable que estas cargando en IDA.
7. Y el ltimo paso del wizard es la del inicio del anlisis. Esto quiere decir que IDA
empezar a analizar el archivo a cargar, su estructura, para que al final IDA nos
muestre todo lo relacionado al ejecutable a travs de su sexy interfaz.
39
8. Al trmino del anlisis se abrir la pantalla principal de IDA. Tal como lo he
hecho para OllyDbg, he dividido en secciones y agregado una numeracin cada
una de ellas para ir explicando cada una de ellas a detalle posteriormente.
Como vers en la barra de lado derecho, contiene diferentes colores (azul, gris,
rosa, etc.) y esto es porque dichos colores tienen asignada una seccin.
40
5. Color Azul Si deslizas el mouse sobre esta seccin, mostrar la interfaz de
navegacin conteniendo el cdigo desensamblado del ejecutable.
41
8. Color Gris #2 Como vers hay 2 colores grises, uno como ya mencionamos
muestra el contenido de la seccin .text y el segundo muestra el contenido
en la seccin .data, es decir, los datos utilizados (variables) en el ejecutable.
Como podrn apreciar, la seccin .data contiene las variables asignadas con
db las cuales contienen el texto que elegimos. Vean la diferencia de cmo se
visualiza a nivel cdigo y a nivel desensamblado. Hace sentido?
42
3. Barra de funciones: Esta opcin contiene varias sub-opciones las cuales
veremos a continuacin:
10. Hex View-A Lo mismo que IDA View-A con la diferencia que se muestra
el cdigo sin la interfaz de navegacin.
11. Exports Aqu nos mostrar los exports utilizados por el ejecutable. Los
exports son bsicamente las funciones con las que cuenta el programa. En
este caso tenemos start el cual significa el inicio del programa.
43
Como nota adicional, vean como de igual manera nos indica la direccin de
memoria de la funcin. Muchas de las funcionalidades nos proveen de mucha
informacin la cual es muy til para la tarea que ests ejecutando.
44
Veamos a detalle
14. Start, como sabes es una funcin, la cual obviamente tiene un principio y un
fin. En este caso tenemos en el primer recuadro el inicio de la funcin y el
segundo su finalizacin. Podemos decir que start es la funcin de
inicializacin del cdigo del programa.
45
Veamos una como hace match entre la funcin MessageBox y el cdigo
Ensamblador en IDA:
46
4. Ventana Principal - Bien, esta es la pantalla principal en donde se desplegar la
interfaz de navegacin y prcticamente todas las vistas generadas por cada una
de las funcionalidades de IDA las cuales ya he explicado anteriormente.
47
6. Names Esta funcin nos permite identificar todos los nombres contenidos
dentro del cdigo del programa. Como podemos observar en la siguiente
pantalla en donde se muestra que nos indica con la letra F las funciones, con
la letra I los nombres importados y con la letra A las strings en ASCII.
48
Pueden notar que los strings utilizadas como variables en programa1.exe
aparecen en las dos ltimas lneas en la pantalla anterior.
Por ltimo, les sugiero descarguen las Cheat Sheets que pueden encontrar en
mi sitio: http://www.resrever.net/p/recursos.html de OllyDbg (Reverse-Engineering
Malware Cheat Sheet) e IDA (IDA Pro Shortcuts).
Fufff este ha sido un camino algo largo. Hasta este momento hemos dado una buena
revisin a las herramientas principales que sern de gran ayuda para aprender
Ensamblador.
Recapitulando:
49
Estructura de un Programa en Ensamblador
Como ustedes recordarn al inicio del e-Book empezamos haciendo un pequeo
programita el cual hemos estado utilizando como rata de laboratorio hasta este
momento. Bien, es tiempo que empecemos a meternos de lleno al tema del Lenguaje
Ensamblador; y para entenderlo tendrs que saber la estructura de un programa en
Ensamblador, sus directivas, asignacin de variables y dems.
1. .386 - Describe el modelo de CPU para el cual el cdigo est dirigido; en este
caso como estamos haciendo el programa para x86 se puede utilizar la directiva
.386. Como nota adicional hay que poner atencin en el punto inicial el cual es
requerido antes de cualquier directiva. Ya vers en un momento ms a que me
refiero.
2. .model flat,stdcall - La directiva .model: En esta directiva se define
bsicamente el modelo o tipo- de memoria utilizado que utilizar el programa
que ests desarrollando. Aqu no hay muchas opciones por lo que solamente
tendrs una: flat y stdcall. Stdcall indica el tipo de convencin a utilizar para el
paso de parmetros al utilizar funciones. No te alarmes, pronto veremos de qu
trata este asunto con algunos ejemplos ms adelante.
50
3. include Tal como es utilizado en otros lenguajes, los includes tienen el
mismo objetivo en Ensamblador; el cual es incluir en el cdigo las libreras a
utilizarse. Para el caso de Ensamblador sobre Windows (Win32) se utiliza
principalmente las libreras e includes relacionadas a las dlls que conocemos
son parte del Sistema Operativo, y me refiero a windows, kernel32 y user32.
Cmo es esto? Sencillo. En Windows para que se puedan desplegar las
ventanas hace uso de un DLL (user32.dll) y lo que hay dentro de user32.dll
son meras funciones como lo es el caso del MessageBox, le cual al ser
llamada dicha funcin despliega una ventana de mensaje; por lo cual si se
incluye el uso de los archivos de user32 en el programa, est por entendido que
se tiene planeado el despliegue de ventanas. Claro como el agua.
4. .data - La directiva .data contiene informacin inicializada del programa. Como
te podrs dar cuenta utilizamos esta directiva para hacer la asignacin de la
variable MsgBoxCaption, asignndole el valor: Resrever.Net. Se puede decir
que la directiva tambin llamada seccin- .data ser el repositorio de las
variables inicializadas del programa. Existen otras directivas como .DATA? la
cual tiene la misma funcin que .DATA, con la nica diferencia que sta sirve
para almacenar datos no-inicializados. De igual manera se tiene la directiva
.CONST que como puede deducirse sirve para almacenar las constantes que se
quieran utilizar en el programa. Para efectos del ejemplo se usar nicamente
la directiva .data y conforme vayan avanzando los temas se irn retomando el
resto de las directivas.
MsgBoxCaption db "Resrever.Net",0 Como lo coment anteriormente,
dentro del bloque de variables (.data). En este caso se est asignando el
nombre de variable MsgBoxCaption asignando (db) el valor Resrever.net. Si
te fijas al final lleva una coma y un cero y el motivo de esto es que todas las
cadenas debern ser terminadas con 0 NULL-.
5. .code - La directiva .code, como es de suponerse es en donde se escribir el
cdigo del programa.
.start y end start Indican el principio y el fin del bloque de cdigo.
invoke Es una forma se llamar a una funcin. De igual modo se podra
utilizar una llamada CALL, sin embargo para evitar cuestiones relacionadas al
manejo de errores es mayormente recomendable el uso de invoke. En el cdigo
se utiliza invoke de la siguiente forma: invoke MessageBox, NULL, addr
MsgBoxText, addr MsgBoxCaption, MB_OK en la cual se est haciendo una
llamada a la funcin MessageBox con 4 parmetros (NULL, MsgBoxText,
MsgBoxCaption y MB_OK). Nota que los valores de MsgBoxText (Ensamblador
r0x!) y MsgBoxCaption (Resrever.Net) fueron asignadas previamente. Te
recomiendo regresar a la pgina 49 para entender un poco ms de la asignacin
de parmetros a las funciones.
51
Cada vez que generes un nuevo programa podras utilizar la siguiente pieza de cdigo
como plantilla:
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
.data
<variables>
.code
start:
<cdigo>
end start
Liga: http://www.angelfire.com/rnb/byte/tut01_es.html
La instruccin - INC
La instruccin INC sirve para incrementar el valor numrico que tengas en un
registro en particular. En el siguiente ejemplo vers cmo utilizar la instruccin INC
para ir sumando un nmero al registro EAX (acumulador) de de igual manera ir
explicando los eventos que me voy encontrando durante el anlisis del programa.
52
Veamos cmo se usa en la prctica:
Pasos a seguir:
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
.data
.code
start:
; Resrever.net
; Ejemplo de uso de la instruccin "INC"
53
INC eax ; Incremento de EAX = 00000023
INC eax ; Incremento de EAX = 00000024
INC eax ; Incremento de EAX = 00000025
INC eax ; Incremento de EAX = 00000026
INC eax ; Incremento de EAX = 00000027
INC eax ; Incremento de EAX = 00000028
INC eax ; Incremento de EAX = 00000029
INC eax ; Incremento de EAX = 0000002A
INC eax ; Incremento de EAX = 0000002B
INC eax ; Incremento de EAX = 0000002C
INC eax ; Incremento de EAX = 0000002D
INC eax ; Incremento de EAX = 0000002E
INC eax ; Incremento de EAX = 0000002F
RETN
end start
Vista - OllyDbg
Como vers, OllyDbg te posiciona el cursor en la primer lnea, lo cual quiere decir que aun no
se ha iniciado la ejecucin del programa. Nota que en la ventana de los registros (superior
derecha) indica que el registro EAX contiene el valor 00000000. Lo que haremos a
continuacin ser utilizar la funcionalidad de OllyDbg de ir paso a paso, o sea tecleando F7
para visualizar como es que en el nmero que se encuentra en el registro EAX se va
incrementando conforme la ejecucin de instrucciones va avanzando. OK, Continuemos
54
7. Presiona la tecla F7.
Bien, ahora vemos que el cursor se posiciona en la segunda lnea y ahora el registro EAX dice
que su valor es 00000001. Repite el mismo paso (presiona F7).
Tercer lnea, y el registro EAX con el valor 00000002. OK, creo que ya se entendi la idea del
INCremento. Un detalle curioso es, por si no te has dado cuenta es que estas posicionado en la
lnea 3 y el valor de EAX es 2, bueno hay que recordar que el primer INCremento es de 0,
despus, 1, 2, etc. An falta ver ms.. continuemos
55
Ahora EAX vale 00000009, presta atencin a lo que sucede a continuacin:
9. Presiona F7 nuevamente.
WTF!! 0000000A? No se supona que sera: 00000010? NO, y esto tiene una sencilla
explicacin, esos valores que estas incrementando al registro EAX se encuentran en formato
Hexadecimal, lo cual quiere decir que tendrs un rango de: 0 a 9 (0123456789) y de la letra
A a la F (ABCDEF).
56
Tal como era de esperarse, EAX = 0000000B.
57
Huh? 00000010? Recapitulando
58
Ahora EAX es igual a: 0000002A. Recapitulando
Como te dars cuenta aproveche el tema de la instruccin INC para de igual modo tocar un
poco el tema de cmo trabaja el sistema Hexadecimal en la prctica.
;
; +------------------------------------------------------------------+
; This file is generated by The Interactive Disassembler (IDA)
; Copyright (c) 2010 by Hex-Rays SA, <support@hex-rays.com>
; Licensed to: Freeware version
; +------------------------------------------------------------------+
;
; Input MD5 : 788EE2C9F1A31F7D89DC010D8ED4D532
59
; Alignment : default
.686p
.mmx
.model flat
public start
start proc near
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
inc eax
60
inc eax
inc eax
retn
start endp
Como vern existe una gran similitud si no es que una mera igualdad - entre el cdigo
en inc.asm y lo obtenido por IDA Pro. Era de esperarse; sin embargo mientras ms
vaya avanzando vers el poder que ofrecen ambas herramientas (OllyDbg e IDA) al
momento de analizar los programas que voy generando.
***********************************************************************
http://www.resrever.net
No olviden darse de alta en mi sitio para recibir actualizaciones acerca de este e-Book.
***********************************************************************
61