Está en la página 1de 21

13/9/2015

Taller de Cracking desde cero - (actualizado: 27.julio.2008)

Bienvenido(a),
Visitante. Por
favor Ingresar
o Registrarse
Perdiste tu
email de
activacin?.
| Foro | Web | Blog | Wiki | Ayuda | Buscar | Ingresar | Registrarse | 13 Septiembre 2015,
09:58

Tema destacado: Servidor TeamSpeak 3: crea tu propio canal gratis

Foro de elhacker.net
Programacin
Ingeniera Inversa (Moderadores: Shaddy,
karmany, .:UND3R:., MCKSys Argentina)
Taller de Cracking desde cero - (actualizado:
27.julio.2008)

0 Usuarios y 1 Visitante estn


viendo este tema.

Pginas: [1]

Autor
Shaddy
Moderador

Tema: Taller de Cracking desde cero - (actualizado: 27.julio.2008) (Ledo


62,769 veces)
Taller de Cracking desde cero - (actualizado: 27.julio.2008)
en: 17 Septiembre 2007, 23:54

Taller de Cr

Desconectado
Mensajes:
720

INTRODUCCIN
Qu es esto del Taller de Cracking desde 0?
one_bit_manipulator()
Bien, despus de juntarnos ambos, y dada nuestra experiencia, hemos
pensado que lo mejor para que una persona empiece a conocer este
fantstico mundo de la ingeniera inversa, es ensear las cosas ms bsicas.
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 ms bsicos.
Estamos seguros, que a gente avanzada tambin 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 ms bsico, no podemos hablar de
debugger sin conocer nada de ensamblador y no podemos hablar de
ensamblador sin ni siquiera saber qu es el cdigo mquina.

http://foro.elhacker.net/ingenieria_inversa/taller_de_cracking_desde_cero_actualizado_27julio2008-t180886.0.html

1/21

13/9/2015

Taller de Cracking desde cero - (actualizado: 27.julio.2008)

ltima modificacin: 24 Diciembre


2008, 01:39 por karmany

En lnea

"Si buscas resultados diferentes, no hagas siempre lo mismo" (Albert


Einstein)
http://abssha.reversingcode.com
http://www.reversingcode.com
karmany
Moderador
Desconectado
Mensajes:
1.507

Re: Taller de Cracking desde 0


Respuesta #1 en: 18 Septiembre 2007, 22:05

Del Cdigo Mquina al Lenguaje


Ensamblador
Realmente, qu es lo que entiende un "ordenador"?
Como se ha dicho millones de veces: 0 (ceros) y 1 (unos) --> (bits)
El cdigo o lenguaje mquina consta de cadenas de estos 0 y 1, que el
microprocesador entiende directamente. Una y slo una secuencia de estos 0
y 1 realizar una determinada operacin.

Sueas que
sueas

Programar directamente en este sistema binario, como se puede uno


imaginar, puede resultar muy muy duro y es muy fcil equivocarse.
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 nemotcnicos (normalmente abreviaturas de palabras en
ingls) que se utilizan para definir una determinada instruccin.
Por ejemplo:
ADD A, B. Se suma a A el valor de B y el resultado se guardara en (A).
Para los que recin empiezan, imaginemos estos valores de A y B:
A=3
B=2
por lo tanto, tras ADD A, B, nos quedara:
A=5
B=2
En este punto, alguien podr pensar:
-Bueno, escribir un programa en lenguaje ensamblador no es que sea tarea
fcil, adems existen muchos otros lenguajes de alto nivel que nos pueden
facilitar enormemente las cosas a la hora de programar... entonces...
Por qu en ingeniera inversa hay que aprender lenguaje ensamblador?
Si abrieramos cualquier programa y echramos una ojeada al cdigo,
observaramos el lenguaje mquina, independientemente del lenguaje de
programacin con que haya sido programado (compilado). Es lgico, ya que
como se ha explicado, es lo que el microprocesador entiende.
Sin embargo, entender esas secuencias de 0 y 1 que hacen realizar
determinadas operaciones, es verdaderamente complicado, por este motivo
existen muchos programas que a partir del lenguaje mquina obtienen el
lenguaje ensamblador, que ya es mucho ms entendible al ser humano. Estos
programas se denominan desensambladores.
Entendido todo esto, vamos a dar los primeros pequeos pasos en
ensamblador, del ingls Assembly.
ltima modificacin: 19 Septiembre
2007, 23:49 por karmany

Shaddy

En lnea

Re: Taller de Cracking desde 0

http://foro.elhacker.net/ingenieria_inversa/taller_de_cracking_desde_cero_actualizado_27julio2008-t180886.0.html

2/21

13/9/2015

Taller de Cracking desde cero - (actualizado: 27.julio.2008)

Moderador

Respuesta #2 en: 18 Septiembre 2007, 23:38

Desconectado
Mensajes:
720

Practicando Assembly
1.- Introduccin

Es importante antes de adentrarnos en el mundo de los Depuradores,


Desensambladores y dems herramientas que conozcamos y tengamos una
one_bit_manipulator()
buena nocin de lo que es el Assembly. Empezaremos suave, haciendo
breves ejemplos y poco a poco.
2.- Instrucciones Bsicas: Parte I
Comenzaremos por las instrucciones ms bsicas, con breves explicaciones y
ejemplos:
MOV, CMP, TEST, ADD, SUB, INC, DEC.
MOV: Se utiliza para mover un dato de un registro a otro.
Ej: MOV A, B. El valor de A pasara a ser igual que el valor de B.
CMP: Compara el valor de dos registros.
Ej: CMP A, B. Se efecta una comparacin entre A y B.
TEST: Compara el valor de dos registros.
Ej: TEST A, B. Se efecta una comparacin entre A y B.
Nota: En capitulos poste riore s e scribire m os la dife re ncia e ntre CMP y TEST.

ADD: Suma el valor de dos registros almacenandolo en el primero.


Ej: ADD A, B. Se suma a A el valor de B y el resultado se guardara en (A).
SUB: Resta el valor de dos registros almacenandolo en el primero.
Ej: SUB A, B. Se resta a A el valor de B y el resultado se guardara en (A).
INC: Incrementa el valor en 1 de un registro.
Ej: INC A. Se incrementara el valor de A en 1.
DEC: Decrementa el valor en 1 de un registro.
Ej: DEC A. Se decrementara el valor de A en 1.
2.- Los Registros: Parte I
Antes de adentrarnos en los Registros quiero hacer un breve comentario
sobre las API.
Bien, en cualquier programa compilado bajo windows se utilizan unas
denominadas API, stas son bsicamente las que forman todo lo que
percibes, as como ventanas, botones, movimientos del ratn, etc... y tambin
todas las acciones que haces.
La manera de llamarlas es bsicamente una estructura. No la explicar de
momento porque es pronto para ello pero os har un breve ejemplo:
Citar
PUSH EAX
PUSH EDX
C ALL lstrcatA

