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 1/21 Bienvenido(a), Visitante. Por favor Ingresar o Registrarse ¿Perdiste tu email de activación?. | 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 Programación Ingeniería Inversa (Moderadores: Shaddy, karmany, .:UND3R:., MCKSys Argentina) Taller de Cracking desde cero - (actualizado: 27.julio.2008) 0 Usuarios y 1 Visitante están viendo este tema. Páginas: [1] Autor Tema: Taller de Cracking desde cero - (actualizado: 27.julio.2008) (Leído 62,769 veces) Shaddy Moderador Desconectado Mensajes: 720 one_bit_manip Taller de Cracking desde cero - (actualizado: 27.julio.2008) « en: 17 Septiembre 2007, 23:54 » Taller 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.

Taller de Cracking Desde Cero

Embed Size (px)

DESCRIPTION

curso de cracking desde cero para iniciarse en el mundo del cracking

Citation preview

Page 1: Taller de Cracking Desde Cero

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 1/21

Bienvenido(a),Visitante. Porfavor Ingresaro Registrarse ¿Perdiste tu

email deactivación?.

| 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 Programación

Ingeniería Inversa (Moderadores: Shaddy,karmany, .:UND3R:., MCKSys Argentina)

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

0 Usuarios y 1 Visitante estánviendo este tema.

Páginas: [1]

Autor Tema: Taller de Cracking desde cero - (actualizado: 27.julio.2008) (Leído62,769 veces)

ShaddyModerador

Desconectado

Mensajes:720

one_bit_manipulator()

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

Taller de Cracking desde 0

INTRODUCCIÓN

¿Qué es esto del Taller de Cracking desde 0?Bien, después de juntarnos ambos, y dada nuestra experiencia, hemospensado que lo mejor para que una persona empiece a conocer estefantá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 tienenmuy pocos conocimientos (o ninguno) y que por este motivo no han queridoiniciarse en este Arte, que suele ser considerado algo complejo.Todos nuestros esfuerzos, por lo tanto, van a ir dirigidos a hacer que estagente sin conocimientos, de sus primeros pasos y logre entender losconceptos más básicos.

Estamos seguros, que a gente avanzada también les puede ayudar arecordar, así que esperamos que os guste y que pueda ayudar a "empezar acaminar"...

Como todo, hay que empezar por lo más básico, no podemos hablar dedebugger sin conocer nada de ensamblador y no podemos hablar deensamblador sin ni siquiera saber qué es el código máquina.

Page 2: Taller de Cracking Desde Cero

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 2/21

« Última modificación: 24 Diciembre2008, 01:39 por karmany » En línea

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

http://abssha.reversingcode.comhttp://www.reversingcode.com

karmanyModerador

Desconectado

Mensajes:1.507

Sueñas quesueñas

Re: Taller de Cracking desde 0« Respuesta #1 en: 18 Septiembre 2007, 22:05 »

Del Código Máquina 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 código o lenguaje máquina consta de cadenas de estos 0 y 1, que elmicroprocesador entiende directamente. Una y sólo una secuencia de estos 0y 1 realizará una determinada operación.

Programar directamente en este sistema binario, como se puede unoimaginar, puede resultar muy muy duro y es muy fácil equivocarse.Por este motivo, para facilitar la escritura de programas, podemos ayudarnosdel lenguaje ensamblador (lenguaje de bajo nivel y el que vamos a conoceraquí.), el cual utiliza nemotécnicos (normalmente abreviaturas de palabras eninglé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).

Para los que recién empiezan, imaginemos estos valores de A y B:A=3B=2por lo tanto, tras ADD A, B, nos quedaría:A=5B=2

En este punto, alguien podrá pensar:-Bueno, escribir un programa en lenguaje ensamblador no es que sea tareafácil, además existen muchos otros lenguajes de alto nivel que nos puedenfacilitar enormemente las cosas a la hora de programar... entonces...¿Por qué en ingeniería inversa hay que aprender lenguaje ensamblador?

Si abrieramos cualquier programa y echáramos una ojeada al código,observaríamos el lenguaje máquina, independientemente del lenguaje deprogramación con que haya sido programado (compilado). Es lógico, ya quecomo se ha explicado, es lo que el microprocesador entiende.Sin embargo, entender esas secuencias de 0 y 1 que hacen realizardeterminadas operaciones, es verdaderamente complicado, por este motivoexisten muchos programas que a partir del lenguaje máquina obtienen ellenguaje ensamblador, que ya es mucho más entendible al ser humano. Estosprogramas se denominan desensambladores.

Entendido todo esto, vamos a dar los primeros pequeños pasos enensamblador, del inglés Assembly.

« Última modificación: 19 Septiembre2007, 23:49 por karmany » En línea

Shaddy Re: Taller de Cracking desde 0

Page 3: Taller de Cracking Desde Cero

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 3/21

Moderador

Desconectado

Mensajes:720

one_bit_manipulator()

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

Practicando Assembly

1.- Introducción

Es importante antes de adentrarnos en el mundo de los Depuradores,Desensambladores y demás herramientas que conozcamos y tengamos unabuena noción de lo que es el Assembly. Empezaremos suave, haciendobreves ejemplos y poco a poco.

2.- Instrucciones Básicas: Parte I

Comenzaremos por las instrucciones más básicas, con breves explicaciones yejemplos:

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 pasaría a ser igual que el valor de B.

CMP: Compara el valor de dos registros.

Ej: CMP A, B. Se efectúa una comparación entre A y B.

TEST: Compara el valor de dos registros.

Ej: TEST A, B. Se efectúa una comparación entre A y B.

Nota: En capitulos posteriores escribiremos la diferencia entre 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 guardaría 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 guardaría en (A).

INC: Incrementa el valor en 1 de un registro.

Ej: INC A. Se incrementaría el valor de A en 1.

DEC: Decrementa el valor en 1 de un registro.

Ej: DEC A. Se decrementaría el valor de A en 1.

2.- Los Registros: Parte I

Antes de adentrarnos en los Registros quiero hacer un breve comentariosobre las API.

