Taller de Cracking Desde Cero Por Karmany y Shaddy
Taller de Cracking Desde Cero Por Karmany y Shaddy
Taller de Cracking Desde Cero Por Karmany y Shaddy
Foro de elhacker.net
Programación => Ingeniería Inversa => Mensaje iniciado por: Shaddy en 17 Septiembre
2007, 23:54
INTRODUCCIÓN
¿Qué es esto del Taller de Cracking desde 0?
Bien, después de juntarnos ambos, y dada nuestra experiencia, hemos pensado
que lo mejor para que una persona empiece a conocer este fantástico mundo de
la ingeniería inversa, es enseñar las cosas más básicas.
Este Taller de Cracking desde 0 va orientado a todas esas personas que tienen
muy pocos conocimientos (o ninguno) y que por este motivo no han querido
iniciarse en este Arte, que suele ser considerado algo complejo.
Todos nuestros esfuerzos, por lo tanto, van a ir dirigidos a hacer que esta gente
sin conocimientos, de sus primeros pasos y logre entender los conceptos más
básicos.
Estamos seguros, que a gente avanzada también les puede ayudar a recordar,
así que esperamos que os guste y que pueda ayudar a "empezar a caminar"...
Como todo, hay que empezar por lo más básico, no podemos hablar de debugger
sin conocer nada de ensamblador y no podemos hablar de ensamblador sin ni
siquiera saber qué es el código máquina.
…elhacker.net/printpage.html;topic=1… 1/22
24/08/2010 Imprimir Página - Taller de Cracking d…
Por este motivo, para facilitar la escritura de programas, podemos ayudarnos del
lenguaje ensamblador (lenguaje de bajo nivel y el que vamos a conocer aquí.), el
cual utiliza nemotécnicos (normalmente abreviaturas de palabras en inglés) que
se utilizan para definir una determinada instrucción.
Por ejemplo:
ADD A, B. Se suma a A el valor de B y el resultado se guardaría en (A).
Entendido todo esto, vamos a dar los primeros pequeños pasos en ensamblador,
del inglés Assembly.
Practicando Assembly
1.- Introducción
Citar
PUSH EAX
PUSH EDX
CALL lstrca tA
Imaginemos esas instrucciones, en éste caso digamos que mete EAX y EDX en la
pila (que lo que explicaré más adelante) para así tratar los valores antes de
llamar a la API lstrcat que se encarga de concatenar (juntar) 2 cadenas.
En éste caso si EAX apunta a "hola" y EDX a " mundo" una vez ejecutada la API
en EAX quedaría la cadena/string "hola mundo". Así que como explicaré ahora
EAX ha sido utiliza de "Acumulador" porque ha acumulado el resultado de la
API.
…elhacker.net/printpage.html;topic=1… 3/22
24/08/2010 Imprimir Página - Taller de Cracking d…
EAX, ECX, EDX, EBX.
2.-EBX: Base
- Éste se suele utilizar como Base en los algoritmos. Es decir, si EBX vale 10,
esa será la BASE de la cantidad de veces que se hace un proceso específico.
3.-ECX: Contador
- Éste sería en el ejemplo anterior el que hace de contador, con una instrucción
tipo INC ECX cada vez se iría sumando de 1 en 1 hasta llegar al número del
registro BASE (EBX) 10, así que utilizando estos dos últimos ejemplos se haría
durante 10 veces una funcion (por ejemplo, multiplicar por 3 diez veces). Ej:
Citar
Notas: EAX = 1 ; EBX = 10
Inicio:
MUL EAX, 3 ; MUL: Multiplica 2 registros almacenando en el primero.
INC ECX
CMP EC X, EBX
JNE Inicio ; JNE: es un salto condicional (JNE: JUMP IF NOT EQUAL / Salta si no es igual) que va hacia la dirección que le
indiques siempre y cuando el resultado de la comparación anterior sea desigüal .
4.-EDX: Datos
- Éste es utilizado también antes de invocar a una API para darle los datos.
¿Qué es la PILA?
- Técnicamente es una estructura de datos, del tipo LIFO (del inglés Last In
First Out, último en entrar, primero en salir). Texto extraído de la wikipedia..
(http://r.i.elhacker.net/cache?
url=http://www.homeandlearn.co.uk/net/images/messageboxDelete.jpg)
- Título : "Delete".
- Cuerpo : "Do you really want to Delete this Record?".
- Botones : " YesNo".
…elhacker.net/printpage.html;topic=1… 4/22
24/08/2010 Imprimir Página - Taller de Cracking d…
1 MessageBoxA es la API encargada de lanzar ese mensaje tipo "caja de texto" que puse en
la imagen.
Citar
PUSH Título
PUSH Cuerpo
PUSH Botones
CALL MessageBoxA
Entonces ahí vemos que cada elemento es primero insertado en la pila mediante
la instrucción PUSH. La pila tiene la cualidad de lo último que metes, es lo
primero que sacas. Es decir, en nuestro caso ahora la pila tendría ésta forma.
Las direcciones son imaginarías, normalmente la pila se visualiza con las correspondientes
direcciones hacia donde apuntan (pueden apuntar a una cadena de texto que contenga el
título
00401005 Botones
00401000 Cuerpo
00401020 Título
de manera que si ahora nos encontráramos con una instrucción tipo POP EAX
extraeríamos Botones por ser la última que se introdujo hacia el REGISTRO EAX
el cual hemos indicado mediante la instrucción.
Ésta estructura es un ejemplo, de que existe una zona donde se guardan valores
MUY importantes en el flujo de un programa, así como por ejemplo, si se
ejecutara la instrucción CALL MessageBoxA y ésta se encontrara por ejemplo en
la dirección 402500 (vamos a hacer un ejemplo de donde la dirección en la que
se sitúan las instrucciones):
Atendiendo al ejemplo de antes añado las mismas instrucciones pero con sus respectivas
direcciones imaginarias.
Citar
402500| PUSH Título
402504| PUSH Cuerpo
402508| PUSH Botones
40250A | C ALL MessageBoxA
40250F| MO V EAX, EBX
Así como vemos, también se a almacenado la dirección hacia donde tendrá que
volver despues del MessageBoxA.
Por el momento vamos teniendo nociones de cada parte pero sin profundizar en
nada, si no lo entendéis completamente no os preocupéis, es normal, a medida
que lo vayamos viendo todo tomará forma y os saldrá mecánicamente.
MO V EAX, 1530h
ADD EAX, 1000h
SUB EAX, 500h
MO V EBX, 100h
SUB EAX, EBX
se descompone en:
AX (16BIT)
Citar
MO V AL, 5
Sabemos que sólamente hay una posibilidad, pero tambien debemos saber a que
parte de EAX corresponde, porque si fuese AX por ejemplo ya cambiaría la
posición del movimiento.
Mas adelante veremos como se trabaja con "punteros", y ahí deberemos tener
bien claro éstas correspondencias:
Citar
Eje rcicio 2:
MO V EAX, 00004932h
ADD AX, 45h
SUB AL, 0Ah
…elhacker.net/printpage.html;topic=1… 6/22
24/08/2010 Imprimir Página - Taller de Cracking d…
¿Que son los saltos condicionales? ¿Que son las banderas?
Los saltos condicionales son instrucciones que al ejecutarse hacen que el flujo
se traslade a la dirección que apunte.
Es decir, cuando nos encontramos con una instruccion del tipo "salto
condicional" nos llevará (si se cumple la condicion) hacia donde apunte.
Veamos un ejemplo:
Citar
CMP EAX, EBX
JE 401000
En éste ejemplo comprobamos 2 cosas, que hay unas banderas que se activan o
bien con 0 o con 1 en función de las operaciones aritméticas que vayan
generandose a lo largo del programa, y que hay instrucciones que actuan en
función de las mismas, veamos que tipos de satos hay:
JE
JNE o JNZ
JB
JBE
JP
JPE
JL
JLE
[CONTINUARÁ]
EN CONSTRUCCIÓN
Pequeña Introducción.
…elhacker.net/printpage.html;topic=1… 7/22
24/08/2010 Imprimir Página - Taller de Cracking d…
Narvaja ya tenemos una base impresionante no sólo para empezar, sino para
obtener un nivel más que aceptable.
OllyDBG es un debugger con el que hemos estado muchísimas horas, por este
motivo, nos va a facilitar enormemente nuestra labor.
La idea de este: "asíéndonos con OllyDBG" es iniciar a todo forero en su uso e ir
perdiendo el miedo a utilizarlo. Posteriormente ya se podrán tratar otros temas o
leer otros tutoriales o... utilizar otros programas...
Presentación de OllyDBG.
Para descargar el programa podemos descargar la versión 1.10 básica, sin ningún
plugin y ninguna modificación desde su página web, aquí:
http://www.ollydbg.de/odbg110.zip
Vamos a abrirlo por primera vez. Abriremos cualquier ejecutable para examinarlo.
Para esto vamos a File --> Open o pulsamos simplemente F3 y seleccionamos
cualquier exe.
OllyDBG puede mostrar distintas pantallas con diferentes datos, así que para
entenderlo vamos a seleccionar una pantalla que OllyDBG identifica como "CPU"
(es la que por defecto se muestra primeramente, también llamada "ventana del
desensamblador") y la podemos seleccionar de este modo:
-En el menu: View --> CPU
-Pulsando Alt + C
-O bien pulsando el botón "C" de (CPU) que hay en la barra de herramientas. Si
dejamos el ratón sobre este botón nos mostrará abajo a la izquierda: Show CPU
(Alt+C)
Su interfaz es la siguiente:
(http://r.i.elhacker.net/cache?
url=http://img251.imageshack.us/img251/7964/ollycpuus8.jpg)
Fig.1
(http://r.i.elhacker.net/cache?
url=http://img170.imageshack.us/img170/6183/ventanapopepb2.jpg)
Imagen original de The Pope (Fig.2)
…elhacker.net/printpage.html;topic=1… 8/22
24/08/2010 Imprimir Página - Taller de Cracking d…
Vamos a examinar más detenidamente las ventanas marcadas en color, una por
una:
(http://r.i.elhacker.net/cache?
url=http://img353.imageshack.us/img353/9960/20080721162048qw4.jpg)
Address:
Si cliqueamos dos veces sobre esta columna veremos, cómo nos muestra o
cambia de direcciones absolutas a direcciones relativas y viceversa.
Hex dump:
Si cliqueamos dos veces, lo que equivale a pulsar F2, pondremos o quitaremos un
punto de ruptura, breakpoint o lugar donde el debugger parará. Se pondrá la
dirección en rojo.
Para ver todos los breakpoints que hemos colocado podemos verlos en:
View --> Breakpoints o Alt+B
Podemos también modificar los bytes, copiarlos, pegarlos, convertirlos a ceros o
en NOP's etc... pulsando botón derecho y seleccionando Binary y sus submenus.
Disassembly:
…elhacker.net/printpage.html;topic=1… 9/22
24/08/2010 Imprimir Página - Taller de Cracking d…
Si cliqueamos dos veces (o pulsamos la tecla del espacio), se abrirá una
pequeña ventana en donde podremos escribir nosotros mismos la instrucción que
queramos. Tiene una opción: "Fill will NOP's": Si se tilda rellenará con NOP's lo
que quede de la instrucción que hemos modificado, por el contrario, si no se
tilda, lo que quede de código será de nuevo ensamblado dando posibles
resultados inesperados. (Yo recomiendo tildarla).
Una de las cosas que hacen más fácil escribir en ensamblador desde el propio
OllyDBG, es que permite escribir instrucciones sin poner por ej. el tamaño(BYTE-
WORD-DWORD). Por ejemplo, sea la siguiente instrucción:
MOV EAX,DWORD PTR DS:[400000]
Nosotros simplemente con poner MOV EAX, DS:[400000], OllyDBG ya entenderá
que estamos trabajando con el registro EAX que requiere un Dword y
automáticamente pondrá: MOV EAX,DWORD PTR DS:[400000].
Si nos equivocamos siempre tenemos la opción: Botón derecho -->Undo
Selection para restaurar lo original.
Comment:
OllyDBG rellena adecuadamente todos los comentarios necesarios, que hacen
que el código sea mucho más entendible.
Nosotros del mismo modo, podemos modificar cualquier comentario y poner lo
que nosotros queramos...a fin de que sea más fácil después entender todo.
Simplemente cliqueamos dos veces sobre esa columna y aparecerá una pequeña
ventana que pondrá de título: "Add comment" o "Change comment" (añadir
comentario o modificar comentario). Si modificamos un comentario que tenía ya
OllyDBG, podemos simplemente borrar el nuestro y automáticamente volverá a
aparecer el original.
Poner un comentario propio es realmente muy útil y además nos puede ayudar
posteriormente a recordar ese punto... por ejemplo, imaginemos lo siguiente:
0040100A DEC EAX, podría ser que en EAX hubiera por ej. el número de vidas y
en este momento nos la disminuye en una (DEC EAX). Podríamos poner de
comentario: "Quita una vida".
Si después no nos acordamos de la dirección podemos buscarla pulsando botón
derecho --> Seach for --> user-defined comment y ahí veremos nuestro "Quita
una vida".
(http://r.i.elhacker.net/cache?
url=http://img183.imageshack.us/img183/4480/botonesollywm3.jpg)
1.- Equivale a pulsar "Ctrl+F2" o ir al menú "Debug --> restart". Reinicia de nuevo
la depuración del programa. Según la configuración de OllyDBG se reiniciará y se
pausará normalmente en el Entry Point (EP) del programa que vamos a debugear.
2.- Equivale a pulsar "Alt+F2" o ir al menú "Debug --> Close". Termina el
programa que está siendo debugeado, pero sin cerrar el OllyDBG.
3.- Equivale a pulsar "F9" o ir al menú "Debug --> Run". Ejecuta el programa que
está siendo debugeado.
…elhacker.net/printpage.html;topic=1… 10/22
24/08/2010 Imprimir Página - Taller de Cracking d…
4.- Equivale a pulsar "F12" o ir al menú "Debug --> Pause". Pausa al programa
que está siendo debugeado.
5.- Equivale a pulsar "F7" o ir al menú "Debug --> Step Into". Hace ir al debuger
instrucción por instrucción entrando en todas las call y subrutinas.
6.- Equivale a pulsar "F8" o ir al menú "Debug --> Step Over". Hace ir al debuger
instrucción por instrucción pero sin entrar en ninguna call o subrutina.
7.- y 8.- No las vamos a ver en este "Cracking desde cero" porque sale de
nuestras espectativas.
9.- Equivale a pulsar "Ctrl+F9" o ir al menú "Debug --> Execute till return". Tras
pulsar este botón el debuger parará en el siguiente RETN que haya. Puede ser
muy útil por ejemplo al entrar en una subrutina y querer buscar el final.
10.- Equivale a pulsar "Ctrl+G". En la ventana que aparece, podemos introducir la
dirección, y tras aceptar, en la ventana de desensamblado podremos ver el
código que hay en dicha dirección.
Aunque para los recién iniciados sea un poco lioso recordar todo, en el siguiente
apartado haremos unos sencillos ejemplos utilizando lo más básico. Veremos
cómo manejarnos en la ventana de desensamblado.
(http://r.i.elhacker.net/cache?
url=http://img179.imageshack.us/img179/254/20080721163023wt6.jpg)
De estas 3 formas se nos abrirá una ventana y ahí podremos poner la dirección a
la que queremos ir: 418E80:
(http://r.i.elhacker.net/cache?
url=http://img377.imageshack.us/img377/5466/20080721163247fq0.jpg)
…elhacker.net/printpage.html;topic=1… 11/22
24/08/2010 Imprimir Página - Taller de Cracking d…
En este punto, voy a añadir que OllyDBG nos permite poner varios tipos de BP.
Hemos visto el más común y típico, pero también podría ser necesario que
parase en 418E80 solamente cuando por ej. el registro EAX sea igual a 2 (botón
derecho --> Breakpoint --> Condicional) y ahí pondríamos la condición, que
no se va a explicar aquí.
Otro tipo de BP son los Hardware Breakpoints. Sólo podemos poner 4. Si
pulsamos botón derecho --> Breakpoints, veremos que en la ventana de
desensamblado podemos poner un Hardware on execution. Para ver los HBP que
tenemos podemos ir al menú: Debug --> Hardware Breakpoints y ahí veremos
los que tenemos puestos. Si intentamos poner más de 4, OllyDBG nos avisará
que debemos borrar uno.
4.- Ir a MessageBoxA
Los más Newbies desconocen esta opción. Lo primero que tenemos que
asegurarnos es que se haya cargado la librería correspondiente.
Me explico. Por ejemplo la función MessageBoxA se encuentra en user32.dll. Si
nuestro programa no ha cargado user32.dll esto que vamos a hacer no
funcionará.
Simplemente hacemos como antes cuando quisimos ir a una dirección:
pulsar el botón número 10 de la siguiente imagen:
(http://r.i.elhacker.net/cache?
url=http://img183.imageshack.us/img183/4480/botonesollywm3.jpg)
o bien, podemos pulsar Ctrl+G o botón derecho --> Goto --> Expresion
Y ahí escribimos: MessageBoxA, y OllyDBG nos llevará ahí.
Es posible también que lo que se quiera sea ir al lugar donde estaba detenido el
debugger. Esto es muy fácil, ya que sabemos que el debugger está parado en el
valor del registro EIP, por lo tanto podemos cliquear dos veces en este registro e
iremos donde está parado nuestro debugger. Podemos también pulsar la tecla "C"
de la barra de herramientas.
7.- Acabo de entrar en una CALL de una librería. Quiero volver al código de
donde fue llamada.
Una opción manual sería ir a cada RET pulsando Ctrl+F9 y después F7 para pasar
el RET y haciendo esto llegaríamos a nuestro código donde ha sido llamada la
CALL.
Hay una opción que tiene OllyDBG y que nos puede facilitar este trabajo:
simplemente pulsando Alt+F9 (Execute till user code).
8.- Quiero que el código se ejecute hasta donde tengo el cursor puesto.
Pinchamos (hasta que marque en color) sobre un determinado código y pulsamos
simplemente F4.
IMPORTANTE:
9.- Ya he hecho los cambios en el OllyDBG, ahora quiero guardar todos los
cambios en el mismo ejecutable.
Esta pregunta la hace muchísima muchísima gente. Voy a explicar la teoría de
cómo hay que modificarlo y explicaré la forma de hacerlo de manera muy
SENCILLA con OllyDBG sin utilizar ningún Editor Hexadecimal y por lo tanto sin
calcular el Offset:
Bien, nosotros hemos modificado ese PUSH EBP (55h) y hemos querido dejar un
NOP, entonces veríamos lo siguiente:
401000 NOP ;nop corresponde a 90h
2.-Se abrirá una nueva ventana con 4 botones que nos dice lo siguiente: "Copy
selection to executable file?" Pulsamos en el botón: "Copy All"
Nos vamos a ir a ver las secciones y si miramos las del OllyDBG encontraremos lo
siguiente:
Código:
Name Virtual Offset Virtual Size Raw Offset o Raw Size o Flags
PointerToRawData SizeofRawData
.text 1000 AF000 600 AE800 60000020
.data B0000 5B000 AEE00 1D200 C0000040
.tls 10B000 1000 CC000 200 C0000040
.rdata 10C000 1000 CC200 200 50000040
.idata 10D000 2000 CC400 1E00 40000040
.edata 10F000 2000 CE200 1400 40000040
.rsrc 111000 36000 CF600 35A00 40000040
.reloc 147000 C000 105000 BE00 50000040
…elhacker.net/printpage.html;topic=1… 14/22
24/08/2010 Imprimir Página - Taller de Cracking d…
en detalle. Sabemos lo siguiente:
-que la Image Base es 400000h
-que la sección .text comienza en el RVA 1000
-que la primera instrucción (desensamblarlo) es JMP SHORT 00401012 que
corresponde a los 2 bytes: EB 10
-que esta primera instrucción se encuentra en VA 401000
Ejemplo1
Pregunta: Estos dos bytes (EB 10) que se encuentran en RVA 1000, ¿Dónde se
encuentran realmente en el archivo ejecutable?
Bien, esto nos lo dice: Raw Offset o PointerToRawData. En este caso es
sencillo ya que estos 2 bytes (EB 10), se encuentran justo en el inicio de la
sección .text, por lo tanto, dichos bytes se encuentran en el archivo en el
offset: 600h.
Para comprobar esto que acabo de decir, voy a abrir al OllyDBG en un editor
hexadecimal y voy a ir al offset 600h:
Código:
000005F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000600 EB 10 66 62 3A 43 2B 2B 48 4F 4F 4B 90 E9 28 01 ë.fb:C++HOOK.é(.
Ejemplo2
Bueno, acabamos de ver un ejemplo muy sencillo, vamos a hacer otro que es lo
que nos vamos a encontrar normalmente, y es lo que hay que aprender a
entender.
Voy a abrir el OllyDBG con el OllyDBG y me voy a ir a una dirección cualquiera...:
Código:
0046123E 8B 4E 14 MOV ECX,DWORD PTR DS:[ESI+14]
00461241 8B 53 14 MOV EDX,DWORD PTR DS:[EBX+14]
…elhacker.net/printpage.html;topic=1… 15/22
24/08/2010 Imprimir Página - Taller de Cracking d…
00060840 14 8B 53 14 81 E2 FF 00 00 00 81 E1 FF 00 00 00 .‹S..âÿ....áÿ...
Ejemplo3
VA = 4BF008 (bytes que contiene: 44 F2 4B...) Está dentro de la sección .data
RVA (.data) = B0000h
Raw Offset (.data) = AEE00h
Image Base = 400000h
Código:
000BDE00 00 00 00 00 04 00 00 00 44 F2 4B 00 00 00 00 00 ........DòK.....
000BDE10 00 00 00 00 0F 00 00 00 0D 00 00 00 46 00 00 00 ............F...
No quiero entrar más en detalle porque nos salimos de lo que se quiere explicar
en este tutorial, pero esto que se ha mostrado pienso que tiene que quedar bien
claro.
Esta subventana es muy útil también. En ella podemos representar los valores
hexadecimales, de muchas formas diferentes:
- Podemos ver el carácter ASCII que representa al valor hex.
- Podemos ver el código UNICODE que representa a los valores hex.
- Podemos ver la representación de punto flotante.
- Podemos ver las direcciones que pueden representar.
- Podemos ver incluso el código desensamblado, aunque para esto ya tenemos
nuestra ventana de desensamblado.
- Podemos ver un PE header con todos sus datos.
Y muchas opciones más. Una ventana muy requeteútil, que nos va a ayudar
enormemente en nuestra labor.
…elhacker.net/printpage.html;topic=1… 16/22
24/08/2010 Imprimir Página - Taller de Cracking d…
de la imagen anterior, que está dividida en 3 columnas.
Address --> dirección donde se encuentran los bytes
Hex dump --> los valores hexadecimales
ASCII --> el carácter ASCII del valor hexadecimal
(http://r.i.elhacker.net/cache?
url=http://img166.imageshack.us/img166/5294/20080721163627tq9.jpg)
Podemos observar por ejemplo, que en la dirección 402BDC tenemos el byte: 56h
que corresponde a la "V". Se trata de modificarlo y sustituir la "V" por ejemplo
por una "R" para que nos quede "RB5!".
Lo primero que haremos será seleccionar el byte correspondiente (simplemente
pulsando con el botón izquierdo del ratón sobre el byte). Ahora tenemos varias
opciones:
1ª-Pulsar botón derecho del ratón y seleccionar binary --> Edit:
(http://r.i.elhacker.net/cache?
url=http://img183.imageshack.us/img183/1584/20080721164604yp0.jpg)
(http://r.i.elhacker.net/cache?
url=http://img397.imageshack.us/img397/2811/20080721165034lc4.jpg)
Código:
6B 00 61 00 72 00 6D 00 61 00 6E 00 79 00 00
k a r m a n y
…elhacker.net/printpage.html;topic=1… 18/22
24/08/2010 Imprimir Página - Taller de Cracking d…
Imaginemos que tenemos un byte igual a 04. Imaginemos que son las vidas de un
juego y que cuando nos quitan una vida ese 4 disminuirá a 3.
Podríamos averiguar cuándo se quita esa vida simplemente poniendo un
breakpoint cuando el byte sea modificado. Esto se hace así:
-Seleccionamos el byte en cuestión (el 04 en este ejemplo)
-pulsamos botón derecho del ratón y seleccionamos Breakpoint
-Tenemos dos opciones:
Poner un BP (breakpoint). Seleccionamos Memory, on write
Poner un HBP (Hardware BreakPoint). Seleccionamos Hardware, on write -->
Byte
Tiene en su parte superior una barra que nos permite visualizar 3 vistas
diferentes simplemente pulsando en la misma.
-Registers (FPU)
-Registers (MMX)
-Registers (3DNow!)
Registers (FPU):
Vamos a explicar todo lo que hay en esta ventana. Para ello echaremos un
vistazo a la imagen que he puesto.
Lo primero que aparece son los registros que ya conocemos y sus respectivos
valores que almacenan:
Código:
EAX 00000000
ECX 0013FFB0
EDX 7C91EB94 ntdll.KiFastSystemCallRet
EBX 7FFDF000
ESP 0013FFC4
EBP 0013FFF0
ESI FFFFFFFF
EDI 7C920738 ntdll.7C920738
EIP 004011C0 Crackme_.<ModuleEntryPoint>
Y finalmente:
Código:
ST0 empty -UNORM BCE0 01050104 006C006F
ST1 empty 0.0000016439076200470e-4933
ST2 empty 0.0
ST3 empty 0.0
ST4 empty 0.0
ST5 empty 0.0
ST6 empty 0.0
ST7 empty 0.0
Que son utilizados como ya comenté para realizar operaciones de punto flotante.
Este tema es muy interesante y la representación de estos números aún más.
Sobre todo en los de precisión doble. No entraré en más detalles, aunque he
mostrado para qué valen.
3.- El registro ebx tiene una dirección. Quiero ir a esa dirección en el dump
rápidamente:
Imaginemos que ebx (o cualquier otro registro) vale 402000. Queremos ir a esa
dirección en la Ventana del Dump. Simplemente seleccionamos el registro ebx y
pulsamos botón derecho del ratón --> Follow in dump
…elhacker.net/printpage.html;topic=1… 21/22
24/08/2010 Imprimir Página - Taller de Cracking d…
4.- El registro ebx tiene una dirección. Quiero ir a esa dirección en la
ventana de desensamblado:
Imaginemos igual que antes que ebx (o cualquier registro) vale 402001.
Queremos ir a esa dirección en la ventana de desensamblado. Simplemente
seleccionamos dicho registro ebx, y pulsamos botón derecho del ratón --> Follow
in disassembler
En contrucción
Perdonar las molestias
…elhacker.net/printpage.html;topic=1… 22/22