Imaginemos esas instrucciones, en ste caso digamos que mete EAX y EDX
http://foro.elhacker.net/ingenieria_inversa/taller_de_cracking_desde_cero_actualizado_27julio2008-t180886.0.html

3/21

13/9/2015

Taller de Cracking desde cero - (actualizado: 27.julio.2008)

en la pila (que lo que explicar ms 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 quedara la cadena/string "hola mundo". As que como explicar
ahora EAX ha sido utiliza de "Acumulador" porque ha acumulado el resultado
de la API.
Hablaremos de los Registros Comunes de los cuales destaco:
EAX, ECX, EDX, EBX.
1.- EAX: Acumulador
- Como ya expliqu, una vez ejecutada una API, se suelen devolver
principalmente el o los resultados a EAX.
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 especfico.
3.-ECX: Contador
- ste sera en el ejemplo anterior el que hace de contador, con una
instruccin tipo INC ECX cada vez se ira sumando de 1 en 1 hasta llegar al
nmero del registro BASE (EBX) 10, as que utilizando estos dos ltimos
ejemplos se hara durante 10 veces una funcion (por ejemplo, multiplicar por
3 diez veces). Ej:
Citar
N otas : E A X = 1 ; E BX = 1 0

Inicio:
MUL EAX, 3 ; M U L : M ultiplic a 2 regis tros almac enando en el primero.
INC EC X
C MP EC X, EBX
JNE Inicio ; J N E : es un s alto c ondic ional (J N E : J U M P I F N O T E Q U A L / Salta s i no es igual) que
va hac ia la direc c in que le indiques s iempre y c uando el res ultado de la c omparac in anterior s ea
desigal.

4.-EDX: Datos
- ste es utilizado tambin antes de invocar a una API para darle los datos.
3.- LA PILA: Parte I
Qu es la PILA?
- Tcnicamente es una estructura de datos, del tipo LIFO (del ingls Last In
First Out, ltimo en entrar, primero en salir). Te x to e x trado de la wik ipe dia. .
y vosotros os preguntaris, que esto de una estructura?, Bien. Imaginad
que formamos una ventana, o por ejemplo, el tpico mensaje de texto. En
ste caso es la API MessageBoxA .

En ste caso vemos 3 partes claramente identificables:


- Ttulo : "Delete".
- Cuerpo : "Do you really want to Delete this Record?".
- Botones : " YesNo".
Y claro, aqu es donde entra el papel de la pila, antes de invocar a la API
MessageBoxA1 tenemos que indicarle todos estos datos para que nos la forme
tal y como nosotros le hemos indicado. En Ensamblador, (a nivel de cdigo
mquina), sto sera visualizado as:
http://foro.elhacker.net/ingenieria_inversa/taller_de_cracking_desde_cero_actualizado_27julio2008-t180886.0.html

4/21

13/9/2015

Taller de Cracking desde cero - (actualizado: 27.julio.2008)

1 Me ssage Box A e s la API e ncargada de lanzar e se m e nsaje tipo "caja de te x to" que
puse e n la im age n.

Citar
PUSH Ttulo
PUSH Cuerpo
PUSH Botones
C ALL MessageBoxA

Entonces ah vemos que cada elemento es primero insertado en la pila


mediante la instruccin PUSH. La pila tiene la cualidad de lo ltimo que
metes, es lo primero que sacas. Es decir, en nuestro caso ahora la pila
tendra sta forma.
Las dire ccione s son im aginaras, norm alm e nte la pila se visualiza con las
corre spondie nte s dire ccione s hacia donde apuntan (pue de n apuntar a una cade na de
te x to que conte nga e l ttulo

00401005 Botones
00401000 Cuerpo
00401020 Ttulo
de manera que si ahora nos encontrramos con una instruccin tipo POP EAX
extraeramos Botones por ser la ltima que se introdujo hacia el REGISTRO
EAX el cual hemos indicado mediante la instruccin.
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 instruccin CALL MessageBoxA y sta se encontrara por
ejemplo en la direccin 402500 (vamos a hacer un ejemplo de donde la
direccin en la que se sitan las instrucciones):
Ate ndie ndo al e je m plo de ante s aado las m ism as instruccione s pe ro con sus
re spe ctivas dire ccione s im aginarias.

Citar

402500| PUSH Ttulo


402504| PUSH Cuerpo
402508| PUSH Botones
40250A| C ALL MessageBoxA
40250F| MOV EAX, EBX

En ste caso una vez se ejecute la instruccin CALL MessageBoxA, se


almacenar en la pila tambin la direccin de RETORNO, es decir, la direccin
en la que regresar una vez haya sido llamado. Atendiendo al ejemplo de
antes la pila en ste caso quedara as.
00401008
00401005
00401000
00401020

RETURN to 40250F
Botones
Cuerpo
Ttulo

As como vemos, tambin se a almacenado la direccin 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 entendis completamente no os preocupis, es normal, a medida
que lo vayamos viendo todo tomar forma y os saldr mecnicamente.
4.- LOS REGISTROS: PARTE II [PRCTICAS]
Ahora im aginem os v arias situaciones, v oy a escribir unas instrucciones
y quiero que m e digis el v alor de los registros finales. (si queris
responder a un priv ado m e alegrar v er que seguis el curso, aunque
seam os lentos ).
Cita de: Ejercicio 1
MOV EAX, 1530h
ADD EAX, 1000h
SUB EAX, 500h
http://foro.elhacker.net/ingenieria_inversa/taller_de_cracking_desde_cero_actualizado_27julio2008-t180886.0.html

5/21

13/9/2015

Taller de Cracking desde cero - (actualizado: 27.julio.2008)

MOV EBX, 100h


SUB EAX, EBX

Normalmente cuando crackeamos utilizamos registros de 32 Bit, entre los


cuales podemos encontrarnos EAX, EBX, ECX, EDX, etc. Pero stos se
componen de varias partes segn tamao:
EAX (32 bits)
se descompone en:
AX (16BIT)
que ste mismo se descompone en:
AH y AL (8 Bit cada uno)
Para que veis un ejemplo sobre el valor:
12345678 => EAX
12345678 => AX
12345678 => AH
12345678 => AL
Siempre debemos estar al tanto de sobre QUE valores trabajamos, es decir,
si nos encontramos una instruccin tipo:
Citar
MOV AL, 5

Sabemos que slamente hay una posibilidad, pero tambien debemos saber a
que parte de EAX corresponde, porque si fuese AX por ejemplo ya cambiara
la posicin del movimiento.
Mas adelante veremos como se trabaja con "punteros", y ah deberemos
tener bien claro stas correspondencias:
DWORD -> EAX
WORD -> AX
BYTE
-> AH y AL
Citar
Ejercicio 2:
MOV EAX, 00004932h
ADD AX, 45h
SUB AL, 0Ah

5.- SALTOS CONDICIONALES Y BANDERAS: PARTE I [PRCTICAS]


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 direccin 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
C MP EAX, EBX
JE 401000

la primera instruccion compara el contenido de EBX con el contenido de EAX,


el resultado de la comparacion pondra a 1 la BANDERA "Z" si es corrercto, y
a 0 si no lo es.
y la siguiente instruccion saltar si la comparacin ha sido correcta (JUMP IF
EQUAL => JE) ha la direccion "401000".
http://foro.elhacker.net/ingenieria_inversa/taller_de_cracking_desde_cero_actualizado_27julio2008-t180886.0.html

6/21

13/9/2015

Taller de Cracking desde cero - (actualizado: 27.julio.2008)

En ste ejemplo comprobamos 2 cosas, que hay unas banderas que se


activan o bien con 0 o con 1 en funcin de las operaciones aritmticas que
vayan generandose a lo largo del programa, y que hay instrucciones que
actuan en funcin de las mismas, veamos que tipos de satos hay:
JE
JNE o JNZ
JB
JBE
JP
JPE
JL
JLE
[CONTINUAR]
EN CONSTRUCCIN
ltima modificacin: 23 Enero 2011,
20:16 por Shaddy

En lnea

"Si buscas resultados diferentes, no hagas siempre lo mismo" (Albert


Einstein)
http://abssha.reversingcode.com
http://www.reversingcode.com
karmany
Moderador
Desconectado

Re: Taller de Cracking desde 0


Respuesta #3 en: 28 Septiembre 2007, 22:38

OllyDBg - Asndonos con OllyDBG

Mensajes:
1.507
Pequea Introduccin.

Sueas que
sueas

Habiendo una gran cantidad de debuggers en la actualidad, Por qu vamos


a hacer la introduccin con OllyDBG?
Ciertamente existen muchsimos debuggers, pero OllyDBG, desde su
aparicin, tuvo muchos adeptos; tal vez por su sencillez, por su intuicin, por
su apariencia o quiz por la gran cantidad de tutoriales que se hicieron y se
siguen haciendo, ha sido y es un programa muy utilizado.
Cuando una persona empieza a manejar un programa, necesita informacin y
OllyDBG creemos que es un debugger del que se ha hablado muchsimo y
solamente con ver "Introduccin al OllyDBG desde cero" realizado por Ricardo
Narvaja ya tenemos una base impresionante no slo para empezar, sino para
obtener un nivel ms que aceptable.
OllyDBG es un debugger con el que hemos estado muchsimas horas, por
este motivo, nos va a facilitar enormemente nuestra labor.
La idea de este: "asndonos con OllyDBG" es iniciar a todo forero en su uso e
ir perdiendo el miedo a utilizarlo. Posteriormente ya se podrn tratar otros
temas o leer otros tutoriales o... utilizar otros programas...

Presentacin de OllyDBG.
OllyDBG es principalmente un debugger para aplicaciones a 32 bits en
Microsoft Windows. Es un debugger en Ring3.
Tiene muchsimas otras opciones e incluso es posible la utilizacin de plugins
(o si eres programador hacerlos t mismo) que hacen de l un programa
verdaderamente potente.
Para conocer sus caractersticas podemos visitar su pgina Web:
http://www.ollydbg.de/
http://foro.elhacker.net/ingenieria_inversa/taller_de_cracking_desde_cero_actualizado_27julio2008-t180886.0.html

7/21

13/9/2015

Taller de Cracking desde cero - (actualizado: 27.julio.2008)

Para descargar el programa podemos descargar la versin 1.10 bsica, sin


ningn plugin y ninguna modificacin desde su pgina web, aqu:
http://www.ollydbg.de/odbg110.zip
Sin embargo, yo recomiendo descargar el OllyDBG de ShadowDark, que es un
OllyDBG modificado para no ser reconocido, con unas cuantas opciones ms y
con los plugins ms utilizados. Se puede descargar de aqu:
http://www.ech2004.net/download.php?archivo=123&tipo=h
http://rapidshare.com/files/66787872/OllyShadow.rar
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, tambin llamada
"ventana del desensamblador") y la podemos seleccionar de este modo:
-En el menu: View --> CPU
-Pulsando Alt + C
-O bien pulsando el botn "C" de (CPU) que hay en la barra de herramientas.
Si dejamos el ratn sobre este botn nos mostrar abajo a la izquierda: Show
CPU (Alt+C)
Su interfaz es la siguiente:
Fig.1
Podemos dividirla del siguiente modo:
Imagen original de The Pope (Fig.2)
Vamos a examinar ms detenidamente las ventanas marcadas en color, una
por una:

ltima modificacin: 21 Julio 2008,


16:17 por karmany

karmany
Moderador
Desconectado
Mensajes:
1.507

Sueas que
sueas

En lnea

Ventana de desensamblado
Respuesta #4 en: 18 Noviembre 2007, 17:59

1.0 Ventana de desensamblado - OllyDBG:


Esta ventana (subventana mejor dicho) est dividida a su vez en 4 columnas.
Existe una barra para describir estas cuatro columnas y la podemos hacer
aparecer o desaparecer pulsando el botn derecho dentro de la ventana de
desensamblado (CPU) y seleccionando: Appearance --> Show bar o Appearance
--> Hide bar respectivamente.
La imagen de la ventana de desensamblado con la barra descriptiva
comentada es la siguiente:
1) La primera columna "Address" muestra la direccin donde se ejecutar el
cdigo.
2) La segunda columna "Hex dump" muestra los bytes que forman la
instruccin que hay a la derecha (columna "Disassembly).
3) La tercera columna "Disassembly" indica el desensamblado propiamente
dicho. Como ya se ha hablado antes de l, no hace falta explicar mucho ms.
4) La ltima columna "Comment" nos puede mostrar: comentarios propios,
cadenas de texto, direcciones, nombres de funciones y direcciones, datos que
vamos a insertar en la pila a cierta funcin o API etc... que nos pueden ayudar
muchsimo.
Tomemos la primera linea:
Address
Hex dump
40125C
68 2C 14 40 00