Bien, en cualquier programa compilado bajo windows se utilizan unasdenominadas API, éstas son básicamente las que forman todo lo quepercibes, así como ventanas, botones, movimientos del ratón, etc... y tambiéntodas las acciones que haces.

La manera de llamarlas es básicamente una estructura. No la explicaré demomento porque es pronto para ello pero os haré un breve ejemplo:

CitarPUSH EAXPUSH EDXCALL lstrcatA

Imaginemos esas instrucciones, en éste caso digamos que mete EAX y EDX

Page 4: Taller de Cracking Desde Cero

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 4/21

en la pila (que lo que explicaré más adelante) para así tratar los valoresantes de llamar a la API lstrcat que se encarga de concatenar (juntar) 2cadenas.

En éste caso si EAX apunta a "hola" y EDX a " mundo" una vez ejecutada laAPI en EAX quedaría la cadena/string "hola mundo". Así que como explicaréahora EAX ha sido utiliza de "Acumulador" porque ha acumulado el resultadode 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 devolverprincipalmente 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 específico.

3.-ECX: Contador

- Éste sería en el ejemplo anterior el que hace de contador, con unainstrucción tipo INC ECX cada vez se iría sumando de 1 en 1 hasta llegar alnúmero del registro BASE (EBX) 10, así que utilizando estos dos últimosejemplos se haría durante 10 veces una funcion (por ejemplo, multiplicar por3 diez veces). Ej:

CitarNotas: EA X = 1 ; EBX = 10

Inicio:MUL EAX, 3 ; MUL: Multiplica 2 regis tros almacenando en el primero.

INC ECXCMP ECX, EBXJNE Inicio ; JNE: es un salto condic ional (JNE: JUMP IF NO T EQ UA L / Salta s i no es igual) que

va hac ia la direcc ión que le indiques s iempre y cuando el resultado de la comparac ión anterior sea

desigüal.

4.-EDX: Datos

- Éste es utilizado también antes de invocar a una API para darle los datos.

3.- LA PILA: Parte I

¿Qué es la PILA?

- Técnicamente es una estructura de datos, del tipo LIFO (del inglés Last InFirst Out, último en entrar, primero en salir). Texto extraído de la wikipedia..

y vosotros os preguntaréis, ¿que esto de una estructura?, Bien. Imaginadque formamos una ventana, o por ejemplo, el típico mensaje de texto. Enéste caso es la API MessageBoxA .

En éste caso vemos 3 partes claramente identificables:

- Título : "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 APIMessageBoxA1 tenemos que indicarle todos estos datos para que nos la forme

tal y como nosotros le hemos indicado. En Ensamblador, (a nivel de códigomáquina), ésto sería visualizado así:

Page 5: Taller de Cracking Desde Cero

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 5/21

1 MessageBoxA es la API encargada de lanzar ese mensaje tipo "caja de texto" quepuse en la imagen.

CitarPUSH TítuloPUSH CuerpoPUSH BotonesCALL MessageBoxA

Entonces ahí vemos que cada elemento es primero insertado en la pilamediante la instrucción PUSH. La pila tiene la cualidad de lo último quemetes, es lo primero que sacas. Es decir, en nuestro caso ahora la pilatendría ésta forma.