Disassembly
PUSH 40142C

http://foro.elhacker.net/ingenieria_inversa/taller_de_cracking_desde_cero_actualizado_27julio2008-t180886.0.html

Comment
8/21

13/9/2015

Taller de Cracking desde cero - (actualizado: 27.julio.2008)

La direccin donde se ejecuta ese PUSH 40142C es 40125C.


Los bytes que forman la instruccin PUSH 40142C son 68 2C 14 40 00,
donde Olly ha hecho el desensamblado correcto, sabiendo que 68 equivale a
PUSH y 2C 14 40 00 equivale al valor: 0040142C ya que ese PUSH (68)
requiere como dato 4 bytes.
Bien sencillo.
Address:
Si cliqueamos dos veces sobre esta columna veremos, cmo 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 direccin en rojo.
Para ver todos los breakpoints que hemos colocado podemos verlos en:
View --> Breakpoints o Alt+B
Podemos tambin modificar los bytes, copiarlos, pegarlos, convertirlos a ceros
o en NOP's etc... pulsando botn derecho y seleccionando Binary y sus
submenus.
Disassembly:
Si cliqueamos dos veces (o pulsamos la tecla del espacio), se abrir una
pequea ventana en donde podremos escribir nosotros mismos la instruccin
que queramos. Tiene una opcin: "Fill will NOP's": Si se tilda rellenar con
NOP's lo que quede de la instruccin que hemos modificado, por el contrario,
si no se tilda, lo que quede de cdigo ser de nuevo ensamblado dando
posibles resultados inesperados. (Yo recomiendo tildarla).
Una de las cosas que hacen ms fcil escribir en ensamblador desde el propio
OllyDBG, es que permite escribir instrucciones sin poner por ej. el
tamao(BYTE-WORD-DWORD). Por ejemplo, sea la siguiente instruccin:
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 automticamente pondr: MOV EAX,DWORD PTR DS:[400000].
Si nos equivocamos siempre tenemos la opcin: Botn derecho -->Undo
Selection para restaurar lo original.
Comment:
OllyDBG rellena adecuadamente todos los comentarios necesarios, que hacen
que el cdigo sea mucho ms entendible.
Nosotros del mismo modo, podemos modificar cualquier comentario y poner lo
que nosotros queramos...a fin de que sea ms fcil despus entender todo.
Simplemente cliqueamos dos veces sobre esa columna y aparecer una
pequea ventana que pondr de ttulo: "Add comment" o "Change comment"
(aadir comentario o modificar comentario). Si modificamos un comentario que
tena ya OllyDBG, podemos simplemente borrar el nuestro y automticamente
volver a aparecer el original.
Poner un comentario propio es realmente muy til y adems nos puede
ayudar posteriormente a recordar ese punto... por ejemplo, imaginemos lo
siguiente:
0040100A DEC EAX, podra ser que en EAX hubiera por ej. el nmero de
vidas y en este momento nos la disminuye en una (DEC EAX). Podramos
poner de comentario: "Quita una vida".
Si despus no nos acordamos de la direccin podemos buscarla pulsando
botn derecho --> Seach for --> user-defined comment y ah veremos nuestro
"Quita una vida".
La ventana de desensamblado es la ms utilizada, as que hay que conocerla
un poco ms a fondo en su manejo, ya que es posible que tengas que estar
frente a ella muchas horas...
Vamos a ver ahora la barra de herramientas, y lo relacionado con esta
ventana de desensamblado. Los primeros botones que he numerado son los
siguientes:
El primero (el que est debajo de la C, no lo he numerado porque
http://foro.elhacker.net/ingenieria_inversa/taller_de_cracking_desde_cero_actualizado_27julio2008-t180886.0.html

9/21

13/9/2015

Taller de Cracking desde cero - (actualizado: 27.julio.2008)

sencillamente es el que abre el cuadro de dilogo para abrir un archivo). Los


siguientes y por orden tienen la siguiente funcin:
1.- Equivale a pulsar "Ctrl+F2" o ir al men "Debug --> restart". Reinicia de
nuevo la depuracin del programa. Segn la configuracin 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.
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 instruccin por instruccin entrando en todas las call y subrutinas.
6.- Equivale a pulsar "F8" o ir al men "Debug --> Step Over". Hace ir al
debuger instruccin por instruccin 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 botn 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 direccin, y tras aceptar, en la ventana de desensamblado
podremos ver el cdigo que hay en dicha direccin.
Tenemos muchas ms opciones pulsando el botn derecho, o seleccionando
en los diferentes mens. Veremos las ms importantes.
Aunque para los recin iniciados sea un poco lioso recordar todo, en el
siguiente apartado haremos unos sencillos ejemplos utilizando lo ms bsico.
Veremos cmo manejarnos en la ventana de desensamblado.

ltima modificacin: 21 Julio 2008,


16:28 por karmany

karmany
Moderador
Desconectado
Mensajes:
1.507

En lnea

Ejemplos ventana de desensamblado


Respuesta #5 en: 18 Noviembre 2007, 18:14

1.1 Ejemplos en Ventana de desensamblado


- OllyDBG:
Vamos a manejarnos un poco con lo ms bsico en esta ventana.
Voy a abrir un programa cualquiera con el OllyDBG y pongo una imagen de la
ventana de desensamblado:

Sueas que
sueas

Estamos parados en el OEP (Punto de Entrada Original) del programa. Si se


observa un poco vemos en la imagen un salto a la librera MSVBVM60, por lo
tanto podemos ya imaginarnos que se trata de un programa compilado con
Visual Basic.
Vamos a hacer unos pequeos ejerccios:
1.- Ir a la direccin 418E80.
-Como expliqu en el prrafo anterior podemos o bien pulsar el botn nmero
10 de la siguiente imagen:
o bien, podemos pulsar Ctrl+G o botn derecho --> Goto --> Expresion.
De estas 3 formas se nos abrir una ventana y ah podremos poner la
direccin a la que queremos ir: 418E80:

http://foro.elhacker.net/ingenieria_inversa/taller_de_cracking_desde_cero_actualizado_27julio2008-t180886.0.html

10/21

13/9/2015

Taller de Cracking desde cero - (actualizado: 27.julio.2008)

pulsamos Ok y nos llevar directamente a esa direccin.