Las direcciones son imaginarías, normalmente la pila se visualiza con lascorrespondientes direcciones hacia donde apuntan (pueden apuntar a una cadena detexto que contenga el título

00401005 Botones00401000 Cuerpo00401020 Título

de manera que si ahora nos encontráramos con una instrucción tipo POP EAXextraeríamos Botones por ser la última que se introdujo hacia el REGISTROEAX el cual hemos indicado mediante la instrucción.

Ésta estructura es un ejemplo, de que existe una zona donde se guardanvalores MUY importantes en el flujo de un programa, así como por ejemplo, sise ejecutara la instrucción CALL MessageBoxA y ésta se encontrara porejemplo en la dirección 402500 (vamos a hacer un ejemplo de donde ladirección en la que se sitúan las instrucciones):

Atendiendo al ejemplo de antes añado las mismas instrucciones pero con susrespectivas direcciones imaginarias.

Citar402500| PUSH Título402504| PUSH Cuerpo402508| PUSH Botones40250A| CALL MessageBoxA40250F| MOV EAX, EBX

En éste caso una vez se ejecute la instrucción CALL MessageBoxA, sealmacenará en la pila también la dirección de RETORNO, es decir, la direcciónen la que regresará una vez haya sido llamado. Atendiendo al ejemplo deantes la pila en éste caso quedaría así.

00401008 RETURN to 40250F00401005 Botones00401000 Cuerpo00401020 Título

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 ennada, si no lo entendéis completamente no os preocupéis, es normal, a medidaque lo vayamos viendo todo tomará forma y os saldrá mecánicamente.

4.- LOS REGISTROS: PARTE II [PRÁCTICAS]

Ahora imaginemos varias situaciones, voy a escribir unas instruccionesy quiero que me digáis el valor de los registros finales. (si queréisresponder a un privado me alegrará ver que seguis el curso, aunqueseamos lentos ).

Cita de: Ejercicio 1

MOV EAX, 1530hADD EAX, 1000hSUB EAX, 500h

Page 6: Taller de Cracking Desde Cero

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 6/21

MOV EBX, 100hSUB EAX, EBX

Normalmente cuando crackeamos utilizamos registros de 32 Bit, entre loscuales podemos encontrarnos EAX, EBX, ECX, EDX, etc. Pero éstos secomponen de varias partes según tamaño:

EAX (32 bits)

se descompone en:

AX (16BIT)

que éste mismo se descompone en:

AH y AL (8 Bit cada uno)

Para que veáis un ejemplo sobre el valor:

12345678 => EAX12345678 => AX12345678 => AH12345678 => AL

Siempre debemos estar al tanto de sobre QUE valores trabajamos, es decir,si nos encontramos una instrucción tipo:

CitarMOV AL, 5

Sabemos que sólamente hay una posibilidad, pero tambien debemos saber aque parte de EAX corresponde, porque si fuese AX por ejemplo ya cambiaríala posición del movimiento.

Mas adelante veremos como se trabaja con "punteros", y ahí deberemostener bien claro éstas correspondencias:

DWORD -> EAXWORD -> AXBYTE -> AH y AL

CitarEjercicio 2:

MOV EAX, 00004932hADD AX, 45hSUB AL, 0Ah

5.- SALTOS CONDICIONALES Y BANDERAS: PARTE I [PRÁCTICAS]

¿Que son los saltos condicionales? ¿Que son las banderas?

Los saltos condicionales son instrucciones que al ejecutarse hacen que elflujo se traslade a la dirección que apunte.

Es decir, cuando nos encontramos con una instruccion del tipo "saltocondicional" nos llevará (si se cumple la condicion) hacia donde apunte.Veamos un ejemplo:

CitarCMP EAX, EBXJE 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, ya 0 si no lo es.y la siguiente instruccion saltará si la comparación ha sido correcta (JUMP IFEQUAL => JE) ha la direccion "401000".

Page 7: Taller de Cracking Desde Cero

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 7/21

En éste ejemplo comprobamos 2 cosas, que hay unas banderas que seactivan o bien con 0 o con 1 en función de las operaciones aritméticas quevayan generandose a lo largo del programa, y que hay instrucciones queactuan en función de las mismas, veamos que tipos de satos hay:

JEJNE o JNZJBJBEJPJPEJLJLE

[CONTINUARÁ]

EN CONSTRUCCIÓN

« Última modificación: 23 Enero 2011,20:16 por Shaddy » En línea

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

http://abssha.reversingcode.comhttp://www.reversingcode.com

karmanyModerador

Desconectado

Mensajes:1.507

Sueñas quesueñas

Re: Taller de Cracking desde 0« Respuesta #3 en: 28 Septiembre 2007, 22:38 »

OllyDBg - Asíéndonos con OllyDBG

Pequeña Introducción.

Habiendo una gran cantidad de debuggers en la actualidad, ¿Por qué vamosa hacer la introducción con OllyDBG?Ciertamente existen muchísimos debuggers, pero OllyDBG, desde suaparición, tuvo muchos adeptos; tal vez por su sencillez, por su intuición, porsu apariencia o quizá por la gran cantidad de tutoriales que se hicieron y sesiguen haciendo, ha sido y es un programa muy utilizado.Cuando una persona empieza a manejar un programa, necesita información yOllyDBG creemos que es un debugger del que se ha hablado muchísimo ysolamente con ver "Introducción al OllyDBG desde cero" realizado por RicardoNarvaja ya tenemos una base impresionante no sólo para empezar, sino paraobtener un nivel más que aceptable.

OllyDBG es un debugger con el que hemos estado muchísimas horas, poreste motivo, nos va a facilitar enormemente nuestra labor.La idea de este: "asíéndonos con OllyDBG" es iniciar a todo forero en su uso eir perdiendo el miedo a utilizarlo. Posteriormente ya se podrán tratar otrostemas o leer otros tutoriales o... utilizar otros programas...

Presentación de OllyDBG.

OllyDBG es principalmente un debugger para aplicaciones a 32 bits enMicrosoft Windows. Es un debugger en Ring3.Tiene muchísimas otras opciones e incluso es posible la utilización de plugins(o si eres programador hacerlos tú mismo) que hacen de él un programaverdaderamente potente.Para conocer sus características podemos visitar su página Web:http://www.ollydbg.de/

Page 8: Taller de Cracking Desde Cero

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 8/21

Para descargar el programa podemos descargar la versión 1.10 básica, sinningún plugin y ninguna modificación desde su página web, aquí:http://www.ollydbg.de/odbg110.zip

Sin embargo, yo recomiendo descargar el OllyDBG de ShadowDark, que es unOllyDBG modificado para no ser reconocido, con unas cuantas opciones más ycon los plugins más utilizados. Se puede descargar de aquí:http://www.ech2004.net/download.php?archivo=123&tipo=hhttp://rapidshare.com/files/66787872/OllyShadow.rar

Vamos a abrirlo por primera vez. Abriremos cualquier ejecutable paraexaminarlo. Para esto vamos a File --> Open o pulsamos simplemente F3 yseleccionamos cualquier exe.OllyDBG puede mostrar distintas pantallas con diferentes datos, así que paraentenderlo 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: ShowCPU (Alt+C)

Su interfaz es la siguiente:

Fig.1

Podemos dividirla del siguiente modo:

Imagen original de The Pope (Fig.2)

Vamos a examinar más detenidamente las ventanas marcadas en color, unapor una:

« Última modificación: 21 Julio 2008,16:17 por karmany » En línea

karmanyModerador

Desconectado

Mensajes:1.507

Sueñas quesueñas

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 haceraparecer o desaparecer pulsando el botón derecho dentro de la ventana dedesensamblado (CPU) y seleccionando: Appearance --> Show bar o Appearance--> Hide bar respectivamente.La imagen de la ventana de desensamblado con la barra descriptivacomentada es la siguiente:

1) La primera columna "Address" muestra la dirección donde se ejecutará elcódigo.2) La segunda columna "Hex dump" muestra los bytes que forman lainstrucción que hay a la derecha (columna "Disassembly).3) La tercera columna "Disassembly" indica el desensamblado propiamentedicho. Como ya se ha hablado antes de él, no hace falta explicar mucho más.4) La última columna "Comment" nos puede mostrar: comentarios propios,cadenas de texto, direcciones, nombres de funciones y direcciones, datos quevamos a insertar en la pila a cierta función o API etc... que nos pueden ayudarmuchísimo.

Tomemos la primera linea: Address Hex dump Disassembly Comment 40125C 68 2C 14 40 00 PUSH 40142C

Page 9: Taller de Cracking Desde Cero

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 9/21

La dirección donde se ejecuta ese PUSH 40142C es 40125C.Los bytes que forman la instrucción PUSH 40142C son 68 2C 14 40 00,donde Olly ha hecho el desensamblado correcto, sabiendo que 68 equivale aPUSH 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, cómo nos muestra ocambia de direcciones absolutas a direcciones relativas y viceversa.

Hex dump:Si cliqueamos dos veces, lo que equivale a pulsar F2, pondremos oquitaremos un punto de ruptura, breakpoint o lugar donde el debuggerparará. Se pondrá la dirección en rojo.Para ver todos los breakpoints que hemos colocado podemos verlos en:View --> Breakpoints o Alt+BPodemos también modificar los bytes, copiarlos, pegarlos, convertirlos a ceroso en NOP's etc... pulsando botón derecho y seleccionando Binary y sussubmenus.

Disassembly:Si cliqueamos dos veces (o pulsamos la tecla del espacio), se abrirá unapequeña ventana en donde podremos escribir nosotros mismos la instrucciónque queramos. Tiene una opción: "Fill will NOP's": Si se tilda rellenará conNOP'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 dandoposibles resultados inesperados. (Yo recomiendo tildarla).Una de las cosas que hacen más fácil escribir en ensamblador desde el propioOllyDBG, es que permite escribir instrucciones sin poner por ej. eltamañ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 yaentenderá que estamos trabajando con el registro EAX que requiere unDword y automáticamente pondrá: MOV EAX,DWORD PTR DS:[400000].Si nos equivocamos siempre tenemos la opción: Botón derecho -->UndoSelection para restaurar lo original.

Comment:OllyDBG rellena adecuadamente todos los comentarios necesarios, que hacenque el código sea mucho más entendible.Nosotros del mismo modo, podemos modificar cualquier comentario y poner loque nosotros queramos...a fin de que sea más fácil después entender todo.Simplemente cliqueamos dos veces sobre esa columna y aparecerá unapequeña ventana que pondrá de título: "Add comment" o "Change comment"(añadir comentario o modificar comentario). Si modificamos un comentario quetenía ya OllyDBG, podemos simplemente borrar el nuestro y automáticamentevolverá a aparecer el original.Poner un comentario propio es realmente muy útil y además nos puedeayudar posteriormente a recordar ese punto... por ejemplo, imaginemos losiguiente:0040100A DEC EAX, podría ser que en EAX hubiera por ej. el número devidas y en este momento nos la disminuye en una (DEC EAX). Podríamosponer de comentario: "Quita una vida".Si después no nos acordamos de la dirección podemos buscarla pulsandobotón derecho --> Seach for --> user-defined comment y ahí veremos nuestro"Quita una vida".

La ventana de desensamblado es la más utilizada, así que hay que conocerlaun poco más a fondo en su manejo, ya que es posible que tengas que estarfrente a ella muchas horas...

Vamos a ver ahora la barra de herramientas, y lo relacionado con estaventana de desensamblado. Los primeros botones que he numerado son lossiguientes:

El primero (el que está debajo de la C, no lo he numerado porque

Page 10: Taller de Cracking Desde Cero

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 10/21

sencillamente es el que abre el cuadro de diálogo para abrir un archivo). Lossiguientes y por orden tienen la siguiente función:

1.- Equivale a pulsar "Ctrl+F2" o ir al menú "Debug --> restart". Reinicia denuevo la depuración del programa. Según la configuración de OllyDBG sereiniciará y se pausará normalmente en el Entry Point (EP) del programa quevamos a debugear.2.- Equivale a pulsar "Alt+F2" o ir al menú "Debug --> Close". Termina elprograma que está siendo debugeado, pero sin cerrar el OllyDBG.3.- Equivale a pulsar "F9" o ir al menú "Debug --> Run". Ejecuta el programaque está siendo debugeado.4.- Equivale a pulsar "F12" o ir al menú "Debug --> Pause". Pausa alprograma que está siendo debugeado.5.- Equivale a pulsar "F7" o ir al menú "Debug --> Step Into". Hace ir aldebuger 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 aldebuger instrucción por instrucción pero sin entrar en ninguna call osubrutina.7.- y 8.- No las vamos a ver en este "Cracking desde cero" porque sale denuestras 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 elfinal.10.- Equivale a pulsar "Ctrl+G". En la ventana que aparece, podemosintroducir la dirección, y tras aceptar, en la ventana de desensambladopodremos ver el código que hay en dicha dirección.

Tenemos muchas más opciones pulsando el botón derecho, o seleccionandoen los diferentes menús. Veremos las más importantes.

Aunque para los recién iniciados sea un poco lioso recordar todo, en elsiguiente apartado haremos unos sencillos ejemplos utilizando lo más básico.Veremos cómo manejarnos en la ventana de desensamblado.

« Última modificación: 21 Julio 2008,16:28 por karmany » En línea

karmanyModerador

Desconectado

Mensajes:1.507

Sueñas quesueñas

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 más básico en esta ventana.Voy a abrir un programa cualquiera con el OllyDBG y pongo una imagen de laventana de desensamblado:

Estamos parados en el OEP (Punto de Entrada Original) del programa. Si seobserva un poco vemos en la imagen un salto a la librería MSVBVM60, por lotanto podemos ya imaginarnos que se trata de un programa compilado conVisual Basic.

Vamos a hacer unos pequeños ejercícios:

1.- Ir a la dirección 418E80.-Como expliqué en el párrafo anterior podemos o bien pulsar el botón número10 de la siguiente imagen:o bien, podemos pulsar Ctrl+G o botón derecho --> Goto --> Expresion.

De estas 3 formas se nos abrirá una ventana y ahí podremos poner ladirección a la que queremos ir: 418E80:

Page 11: Taller de Cracking Desde Cero

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 11/21

pulsamos Ok y nos llevará directamente a esa dirección.

2.- Poner un Breakpoint (BP - lugar donde parará el debugger) en 418E80Lo primero vamos a la dirección 418E80, explicado en el punto anterior.Una vez ahí, pulsamos simplemente F2, o botón derecho --> Breakpoint -->Toggle o simplemente 2 clicks en la columna "Hex dump" y veremos cómo sepone la dirección en rojo. Ya tenemos puesto el punto de ruptura.

En este punto, voy a añadir que OllyDBG nos permite poner varios tipos deBP. Hemos visto el más común y típico, pero también podría ser necesario queparase en 418E80 solamente cuando por ej. el registro EAX sea igual a 2(botón derecho --> Breakpoint --> Condicional) y ahí pondríamos lacondición, que no se va a explicar aquí.Otro tipo de BP son los Hardware Breakpoints. Sólo podemos poner 4. Sipulsamos botón derecho --> Breakpoints, veremos que en la ventana dedesensamblado podemos poner un Hardware on execution. Para ver los HBPque tenemos podemos ir al menú: Debug --> Hardware Breakpoints y ahíveremos los que tenemos puestos. Si intentamos poner más de 4, OllyDBGnos avisará que debemos borrar uno.

3.- Modificar una instrucciónImaginemos que tenemos lo siguiente:

402E40 DEC EAXDespués de analizar el código detenidamente, sabemos que ese DEC EAX (enmi programa) lo que hace es disminuir una vida. Como yo no quiero que mequite una vida, pues voy a modificar ese código.Puedo hacerlo de varias formas:-NOPEAR TODO: Nos ponemos sobre esa linea y pulsamos botón derecho -->binary --> Fill with NOPs y así rápidamente ya tenemos todo lleno de NOPs.-DEC EAX se compone de un sólo byte. En la columna dissasembly podemosclickear dos veces y nos saldrá una ventana donde podremos modificar elcódigo. Por ej. podríamos poner: NOP y tendremos lo mismo que antes, osimplemente INC EAX y nos incrementará EAX u otra cosa que se nos ocurra.-Modificar el byte. En la columna Hex dump, podemos pulsar botón derecho --> Binary --> Edit y podemos modificar el byte.

4.- Ir a MessageBoxALos más Newbies desconocen esta opción. Lo primero que tenemos queasegurarnos 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 nofuncionará.Simplemente hacemos como antes cuando quisimos ir a una dirección:pulsar el botón número 10 de la siguiente imagen:o bien, podemos pulsar Ctrl+G o botón derecho --> Goto --> ExpresionY ahí escribimos: MessageBoxA, y OllyDBG nos llevará ahí.

5.- Poner un comentarioEs posible que algún código ya sepamos exactamente lo que hace. Para vertodo mucho más sencillo podemos poner nuestro propio lenguaje. Por ej.401200 DEC EAX <-- Quita un día...402000 Call 4032EC <-- Call que pone un botón activadoetc...De este modo, cuando lleguemos a este código ya sabemos qué haceexactamente todo y no tenemos que volver a analizar.Para poner comentarios, como ya se ha explicado, podemos por ej. pulsar dosveces en la columna "Comment" y se abrirá una ventana y ahí podremosponer lo que queramos.Esto aunque parezca una tontería, es realmente muy útil, sobre todo a lahora de trabajar con programas con mucho código. También nos ayuda aencontrar las zonas que nos interesan, ya que podemos buscar nuestrospropios comentarios.Para buscar nuestros comentarios pulsamos botón derecho --> Search for -->user-defined comment y podremos seleccionar lo que queramos. Muy útil.

6.- Me he movido por el código y ahora no sé volver donde estaba antes.Estamos parados en un determinado código. Ahora vamos a una dirección ydespués a otra. Podemos volver a las dos anteriores simplemente pulsando

Page 12: Taller de Cracking Desde Cero

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 12/21

la tecla "-" (menos). Si queremos ir ahora para adelante podemos pulsar latecla "+" e iremos de nuevo a la última dirección que estuvimos.

Es posible también que lo que se quiera sea ir al lugar donde estabadetenido el debugger. Esto es muy fácil, ya que sabemos que el debuggerestá parado en el valor del registro EIP, por lo tanto podemos cliquear dosveces 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ódigode donde fue llamada.Una opción manual sería ir a cada RET pulsando Ctrl+F9 y después F7 parapasar el RET y haciendo esto llegaríamos a nuestro código donde ha sidollamada 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 ypulsamos simplemente F4.

IMPORTANTE:

9.- Ya he hecho los cambios en el OllyDBG, ahora quiero guardar todos loscambios en el mismo ejecutable.Esta pregunta la hace muchísima muchísima gente. Voy a explicar la teoría decómo hay que modificarlo y explicaré la forma de hacerlo de manera muySENCILLA con OllyDBG sin utilizar ningún Editor Hexadecimal y por lo tantosin calcular el Offset:

Imaginemos por ejemplo que en la dirección 401000 tenemos lo siguiente:401000 PUSH EBP ;push ebp corresponde al byte 55h.

Bien, nosotros hemos modificado ese PUSH EBP (55h) y hemos querido dejarun NOP, entonces veríamos lo siguiente:401000 NOP ;nop corresponde a 90h

Ya tenemos el cambio que queremos hecho. Ahora viene la pregunta:¿Cómo puedo guardar el exe (dll o lo que sea) con este nuevo cambio queacabo de hacer? Con OllyDBG lo haremos en tres pasos:

1.-Pulsamos botón derecho (en cualquier lugar en la ventana dedesensamblado) 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 botón: "Copy All"

3.-Y finalmente en la nueva ventana que aparece pulsamos botón derecho yelegimos: "Save file".

De este modo tan sencillo ya lo tenemos modificado .

TEORÍA 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 debesaber.Voy a tratar el punto 9 pero sin OllyDBG y entendiendo todo, y lo vamos amodificar manualmente.Voy a utilizar un programa fácil de conseguir y que nos servirá de guía:OllyDBG 1.10. Lo vamos a abrir con un editor de PE (encabezado). Haymuchísimos programas, cada uno que elija el que más le guste.

Nos vamos a ir a ver las secciones y si miramos las del OllyDBGencontraremos lo siguiente:

Código:Name Virtual Offset Virtual Size Raw Offset o Raw

Page 13: Taller de Cracking Desde Cero

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 13/21

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

Columna por columna:-Name: Indica el nombre de la sección.-Virtual Offset o Relative Virtual Address: Es la dirección virtual relativa a laImage Base donde se encuentra la sección. Muchas veces la veremosnombrada como RVA (Relative Virtual Address. No hay que confundirla con laVirtual Address ya que a esta última se le suma la Image Base. La mayoríade los programas tienen la Image Base igual a 400000h.Ejemplo de esto último: (datos del OllyDBG que hemos abierto con un EditorPE)Image Base: 400000hRVA donde comienza la sección ".text": 1000Por lo tanto la Dirección Virtual (Virtual Address) donde comienza la sección.text es:Image Base + RVA = VA; VA = 400000 + 1000 = 401000.Esto nos quiere decir que la sección .text comienza en la dirección virtual401000. Se puede comprobar si abrimos un OllyDBG con otro OllyDBG y vamosa esta dirección: veremos que es la primera instrucción...

-Virtual Size: Es el tamaño virtual de la sección. Por ej. el tamaño virtual de lasección .text son AF000h bytes.

-Raw Offset o PointerToRawData: indica el desplazamiento dentro delarchivo donde comienza la sección. Ahora que ya sabemos un poco voy aentrar un pelín 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 quecorresponde a los 2 bytes: EB 10-que esta primera instrucción se encuentra en VA 401000

Ejemplo1Pregunta: Estos dos bytes (EB 10) que se encuentran en RVA 1000, ¿Dóndese encuentran realmente en el archivo ejecutable?Bien, esto nos lo dice: Raw Offset o PointerToRawData. En este caso essencillo ya que estos 2 bytes (EB 10), se encuentran justo en el inicio de lasección .text, por lo tanto, dichos bytes se encuentran en el archivo en eloffset: 600h.Para comprobar esto que acabo de decir, voy a abrir al OllyDBG en un editorhexadecimal 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.é(.Perfecto, ahí tenemos los dos bytes.

Page 14: Taller de Cracking Desde Cero

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 14/21

Ejemplo2Bueno, acabamos de ver un ejemplo muy sencillo, vamos a hacer otro que eslo que nos vamos a encontrar normalmente, y es lo que hay que aprender aentender.Voy a abrir el OllyDBG con el OllyDBG y me voy a ir a una direccióncualquiera...:

Código:0046123E 8B 4E 14 MOV ECX,DWORD PTR DS:[ESI+14]00461241 8B 53 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 dirección virtual 46123E encontramos los bytes 8B 4E 14.Como la Image Base es 400000, tenemos que:46123E - 400000 = 6123E que es una dirección virtual relativa (RVA).Sabemos que la VA 46123E se encuentra dentro de la sección .text. ¿Cómo séesto? Pues porque si miráis la tabla que puse del editor de PE tenemos que:-La RVA del comienzo de la sección .text = 1000h-El tamaño virtual (virtual size) de la sección .text = AF000Por lo tanto 6123E es mayor que 1000 y menor que AF000, por esto seencuentra dentro de .text.

Sigo. Como la sección .text comienza (RVA) en 1000h tenemos que:6123E - 1000 = 6023E que es el desplazamiento en la sección .text, por estemotivo, podemos sumar 6023E al offset de inicio de la sección .text en elmismo ejecutable, así:600h (Raw Offset) + 6023E (desplazamiento) = 6083E (offset buscado)

Veamoslo mirando un editor hexadecimal:Código:00060830 73 6D B8 01 00 00 00 EB 66 83 FA 06 75 2F 8B 4E sm̧....ëfƒú.u/‹N00060840 14 8B 53 14 81 E2 FF 00 00 00 81 E1 FF 00 00 00 .‹S..âÿ....áÿ...

Viendo esto, podemos poner una fórmula general:VA = Dirección Virtual que queremos saber dónde se encuentra en elejecutable.RVA (.sección) = Es la RVA del comienzo de la sección en la que se encuentraVARaw Offset (.sección) = Es el offset del comienzo de la sección en la que seencuentra VA.ImageBase = Es la ImageBase

VA - ImageBase - RVA(.sección) + Raw Offset (.sección)

Con esta fórmula voy a hacer el último ejemplo:

Ejemplo3VA = 4BF008 (bytes que contiene: 44 F2 4B...) Está dentro de la sección .dataRVA (.data) = B0000hRaw Offset (.data) = AEE00hImage Base = 400000h

4BF008 - 400000 - B0000 + AEE00 = BDE08 (offset buscado, veamos en uneditor hexadecimal a ver:)

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...

Page 15: Taller de Cracking Desde Cero

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 15/21

SizeofRawData: Es el tamaño de la sección en el propio archivo ejecutable.

No quiero entrar más en detalle porque nos salimos de lo que se quiereexplicar en este tutorial, pero esto que se ha mostrado pienso que tiene quequedar bien claro.

« Última modificación: 21 Julio 2008,16:55 por karmany » En línea

karmanyModerador

Desconectado

Mensajes:1.507

Sueñas quesueñas

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

2.0 Ventana de Dump - OllyDBG:

Esta subventana es muy útil también. En ella podemos representar losvalores 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 yatenemos 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 ayudarenormemente en nuestra labor.

Esta subdividida en varias columnas. Normalmente se suele utilizar laapariencia de la imagen anterior, que está dividida en 3 columnas.Address --> dirección donde se encuentran los bytesHex dump --> los valores hexadecimalesASCII --> el carácter ASCII del valor hexadecimal

Como se observa en la imagen, he utilizado un tamaño 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 código ASCII al que corresponde.Podemos seleccionar el número de bytes que queramos.

Si pulsamos con el botón derecho del ratón veremos un menú similar al de laventana de desensamblado.Explicar todas las opciones o todo lo que podemos hacer podría resultarbastante extenso, monótono, aburrido y poco eficaz, así que pienso que lomejor es practicar con unos sencillos ejemplos.

« Última modificación: 21 Julio 2008,16:37 por karmany » En línea

karmanyModerador

Desconectado

Mensajes:1.507

Re: Taller de Cracking desde 0« Respuesta #7 en: 5 Febrero 2008, 23:21 »

2.1 Ejemplos en Ventana de Dump - OllyDBG:

Vamos a realizar unos pequeños ejercícios:

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

Page 16: Taller de Cracking Desde Cero

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 16/21

Sueñas quesueñas

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" porejemplo 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). Ahoratenemos varias opciones: 1ª-Pulsar botón derecho del ratón y seleccionar binary --> Edit:

Se nos abrirá una nueva ventana:

Como se observa, en el título tenemos la dirección y podemos modificardirectamente el código ASCII, UNICODE o el mismo byte en hexadecimal.Como es lógico si se pone algo en UNICODE nos añadirá un nuevo byte.Como queremos poner una "R", nos pondremos sobre la "V" (ASCII) ysimplemente la sustituimos. Pulsamos en "OK" y veremos cómo nuestramodificación se ha puesto en rojo y nos ha sustituido la "V" por la "R" (enhexadecimal: 4C(L) por 52(R).

2ª-Simplemente cuando esté seleccionado nuestro byte pulsamos cualquierdígito hexadecimal y se nos abrirá de nuevo la ventana anterior. Estaremosmodificando directamente el valor hexadecimal. Así que podremos teclear 52 ypulsamos Enter y solucionado.

Aquí he modificado solamente un byte, pero de igual modo podemosseleccionar los bytes que nosotros queramos modificar y editarlosposteriormente de esta forma explicada.

2.- Sobre cadena de texto:Cadenas de texto = Strings (Inglés)Cuando en la ventana de Dump vemos alguna string podemos conocer sulongitud ya que al final de la misma, ya sea ASCII o UNICODE veremos un0(cero)(ASCII) o dos 0 (ceros)(UNICODE).

Por ejemplo en UNICODE "karmany" es:

Código:6B 00 61 00 72 00 6D 00 61 00 6E 00 79 00 00k a r m a n y

3.- Quiero copiar 4 bytes y pegarlos en otro sitio:OllyDBG tiene esta opción tan necesaria que es poder copiar los bytes quenosotros queramos y pegarlos en cualquier otro lugar.Por ejemplo, en la imagen anterior de la ventana de dump, vamos a copiar los4 bytes (1 dword) que hay en 402BD0 (56 42 35 21) y los vamos a pegar en401264.Primero seleccionamos el/los bytes que queramos (en este ejemplo sóloseleccionaremos 4. Ahora pulsamos botón derecho del ratón 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 seleccionamosmenos (por ej. 3), OllyDBG sólo modificará los que hemos seleccionado ysimplemente pulsamos botón derecho del ratón sobre ellos y pulsamos en:Binary --> Binary Paste.Esta opción es muy útil sobre todo cuando estás haciendo algún injerto ytienes que ir modificando el código. Yo incluso hice una fuerza bruta parasolucionar un crackme y los bytes que utilizé los tengo guardados en un txt.De este modo acoplarlos después a un nuevo crackme es mucho más sencilloque empezar de cero.

4.- He seleccionado un gran número de bytes. Quiero saber cómo ponerlostodos a 0 (cero) o cómo ponerlos todos a FFh:Es muy sencillo, cuando ya tengamos todos los bytes que queramospulsamos botón derecho del ratón 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

Page 17: Taller de Cracking Desde Cero

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 17/21

Como observaréis, en la ventana de dump pone sustituir por FF mientras queen la ventana de desensamblado, pone sustituir por 90 (NOP).

5.- Me gustaría poner un Breakpoint a un byte cuando sea modificadoImaginemos que tenemos un byte igual a 04. Imaginemos que son las vidasde 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 unbreakpoint 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

Para saber cuántos HBP tenemos puestos podemos seleccionar en el menúde OllyDBG en: Debug --> Hardware breakpoints

5.- Aparece una cadena muy larga y la quiero copiarA veces, es posible que queramos copiar una cadena larga que aparezca enla ventana de dump. Copiarla dígito a dígito podría ser un poco largo ypodríamos equivocarnos así que podemos seleccionar dicha cadena y pulsarbotón derecho del ratón --> copy --> To clipboard (también podemos usar eltípico Ctrl+C).Creamos o abrimos un documento de texto y pegamos.

6.- Cómo ir a una dirección determinadaSimplemente pulsamos el botón derecho del ratón y seleccionamos Goto -->expresion (lo mismo que pulsar Ctrl+G). En el siguiente cuadro ponemos ladirección que queramos y pulsamos Ok.

7.- Cómo examinar el encabezado (PE header) de un programa desdeOllyDBGOllyDBG tiene opciones muy interesantes. Modemos decirle a OllyDBG que nosmuestre toda la información de un PE header (encabezado).Normalmente en un programa cualquiera el PE header aparece en la dirección400000 (generalmente). Por este motivo, nos dirigimos a la dirección 400000en la ventana de dump y ahora le vamos a decir a OllyDBG que nos muestredicha información como PE header:Botón derecho del ratón --> especial --> PE headerPara volver después como estaba antes:Botón derecho del ratón --> Hex --> Hex/ASCII (16 bytes)

« Última modificación: 27 Julio 2008,12:34 por karmany » En línea

karmanyModerador

Desconectado

Mensajes:1.507

Sueñas quesueñas

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 rápidamente a distintosvalores. Este tema de los registros ya fue explicado muy bien por Shaddy.

La Ventana de Registros nos da información acerca de los mismos. Podemosobservar qué es lo que contiene cada registro, modificar su contenido,incrementar o disminuirlo en una unidad rápidamente y un largo etc...

El registro EIP es la dirección en la que nos encontramos y muchas veces enesta ventana de registros si esa dirección coincide con una función, o concualquier dato relevante, nos puede mostrar dónde se encuentra. En estecaso vemos que se encuentra en el Entry Point.

Page 18: Taller de Cracking Desde Cero

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 18/21

Tiene en su parte superior una barra que nos permite visualizar 3 vistasdiferentes simplemente pulsando en la misma.-Registers (FPU) -Registers (MMX)-Registers (3DNow!)

Para lo que estamos aprendiendo yo recomiendo que lo dejéis en Registers(FPU), tal como se ve en la imagen. La diferencia con las otras dos vistas esque en esta (FPU) se muestran los registros ST(0)....ST(7) que son utilizadospara realizar operaciones de punto flotante. Sólo quedaros con eso noentraremos en más detalles.

Registers (FPU):Vamos a explicar todo lo que hay en esta ventana. Para ello echaremos unvistazo a la imagen que he puesto.

Lo primero que aparece son los registros que ya conocemos y sus respectivosvalores que almacenan:

Código:EAX 00000000ECX 0013FFB0EDX 7C91EB94 ntdll.KiFastSystemCallRetEBX 7FFDF000ESP 0013FFC4EBP 0013FFF0ESI FFFFFFFFEDI 7C920738 ntdll.7C920738EIP 004011C0 Crackme_.<ModuleEntryPoint>

Podemos observar como dije antes que estamos detenidos en el EntryPoint.(EP)

Después nos encontramos con:Código:C 1 P 0 A 0 Z 0 S 1 T 0 D 0O 0

Son lo denominado Flags o Banderas. Se ponen unicamente a 0 o 1 y semodifican cuando ha ocurrido una determina instrucción(operación).

Por ejemplo, el Flag Z o Flag Cero (vemos Z 0) se pone a cero cuando seejecuta una operación y el resultado ha sido cero. Veamos:Imaginemos que EAX vale 00000001; eax = 1El flag Z está de momento a cero.Y tenemos lo siguiente:DEC eax ;con lo que eax valdrá 0.Tras esta instrucción 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:Código:ES 0023 32bit 0(FFFFFFFF) -> general o de stringCS 001B 32bit 0(FFFFFFFF) -> de códigoSS 0023 32bit 0(FFFFFFFF) -> de stackDS 0023 32bit 0(FFFFFFFF) -> de datosFS 003B 32bit 7FFDE000(FFF) ->segmentos def. por el usuarioGS 0000 NULL -> segmentos def. por el usuario

Son los denominados Registros de Segmento utilizados para direcciones de

Page 19: Taller de Cracking Desde Cero

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 19/21

memoria. No los utilizaremos.

Y finalmente:Código:ST0 empty -UNORM BCE0 01050104 006C006FST1 empty 0.0000016439076200470e-4933ST2 empty 0.0ST3 empty 0.0ST4 empty 0.0ST5 empty 0.0ST6 empty 0.0ST7 empty 0.0

Que son utilizados como ya comenté para realizar operaciones de puntoflotante. Este tema es muy interesante y la representación de estos númerosaún más. Sobre todo en los de precisión doble. No entraré en más detalles,aunque he mostrado para qué valen.

« Última modificación: 27 Julio 2008,13:42 por karmany » En línea

karmanyModerador

Desconectado

Mensajes:1.507

Sueñas quesueñas

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 botón derecho del ratón --> increment.Simplemente podemos hacerlo pulsando la tecla +.

Vamos a disminuir en uno el registro ebx:Seleccionamos el registro, pulsamos botón derecho del ratón --> 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 pulsamosbotón derecho del ratón veremos la opción:-Zero ;para poner el registro a cero-Set to 1 ;para poner el registro a uno

3.- El registro ebx tiene una dirección. Quiero ir a esa dirección en el dumprápidamente:Imaginemos que ebx (o cualquier otro registro) vale 402000. Queremos ir aesa dirección en la Ventana del Dump. Simplemente seleccionamos el registroebx y pulsamos botón derecho del ratón --> Follow in dump

4.- El registro ebx tiene una dirección. Quiero ir a esa dirección en laventana de desensamblado:Imaginemos igual que antes que ebx (o cualquier registro) vale 402001.Queremos ir a esa dirección en la ventana de desensamblado. Simplementeseleccionamos dicho registro ebx, y pulsamos botón derecho del ratón -->Follow in disassembler

5.- Quiero modificar el registro EIP:

Page 20: Taller de Cracking Desde Cero

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 20/21

Debes saber que si modificas dicho registro, modificas la posición en la que seencuentra parado el debugger. Hay que tener cuidado y saber lo que sehace.

6.- Se ha realizado una operación y el resultado es cero. Ahora estoy enun 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 operación ha dado cero, puesel flag Z se habrá puesto a 1 y por lo tanto una instrucción JNZ no saltará.Podemos seleccionar el flag Z y pulsamos botón derecho --> Reset y veremoscómo al cambiar el flag Z ya JNZ salta.

En contrucciónPerdonar las molestias

En línea

Páginas: [1]

Ir a: => Ingeniería Inversa ir

Mensajes similares

Asunto Iniciado por Respuestas Vistas Último mensaje

Taller de programación en Cdesde cero « 1 2 »

P rogramac ión C /C ++

elohim 16 3,77110 Mayo 2006,21:12 por Jec

Introducción al Cracking conOllyDbg desde cero Ingeniería Inversa

derUnbekannte

3 6,01122 Noviembre2007, 08:32 por Shaddy

Proyecto-Taller: Electrónica,desde cero. « 1 2 3 »

E lec trónica

Firos 20 26,64830 Abril 2010,05:04 por Mr.Blue

problema con el WDASM EN ELTUTORIAL DE CRACKINGDESDE CERO Ingeniería Inversa

juancarlos230 3 3,79430 Noviembre2010, 23:05 por yako-_-

[Duda] Practica 1 y 2 de Tallerde Cracking desde 0 Ingeniería Inversa

LukaCrosszeria 3 806

3 Octubre 2013,17:07 por apuromafo

lawebdegoku MundoDivx Hispabyte Truzone

Yashira.org indetectables.net Seguridad Colombia Seguridad Informática

Internet móvil ADSL eNYe Sec Seguridad Wireless

Underground México El Lado del Mal Blog Uxio

thehackerway Tienda Wifi underc0de DriverLandia

Todas las webs afiliadas están libres de publicidad engañosa.

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

Page 21: Taller de Cracking Desde Cero

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