2.- Poner un Breakpoint (BP - lugar donde parar el debugger) en 418E80
Lo primero vamos a la direccin 418E80, explicado en el punto anterior.
Una vez ah, pulsamos simplemente F2, o botn derecho --> Breakpoint -->
Toggle o simplemente 2 clicks en la columna "Hex dump" y veremos cmo se
pone la direccin en rojo. Ya tenemos puesto el punto de ruptura.
En este punto, voy a aadir que OllyDBG nos permite poner varios tipos de
BP. Hemos visto el ms comn y tpico, pero tambin podra ser necesario que
parase en 418E80 solamente cuando por ej. el registro EAX sea igual a 2
(botn derecho --> Breakpoint --> Condicional) y ah pondramos la
condicin, que no se va a explicar aqu.
Otro tipo de BP son los Hardware Breakpoints. Slo podemos poner 4. Si
pulsamos botn 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 ms de 4, OllyDBG
nos avisar que debemos borrar uno.
3.- Modificar una instruccin
Imaginemos que tenemos lo siguiente:
402E40 DEC EAX
Despus de analizar el cdigo detenidamente, sabemos que ese DEC EAX (en
mi programa) lo que hace es disminuir una vida. Como yo no quiero que me
quite una vida, pues voy a modificar ese cdigo.
Puedo hacerlo de varias formas:
-NOPEAR TODO: Nos ponemos sobre esa linea y pulsamos botn derecho -->
binary --> Fill with NOPs y as rpidamente ya tenemos todo lleno de NOPs.
-DEC EAX se compone de un slo byte. En la columna dissasembly podemos
clickear dos veces y nos saldr una ventana donde podremos modificar el
cdigo. Por ej. podramos poner: NOP y tendremos lo mismo que antes, o
simplemente INC EAX y nos incrementar EAX u otra cosa que se nos ocurra.
-Modificar el byte. En la columna Hex dump, podemos pulsar botn derecho -> Binary --> Edit y podemos modificar el byte.
4.- Ir a MessageBoxA
Los ms Newbies desconocen esta opcin. Lo primero que tenemos que
asegurarnos es que se haya cargado la librera correspondiente.
Me explico. Por ejemplo la funcin 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 direccin:
pulsar el botn nmero 10 de la siguiente imagen:
o bien, podemos pulsar Ctrl+G o botn derecho --> Goto --> Expresion
Y ah escribimos: MessageBoxA, y OllyDBG nos llevar ah.
5.- Poner un comentario
Es posible que algn cdigo ya sepamos exactamente lo que hace. Para ver
todo mucho ms sencillo podemos poner nuestro propio lenguaje. Por ej.
401200 DEC EAX <-- Quita un da
...
402000 Call 4032EC <-- Call que pone un botn activado
etc...
De este modo, cuando lleguemos a este cdigo ya sabemos qu hace
exactamente todo y no tenemos que volver a analizar.
Para poner comentarios, como ya se ha explicado, podemos por ej. pulsar dos
veces en la columna "Comment" y se abrir una ventana y ah podremos
poner lo que queramos.
Esto aunque parezca una tontera, es realmente muy til, sobre todo a la
hora de trabajar con programas con mucho cdigo. Tambin nos ayuda a
encontrar las zonas que nos interesan, ya que podemos buscar nuestros
propios comentarios.
Para buscar nuestros comentarios pulsamos botn derecho --> Search for -->
user-defined comment y podremos seleccionar lo que queramos. Muy til.
6.- Me he movido por el cdigo y ahora no s volver donde estaba antes.
Estamos parados en un determinado cdigo. Ahora vamos a una direccin y
despus a otra. Podemos volver a las dos anteriores simplemente pulsando
http://foro.elhacker.net/ingenieria_inversa/taller_de_cracking_desde_cero_actualizado_27julio2008-t180886.0.html

11/21

13/9/2015

Taller de Cracking desde cero - (actualizado: 27.julio.2008)

la tecla "-" (menos). Si queremos ir ahora para adelante podemos pulsar la


tecla "+" e iremos de nuevo a la ltima direccin que estuvimos.
Es posible tambin que lo que se quiera sea ir al lugar donde estaba
detenido el debugger. Esto es muy fcil, 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 tambin pulsar la tecla "C" de la barra de herramientas.
7.- Acabo de entrar en una CALL de una librera. Quiero volver al cdigo
de donde fue llamada.
Una opcin manual sera ir a cada RET pulsando Ctrl+F9 y despus F7 para
pasar el RET y haciendo esto llegaramos a nuestro cdigo donde ha sido
llamada la CALL.
Hay una opcin que tiene OllyDBG y que nos puede facilitar este trabajo:
simplemente pulsando Alt+F9 (Execute till user code).
8.- Quiero que el cdigo se ejecute hasta donde tengo el cursor puesto.
Pinchamos (hasta que marque en color) sobre un determinado cdigo 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 muchsima muchsima gente. Voy a explicar la teora de
cmo hay que modificarlo y explicar la forma de hacerlo de manera muy
SENCILLA con OllyDBG sin utilizar ningn Editor Hexadecimal y por lo tanto
sin calcular el Offset:
Imaginemos por ejemplo que en la direccin 401000 tenemos lo siguiente:
401000 PUSH EBP ;push ebp corresponde al byte 55h.
Bien, nosotros hemos modificado ese PUSH EBP (55h) y hemos querido dejar
un NOP, entonces veramos lo siguiente:
401000 NOP ;nop corresponde a 90h
Ya tenemos el cambio que queremos hecho. Ahora viene la pregunta:
Cmo puedo guardar el exe (dll o lo que sea) con este nuevo cambio que
acabo de hacer? Con OllyDBG lo haremos en tres pasos:
1.-Pulsamos botn derecho (en cualquier lugar en la ventana de
desensamblado) y elegimos:
Copy to executable --> All modifications
2.-Se abrir una nueva ventana con 4 botones que nos dice lo siguiente:
"Copy selection to executable file?" Pulsamos en el botn: "Copy All"
3.-Y finalmente en la nueva ventana que aparece pulsamos botn derecho y
elegimos: "Save file".
De este modo tan sencillo ya lo tenemos modificado .

TEORA de

este punto 9. Esto que voy a explicar lo considero muy


importante, muy esencial y que todo el mundo, ya seas iniciado o no debe
saber.
Voy a tratar el punto 9 pero sin OllyDBG y entendiendo todo, y lo vamos a
modificar manualmente.
Voy a utilizar un programa fcil de conseguir y que nos servir de gua:
OllyDBG 1.10. Lo vamos a abrir con un editor de PE (encabezado). Hay
muchsimos programas, cada uno que elija el que ms le guste.
Nos vamos a ir a ver las secciones y si miramos las del OllyDBG
encontraremos lo siguiente:
Cdigo:
Name

Virtual Offset

Virtual Size

http://foro.elhacker.net/ingenieria_inversa/taller_de_cracking_desde_cero_actualizado_27julio2008-t180886.0.html

Raw Offset o

Raw
12/21

13/9/2015

Taller de Cracking desde cero - (actualizado: 27.julio.2008)

Size o

Flags
PointerToRawData

SizeofRawData
.text
1000
AE800
60000020
.data
B0000
1D200
C0000040
.tls
10B000
200
C0000040
.rdata
10C000
200
50000040
.idata
10D000
1E00
40000040
.edata
10F000
1400
40000040
.rsrc
111000
35A00
40000040
.reloc
147000
BE00
50000040

AF000

600

5B000

AEE00

1000

CC000

1000

CC200

2000

CC400

2000

CE200

36000

CF600

C000

105000

Columna por columna:


-Name: Indica el nombre de la seccin.
-Virtual Offset o Relative Virtual Address: Es la direccin virtual relativa a la
Image Base donde se encuentra la seccin. Muchas veces la veremos
nombrada como RVA (Relative Virtual Address. No hay que confundirla con la
Virtual Address ya que a esta ltima se le suma la Image Base. La mayora
de los programas tienen la Image Base igual a 400000h.
Ejemplo de esto ltimo: (datos del OllyDBG que hemos abierto con un Editor
PE)
Image Base: 400000h
RVA donde comienza la seccin ".text": 1000
Por lo tanto la Direccin Virtual (Virtual Address) donde comienza la seccin
.text es:
Image Base + RVA = VA; VA = 400000 + 1000 = 401000.
Esto nos quiere decir que la seccin .text comienza en la direccin virtual
401000. Se puede comprobar si abrimos un OllyDBG con otro OllyDBG y vamos
a esta direccin: veremos que es la primera instruccin...
-Virtual Size: Es el tamao virtual de la seccin. Por ej. el tamao virtual de la
seccin .text son AF000h bytes.
-Raw Offset o PointerToRawData: indica el desplazamiento dentro del
archivo donde comienza la seccin. Ahora que ya sabemos un poco voy a
entrar un peln en detalle. Sabemos lo siguiente:
-que la Image Base es 400000h
-que la seccin .text comienza en el RVA 1000
-que la primera instruccin (desensamblarlo) es JMP SHORT 00401012 que
corresponde a los 2 bytes: EB 10
-que esta primera instruccin se encuentra en VA 401000
Ejemplo1
Pregunta: Estos dos bytes (EB 10) que se encuentran en RVA 1000, Dnde
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
seccin .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:
Cdigo:
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.(.
Perfecto, ah tenemos los dos bytes.
http://foro.elhacker.net/ingenieria_inversa/taller_de_cracking_desde_cero_actualizado_27julio2008-t180886.0.html

13/21

13/9/2015

Taller de Cracking desde cero - (actualizado: 27.julio.2008)

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 direccin
cualquiera...:
Cdigo:
0046123E
00461241

8B 4E 14
8B 53 14

MOV ECX,DWORD PTR DS:[ESI+14]


MOV EDX,DWORD PTR DS:[EBX+14]

Tenemos de nuevo los siguientes datos:


-Image Base = 400000h
-RVA (.text) = 1000h
-Raw Offset = 600h
En la direccin virtual 46123E encontramos los bytes 8B 4E 14.
Como la Image Base es 400000, tenemos que:
46123E - 400000 = 6123E que es una direccin virtual relativa (RVA).
Sabemos que la VA 46123E se encuentra dentro de la seccin .text. Cmo s
esto? Pues porque si miris la tabla que puse del editor de PE tenemos que:
-La RVA del comienzo de la seccin .text = 1000h
-El tamao virtual (virtual size) de la seccin .text = AF000
Por lo tanto 6123E es mayor que 1000 y menor que AF000, por esto se
encuentra dentro de .text.
Sigo. Como la seccin .text comienza (RVA) en 1000h tenemos que:
6123E - 1000 = 6023E que es el desplazamiento en la seccin .text, por este
motivo, podemos sumar 6023E al offset de inicio de la seccin .text en el
mismo ejecutable, as:
600h (Raw Offset) + 6023E (desplazamiento) = 6083E (offset buscado)
Veamoslo mirando un editor hexadecimal:
Cdigo:
00060830 73 6D B8 01 00 00 00 EB 66 83 FA 06 75 2F 8B 4E
sm....f.u/N
00060840 14 8B 53 14 81 E2 FF 00 00 00 81 E1 FF 00 00 00
.S.........
Viendo esto, podemos poner una frmula general:
VA = Direccin Virtual que queremos saber dnde se encuentra en el
ejecutable.
RVA (.seccin) = Es la RVA del comienzo de la seccin en la que se encuentra
VA
Raw Offset (.seccin) = Es el offset del comienzo de la seccin en la que se
encuentra VA.
ImageBase = Es la ImageBase
VA - ImageBase - RVA(.seccin) + Raw Offset (.seccin)
Con esta frmula voy a hacer el ltimo ejemplo:
Ejemplo3
VA = 4BF008 (bytes que contiene: 44 F2 4B...) Est dentro de la seccin .data
RVA (.data) = B0000h
Raw Offset (.data) = AEE00h
Image Base = 400000h
4BF008 - 400000 - B0000 + AEE00 = BDE08 (offset buscado, veamos en un
editor hexadecimal a ver:)
Cdigo:
000BDE00 00 00 00 00 04 00 00 00 44 F2 4B 00 00 00 00 00
........DK.....
000BDE10 00 00 00 00 0F 00 00 00 0D 00 00 00 46 00 00 00
............F...
http://foro.elhacker.net/ingenieria_inversa/taller_de_cracking_desde_cero_actualizado_27julio2008-t180886.0.html

14/21

13/9/2015

Taller de Cracking desde cero - (actualizado: 27.julio.2008)

SizeofRawData: Es el tamao de la seccin en el propio archivo ejecutable.


No quiero entrar ms 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.
ltima modificacin: 21 Julio 2008,
16:55 por karmany

karmany
Moderador
Desconectado
Mensajes:
1.507

Sueas que
sueas

En lnea

2. Ventana de Dump
Respuesta #6 en: 24 Diciembre 2007, 00:16

2.0 Ventana de Dump - OllyDBG:


Esta subventana es muy til tambin. En ella podemos representar los
valores hexadecimales, de muchas formas diferentes:
- Podemos ver el carcter ASCII que representa al valor hex.
- Podemos ver el cdigo UNICODE que representa a los valores hex.
- Podemos ver la representacin de punto flotante.
- Podemos ver las direcciones que pueden representar.
- Podemos ver incluso el cdigo desensamblado, aunque para esto ya
tenemos nuestra ventana de desensamblado.
- Podemos ver un PE header con todos sus datos.
Y muchas opciones ms. Una ventana muy requetetil, que nos va a ayudar
enormemente en nuestra labor.
Esta subdividida en varias columnas. Normalmente se suele utilizar la
apariencia de la imagen anterior, que est dividida en 3 columnas.
Address --> direccin donde se encuentran los bytes
Hex dump --> los valores hexadecimales
ASCII --> el carcter ASCII del valor hexadecimal
Como se observa en la imagen, he utilizado un tamao por fila de 16 bytes.
Con otras visualizaciones el manejo es similar.
Si pulsamos sobre cualquier valor hexadecimal o sobre cualquier dato ASCII,
OllyDBG sombrear el valor hexadecimal y el cdigo ASCII al que corresponde.
Podemos seleccionar el nmero de bytes que queramos.
Si pulsamos con el botn derecho del ratn veremos un men similar al de la
ventana de desensamblado.
Explicar todas las opciones o todo lo que podemos hacer podra resultar
bastante extenso, montono, aburrido y poco eficaz, as que pienso que lo
mejor es practicar con unos sencillos ejemplos.

ltima modificacin: 21 Julio 2008,


16:37 por karmany

karmany
Moderador

En lnea

Re: Taller de Cracking desde 0


Respuesta #7 en: 5 Febrero 2008, 23:21

Desconectado

2.1 Ejemplos en Ventana de Dump - OllyDBG:

Mensajes:
1.507

Vamos a realizar unos pequeos ejerccios:


1.- Modificar un byte:
Vamos a partir de la imagen anterior:

http://foro.elhacker.net/ingenieria_inversa/taller_de_cracking_desde_cero_actualizado_27julio2008-t180886.0.html

15/21

13/9/2015

Taller de Cracking desde cero - (actualizado: 27.julio.2008)

Sueas que
sueas

Podemos observar por ejemplo, que en la direccin 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 botn izquierdo del ratn sobre el byte). Ahora
tenemos varias opciones:
1-Pulsar botn derecho del ratn y seleccionar binary --> Edit:
Se nos abrir una nueva ventana:
Como se observa, en el ttulo tenemos la direccin y podemos modificar
directamente el cdigo ASCII, UNICODE o el mismo byte en hexadecimal.
Como es lgico si se pone algo en UNICODE nos aadir un nuevo byte.
Como queremos poner una "R", nos pondremos sobre la "V" (ASCII) y
simplemente la sustituimos. Pulsamos en "OK" y veremos cmo nuestra
modificacin se ha puesto en rojo y nos ha sustituido la "V" por la "R" (en
hexadecimal: 4C(L) por 52(R).
2-Simplemente cuando est seleccionado nuestro byte pulsamos cualquier
dgito hexadecimal y se nos abrir de nuevo la ventana anterior. Estaremos
modificando directamente el valor hexadecimal. As que podremos teclear 52 y
pulsamos Enter y solucionado.
Aqu he modificado solamente un byte, pero de igual modo podemos
seleccionar los bytes que nosotros queramos modificar y editarlos
posteriormente de esta forma explicada.
2.- Sobre cadena de texto:
Cadenas de texto = Strings (Ingls)
Cuando en la ventana de Dump vemos alguna string podemos conocer su
longitud ya que al final de la misma, ya sea ASCII o UNICODE veremos un
0(cero)(ASCII) o dos 0 (ceros)(UNICODE).
Por ejemplo en UNICODE "karmany" es:
Cdigo:
6B 00 61 00 72 00 6D 00 61 00 6E 00 79 00 00
k
a
r
m
a
n
y
3.- Quiero copiar 4 bytes y pegarlos en otro sitio:
OllyDBG tiene esta opcin tan necesaria que es poder copiar los bytes que
nosotros queramos y pegarlos en cualquier otro lugar.
Por ejemplo, en la imagen anterior de la ventana de dump, vamos a copiar los
4 bytes (1 dword) que hay en 402BD0 (56 42 35 21) y los vamos a pegar en
401264.
Primero seleccionamos el/los bytes que queramos (en este ejemplo slo
seleccionaremos 4. Ahora pulsamos botn derecho del ratn y seleccionamos:
Binary --> Binary Copy. Y de esta forma tan sencilla ya los tenemos copiados.
Ahora seleccionamos los 4 bytes donde vamos a pegarlos. Si seleccionamos
menos (por ej. 3), OllyDBG slo modificar los que hemos seleccionado y
simplemente pulsamos botn derecho del ratn sobre ellos y pulsamos en:
Binary --> Binary Paste.
Esta opcin es muy til sobre todo cuando ests haciendo algn injerto y
tienes que ir modificando el cdigo. Yo incluso hice una fuerza bruta para
solucionar un crackme y los bytes que utiliz los tengo guardados en un txt.
De este modo acoplarlos despus a un nuevo crackme es mucho ms sencillo
que empezar de cero.
4.- He seleccionado un gran nmero de bytes. Quiero saber cmo ponerlos
todos a 0 (cero) o cmo ponerlos todos a FFh:
Es muy sencillo, cuando ya tengamos todos los bytes que queramos
pulsamos botn derecho del ratn y seleccionamos Binary se nos desplegar
un submen y ah tenemos las 2 opciones:
-sustituir lo seleccionado por ceros: Fill with 00's
-sustituir lo seleccionado por FF: Fill with FF's

http://foro.elhacker.net/ingenieria_inversa/taller_de_cracking_desde_cero_actualizado_27julio2008-t180886.0.html

16/21

13/9/2015

Taller de Cracking desde cero - (actualizado: 27.julio.2008)

Como observaris, en la ventana de dump pone sustituir por FF mientras que


en la ventana de desensamblado, pone sustituir por 90 (NOP).
5.- Me gustara poner un Breakpoint a un byte cuando sea modificado
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.
Podramos averiguar cundo se quita esa vida simplemente poniendo un
breakpoint cuando el byte sea modificado. Esto se hace as:
-Seleccionamos el byte en cuestin (el 04 en este ejemplo)
-pulsamos botn derecho del ratn y seleccionamos Breakpoint
-Tenemos dos opciones:
Poner un BP (breakpoint). Seleccionamos Memory, on write
Poner un HBP (Hardware BreakPoint). Seleccionamos Hardware, on write -->
Byte
Para saber cuntos HBP tenemos puestos podemos seleccionar en el men
de OllyDBG en: Debug --> Hardware breakpoints
5.- Aparece una cadena muy larga y la quiero copiar
A veces, es posible que queramos copiar una cadena larga que aparezca en
la ventana de dump. Copiarla dgito a dgito podra ser un poco largo y
podramos equivocarnos as que podemos seleccionar dicha cadena y pulsar
botn derecho del ratn --> copy --> To clipboard (tambin podemos usar el
tpico Ctrl+C).
Creamos o abrimos un documento de texto y pegamos.
6.- Cmo ir a una direccin determinada
Simplemente pulsamos el botn derecho del ratn y seleccionamos Goto -->
expresion (lo mismo que pulsar Ctrl+G). En el siguiente cuadro ponemos la
direccin que queramos y pulsamos Ok.
7.- Cmo examinar el encabezado (PE header) de un programa desde
OllyDBG
OllyDBG tiene opciones muy interesantes. Modemos decirle a OllyDBG que nos
muestre toda la informacin de un PE header (encabezado).
Normalmente en un programa cualquiera el PE header aparece en la direccin
400000 (generalmente). Por este motivo, nos dirigimos a la direccin 400000
en la ventana de dump y ahora le vamos a decir a OllyDBG que nos muestre
dicha informacin como PE header:
Botn derecho del ratn --> especial --> PE header
Para volver despus como estaba antes:
Botn derecho del ratn --> Hex --> Hex/ASCII (16 bytes)

ltima modificacin: 27 Julio 2008,


12:34 por karmany

karmany
Moderador
Desconectado
Mensajes:
1.507

En lnea

3.0 Ventana de Registros


Respuesta #8 en: 27 Julio 2008, 12:50

3.0 Ventana de Registros - OllyDBG:


Los registros son utilizados para guardar o acceder rpidamente a distintos
valores. Este tema de los registros ya fue explicado muy bien por Shaddy.
La Ventana de Registros nos da informacin acerca de los mismos. Podemos
observar qu es lo que contiene cada registro, modificar su contenido,
incrementar o disminuirlo en una unidad rpidamente y un largo etc...

Sueas que
sueas

El registro EIP es la direccin en la que nos encontramos y muchas veces en


esta ventana de registros si esa direccin coincide con una funcin, o con
cualquier dato relevante, nos puede mostrar dnde se encuentra. En este
caso vemos que se encuentra en el Entry Point.

http://foro.elhacker.net/ingenieria_inversa/taller_de_cracking_desde_cero_actualizado_27julio2008-t180886.0.html

17/21

13/9/2015

Taller de Cracking desde cero - (actualizado: 27.julio.2008)

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!)
Para lo que estamos aprendiendo yo recomiendo que lo dejis en Registers
(FPU), tal como se ve en la imagen. La diferencia con las otras dos vistas es
que en esta (FPU) se muestran los registros ST(0)....ST(7) que son utilizados
para realizar operaciones de punto flotante. Slo quedaros con eso no
entraremos en ms detalles.
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:
Cdigo:
EAX 00000000
ECX 0013FFB0
EDX 7C91EB94 ntdll.KiFastSystemCallRet
EBX 7FFDF000
ESP 0013FFC4
EBP 0013FFF0
ESI FFFFFFFF
EDI 7C920738 ntdll.7C920738
EIP 004011C0 Crackme_.<ModuleEntryPoint>
Podemos observar como dije antes que estamos detenidos en el EntryPoint.
(EP)
Despus nos encontramos con:
Cdigo:
C1
P0
A0
Z0
S1
T0
D0
O0
Son lo denominado Flags o Banderas. Se ponen unicamente a 0 o 1 y se
modifican cuando ha ocurrido una determina instruccin(operacin).
Por ejemplo, el Flag Z o Flag Cero (vemos Z 0) se pone a cero cuando se
ejecuta una operacin y el resultado ha sido cero. Veamos:
Imaginemos que EAX vale 00000001; eax = 1
El flag Z est de momento a cero.
Y tenemos lo siguiente:
DEC eax ;con lo que eax valdr 0.
Tras esta instruccin el Flag Z se pone a 1...
Para este tutorial no entrar a explicar todos los Flags.
Seguimos. A la derecha de estos Flags vemos lo siguiente:
Cdigo:
ES 0023 32bit 0(FFFFFFFF) -> general o de string
CS 001B 32bit 0(FFFFFFFF) -> de cdigo
SS 0023 32bit 0(FFFFFFFF) -> de stack
DS 0023 32bit 0(FFFFFFFF) -> de datos
FS 003B 32bit 7FFDE000(FFF) ->segmentos def. por el usuario
GS 0000 NULL -> segmentos def. por el usuario
Son los denominados Registros de Segmento utilizados para direcciones de
http://foro.elhacker.net/ingenieria_inversa/taller_de_cracking_desde_cero_actualizado_27julio2008-t180886.0.html

18/21

13/9/2015

Taller de Cracking desde cero - (actualizado: 27.julio.2008)

memoria. No los utilizaremos.


Y finalmente:
Cdigo:
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 representacin de estos nmeros
an ms. Sobre todo en los de precisin doble. No entrar en ms detalles,
aunque he mostrado para qu valen.

ltima modificacin: 27 Julio 2008,


13:42 por karmany

karmany
Moderador
Desconectado
Mensajes:
1.507

En lnea

3.1 Ejemplo Ventana de Registros


Respuesta #9 en: 27 Julio 2008, 14:03

3.1 Ejemplos en Ventana de Registros OllyDBG:


1.- Incrementar o disminuir en una unidad un registro cualquiera:
Vamos a incrementar en uno el registro eax:
Seleccionamos el registro, pulsamos botn derecho del ratn --> increment.
Simplemente podemos hacerlo pulsando la tecla +.

Sueas que
sueas

Vamos a disminuir en uno el registro ebx:


Seleccionamos el registro, pulsamos botn derecho del ratn --> decrement.
Simplemente podemos hacerlo pulsando la tecla -.
2.- Poner un registro cualquiera a 0 o 1:
Imaginemos que eax vale FFFFFFF2. Si seleccionamos el registro y pulsamos
botn derecho del ratn veremos la opcin:
-Zero
;para poner el registro a cero
-Set to 1 ;para poner el registro a uno

3.- El registro ebx tiene una direccin. Quiero ir a esa direccin en el dump
rpidamente:
Imaginemos que ebx (o cualquier otro registro) vale 402000. Queremos ir a
esa direccin en la Ventana del Dump. Simplemente seleccionamos el registro
ebx y pulsamos botn derecho del ratn --> Follow in dump

4.- El registro ebx tiene una direccin. Quiero ir a esa direccin en la


ventana de desensamblado:
Imaginemos igual que antes que ebx (o cualquier registro) vale 402001.
Queremos ir a esa direccin en la ventana de desensamblado. Simplemente
seleccionamos dicho registro ebx, y pulsamos botn derecho del ratn -->
Follow in disassembler

5.- Quiero modificar el registro EIP:


http://foro.elhacker.net/ingenieria_inversa/taller_de_cracking_desde_cero_actualizado_27julio2008-t180886.0.html

19/21

13/9/2015

Taller de Cracking desde cero - (actualizado: 27.julio.2008)

Debes saber que si modificas dicho registro, modificas la posicin en la que se


encuentra parado el debugger. Hay que tener cuidado y saber lo que se
hace.

6.- Se ha realizado una operacin y el resultado es cero. Ahora estoy en


un JNZ, y no salta. No quiero modificar el JNZ a JE. Qu puedo hacer?
Este es el flag Z explicado antes, as que si una operacin ha dado cero, pues
el flag Z se habr puesto a 1 y por lo tanto una instruccin JNZ no saltar.
Podemos seleccionar el flag Z y pulsamos botn derecho --> Reset y veremos
cmo al cambiar el flag Z ya JNZ salta.

En contruccin
Perdonar las molestias
En lnea

Pginas: [1]

Ir a:

ir

=> I ngeniera I nvers a

Mensajes similares
Asunto

Iniciado por

Taller de programacin en C
desde cero 1 2

elohim

Respuestas Vistas ltimo mensaje


16

3,771

10 Mayo 2006,
21:12
por Jec

6,011

22 Noviembre
2007, 08:32
por Shaddy

P rogramac in C /C ++

Introduccin al C racking con


OllyDbg desde cero
I ngeniera I nvers a

Proyecto-Taller: Electrnica,
desde cero. 1 2 3

der
Unbekannte

Firos

20

E lec trnic a

problema con el WDASM EN EL


TUTORIAL DE C RAC KING
DESDE C ERO

30 Abril 2010,
26,648 05:04
por Mr.Blue

juancarlos230

3,794

LukaC rosszeria

806

I ngeniera I nvers a

[Duda] Practica 1 y 2 de Taller


de C racking desde 0
I ngeniera I nvers a

lawebdegoku
Yashira.org
Internet mvil
Underground Mxico
thehackerway

MundoDivx
indetectables.net
ADSL
El Lado del Mal
Tienda Wifi

Hispabyte
Seguridad Colombia
eNYe Sec
Blog Uxio
underc0de

30 Noviembre
2010, 23:05
por yako-_3 Octubre 2013,
17:07
por apuromafo

Truzone
Seguridad Informtica
Seguridad Wireless
DriverLandia

Todas las we bs afiliadas e stn libre s de publicidad e ngaosa.

Aviso Legal - Powered by SMF 1.1.21 | SMF 2006-2008, Simple Machines


http://foro.elhacker.net/ingenieria_inversa/taller_de_cracking_desde_cero_actualizado_27julio2008-t180886.0.html

20/21

13/9/2015

Taller de Cracking desde cero - (actualizado: 27.julio.2008)

http://foro.elhacker.net/ingenieria_inversa/taller_de_cracking_desde_cero_actualizado_27julio2008-t180886.0.html

21/21

También podría gustarte