Está en la página 1de 13

CURSO CRACKER

Bueno gente, aqui dare comienzo a este pequeńo cursillo orientado a akellas personas ke
tienen deseos de iniciarse en el mundo del crack , no pretende ser el tutorial de oro, pero
si aclarar de forma sencilla ciertos aspectos que lograran clarificar la cuestión, y
ayudarnos a enteder de que se trata el tema.

Bueno lo primero que haré será hablar del lenguaje Assembler. Siempre que querramos
crackear un programa lo ke deberemos hacer será desensamblarlo, existen varias
herramientas para lograr este objetivo, como el famoso Softice o el OllyDBG (mi
favorito ;) y en el que basaré este curso).

El Assembler (ASM de ahora en más) es un idioma de baja definición, es decir, que se


halla , más cerca del lenguaje de las computadoras que el c/c++/VB y otros por ejemplo.
Muchos se deberán estar preguntando a esta altura, si tienen ke estudiar tooooodo un
lenguaje para poder crackear un simple programa, la respuesta es ke no (obviamente
siempre es mejor acrecentar nuestros conocimientos ;) ) , pero lo cierto es ke solo es
necesario usar un poko nuestro sentido común y conocer las instrucciones que nos
interesan.

Entrando ya estrictamente en ASM, les recomiendo desensamblar algún programilla


para ver el aspecto, haré una reseńa y explicaré nada más las ordenes que pueden
resultar de nuestro interés.Cuando desensamblemos el programa obtendremos algo
como esto:

Aki podemos ver todas las instrucciones que la makina recive por parte del programa.

Entre estas veremos algunas que son de suma importancia para nosotros que son las
instrucciones CALL,JNZ,JE,TEST,CMP. Antes de especificarlas remarcaré que este
programa se maneja en sistema hexagesimal de numeración.

CALL: Esta orden lo ke hace es llamar a otra función la que realizará alguna operación,
devolviendo posteriormente algún valor al programa.

TEST/CMP: Esta orden lo ke realizá es una comparación entre dos valores, o de un


valor con si mismo puede ser también, devolviendo un resultado a esta comparación 0
(FALSO) o 1 (VERDADERO).

JNZ: Esta orden realizará un salto hacia otra parte del programa en caso de que los
valores chekeados sean distintos.

JNE: Esta orden realizará un salto hacia otra parte del programa en caso de que los
valores chekeados sean iguales.

JMP: Esta orden aunke olvidé mencionarla arriba, es también importante, lo que hace es
realizar un salto si o si, independientemente de ke se compare un valor o no, o del
resultado de una comparación.
Básicamente esas serán las instrucciones ke nos ocuparán y serán de nuestro interés, les
recomiendo que lean el curso de ASM DESDE CERO de PABLO BARRON , que no es
muy largo y es bastante completo y entendible respecto al tema, aunke si entendieron lo
de arriba les bastará para comenzar.

Les aclaré también ke el OllyDBG es un debuger, es decir un debugeador, lo que hace


aki es hacer correr el programa para que podamos investigarlo mejor, igualemente
entederán mejor los ke les kise decir si simplemente cojen el Olly , desensamblan algún
programa y selecciones la opción Debug-->RUN, esto nos permitirá por decirlo de
alguna manera, trabajar con el programa "en vivo" para poder ver como se comporta
frente a ciertos estimulos que podamos ejercer.

Bueno gente espero ke les halla resultado interesante, y en la próxima entrega


comenzaremos a trabajar sobre el Olly y sus funciones, esta a sido un breve y relajado
comienzo pero no se confien que ya tendrán ke usar más adelante ese cerebro dentro de
sus cabezas ;). Espero que les halla gustado.

SEGUNDA CLASE

Bueno como habia prometido, aki comenzaremos a investigar el funcionamiento del


OllyDBG, para llevar adelante nuestros fines. Como ya había explicado este programa
es un desensamblador debugeador, ke a mi gusto es de lo mejor por el sencillo interfaz
intuitivo ke tiene.

Como me imagino ke ya habrás bajado el programa, y habrás probado lo ke te dije el


capitulo anterior, no???? jajaja, si ke eres vago. Bueno a llegado la hora asi ke bajate el
programa e instalalo de una vez ;). Bueno comenzaremos descargando algún programa ,
busken algún crackme en lo posible ,para empezar a experimentar.Incluiré ahora un
gráfico para utilizarlo para tomar referencias, para explicar lo que estamos viendo.

Como podrán notar, si es ke no se han kedado ciegos de pasar mucho tiempo delante de
la PC ;) , he remarcado las diferentes areas del programa con distintos colores para
poder distinguirlas y de esta manera poder explicar más sencillamente a que hacen
referencia.

ROJO: En este lugar podemos ver la dirección ke se le ha asignado a la orden, esto nos
servirá para poder orientarnos dentro del programa, y una vez ubicado el de nuestro
interés, simplemente anotandolo no tener ke repetir todo el proceso una y otra vez.

AZUL:Es el valor hexagesimal. Este es un sistema de numeración en base 16, ke utiliza


hasta el numero 9 luego del cual comienza a utilizar letras hasta completar la escala,
para ke lo vean más claramente incluiré una tabla de conversión de los primeros valores
para que lo vean: DEC-->1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ....... HEX-->1 2 3 4 5 6
7 8 9 A B C D E F 10 .......

VERDE:Aki observaremos el area donde se hallan las ordenes en lenguaje ASM , como
anteriormente he dicho para nuestros fines no será necesario conocerlas todas, aunke si
muy útil para entender la rutina ke realiza el programa, especialmente cuando nos
avokemos a obtener un serial.

NARANJA: Se verán los registros, para ke nos interesa eso?, a direfencia de otros
lenguajes en ASM no se pueden definir variables indefinidas, si no ke los valores se
transpasan entre las que pueden ver en el gráfico, por lo tanto podremos ver allí el valor
ke toma, ke como me imagino ke ya habrán pensado en algún momento será nuestro
objetivo el ke se halle allí almacenado.

AMARILLO: Podremos ver la "Dump" o básura en castellano , he leído en repetidas


ocasiones ke es útil personalmente no me ha sido de gran ayuda hasta ahora , pero
nunca se sabe por cierto.

Debemos saber ke estos programas llaman a ciertas funciones ke ya se hallan


predefinidas en los módulos, para clarificar esto hagan lo siguiente en el programa ke
tienen debugeado en el OllyDBG, hagan click con el botón derecho del mouse y si
posan sobre al opción VIEW, se desplegarán todos los modulos que se utilizan durante
el programa. Para ver con mayor Exactitud kuales son las funciones ke se llaman (API
para decirlo más concretamente), haremos de nuevo click con el botón derecho pero
iremos a SEARCH FOR... , y una ves posados allí a NAME (LABEL) IN CURRENT
MODULE, además de verlas se nos especificará la dirección la sección y el tipo ke es si
de importación o de exportación.
Otra opción ke nos ocupará será SERCH FOR.... ---> All REFERENCES TEXT STING
, que como imagino ya habrán descubierto por su nombre hace ke se busken todas las
cadenas de texto existente dentro del modulo.
Si ampliamos la solapa DEBUG veremos varias opciones, a continuación lo que haré
será, explikar ke opciones nos ocuparán y sus respectivos atajos para poder trabajar más
comodamente en nuestro ordenador, pudiendo independizarnos relativamente del mouse
durante el manejo del programa para hacerlo de forma más agil, si bien al comienzo
tomará más tiempo, con el acostumbramiento agilizará mucho el proceso.Estas son:

VIEW--->Breakpoint // DEBUG--->RUN // DEBUG--->Restart // DEBUG--->Step


Intro // DEBUG--->Step Over //

Estas serán principalmente las opciones ke nos ocuparán, existen otras útiles, pero las
veremos más adelante cuando sean necesarias.

BREAKPOINT: Antes ke nada explikaré lo ke significa esto. Como el nombre lo indica


es un punto de ruptura, es decir, cuando aplikemos un breakpoint a alguna parte del
programa tendrá como resultado ke la ejecución del mismo se detendrá allí. Existen
varios tipos de breakpoint, utilizaremos el toogle cuya tecla de atajo en F2 , y lo ke hace
es poner un punto break fijo, a diferencia de otro caso como podría ser el breakpoint ke
se ejecuta solo una vez o de memory access, etc. Esta opción concretamente en sí, nos
permitirá ver todos los breakpoint utilizados sobre el programa para poder visualizarlos
más fácilmente y poder de esta manera manipularlos.
RUN: Como su nombre lo indicá esto hará ke korra el programa, su tecla de atajo es F9.

Restart: Esta opción limpiará la pantalla y desensamblará el programa de nuevo, Su


tecla de atajo es Ctrl+F2.

Step Over: Esta opción avanzará paso por paso dentro de las ordenes de ejecución del
programa, nos servirá para realizar lo ke se llama proceso de traceado o simplemente
"tracear". Cuando traceamos lo ke estamos haciendo es seguir paso por paso la
ejecución del programa pero no simplemente para visualizarlo, si no por ejemplo si el
programa realiza una comparación y luego hay un salto lo ke hará es según el resultado
tomar el salto o no y en caso de tomarlo arrojarnos a la zona del programa hacia donde
estaba orientado dicho salto. Su tecla de Atajo es F8.

Step Into: Esta es similar a la anterior con la diferencia de ke con esta ingresaremos en
las llamadas (CALL), es decir podremos ver el proceso ke realiza esta. Por ejemplo en
un call se da la generación de una frase, si seguimos con F8 (recordemos, se los acabo
de decir ;) , ke es para Step Over) , pasaremos al siguiente paso viendo el resultado, sin
entrar en la llamada, en cambio con F7 (tecla de atajo de Step Into) , ingresaremos al
proceso ke se realiza dentro de la llamada. Debemos ser muy cuidadosos cuando
utilizamos esta opción al treacear, ya ke algunas llamadas nos llevan a otro modulos
(recordemos las API) , lo ke prodría despirtar completamente al nuevo usuario.

Conjuntamente con esta herramiento aprovecharé la oportunidad para referirme al


W32Dasm. Esta herramienta es a mi entender un desensablador pero tiene la
paticularidad ke pondrá las cosas más claras para poder realizar una mejor lectura del
funcionamiento del programa, ya ke dentro del mismo desensamblado se hace la
referencia a desde ke lugares son llamadas las funciones y por ejemplo en ciertos
programas las referencias a las cadenas de texto son visibles desde este y no desde el
olly por ejemplo. Les recomiendo simplemente ke se lo descarguen y le echen una
ojeada , con lo explikado para el OllyDBG no tendán el menor problema para entender
el funcionamiento del mismo.

El Crackme puede bajarse de la zona de descargas de indaya en Seguridad--->Cracking


Bueno gente siendo consiente de la impaciencia ke los ocupa, y a riesgo de aburrirnos
comenzaremos en este capítulo a hacercarnos al primer programa :) .El objetivo será un
crackme V1.0 de cruehead ke obtuve con el curso de Ricardo Narvaja(muy
recomendado para akellos ke se decidan por el Softice en lugar del OllyDBG), creo ke
el autor no se molestará, ya ke este curso es con fines educativos y siempre es bueno
aprender ;).
Lo primero ke haremos será claro está registrarnos, al menos ke seas de esas personas
ke se ganan la lotería me imagino ke es altamente probable ke te salte el siguiente
mensaje "No Luck there,mate!". Entonces tomaremos lápiz y papel y anotaremos este
mensaje ke es el ke nos dá el programa cuando nos registramos incorrectamente. Ahora
pensemos lo siguiente, hemos ingresado un serial y nos há retornado un mensaje donde
nos dice ke el serial es incorrecto, momento... como diablos lo sabía?, luego de pensarlo
un rato llegamos a la conclusión lógica, nuestro serial en algún momento ha tenido ke
ser comparado con el primero para ke el crackme llegue a saber ke no era válido.
Entonces nos keda después de pensar un poco más el siguiente eskema:
El programa captura nuestro serial--->lo compara con el original--->llego a la
conclusión ke no es igual--->Salta a la zona del Mensaje de error

Escribo este eskema en mi hoja justo debajo del mensaje de error y en mi hoja miro toda
la información ke junte y me keda algo como lo siguiente:

Nombre del Programa: CrackMe v1.0 Autor:Cruehead Msg de Error: "No Luck
there,mate! El programa captura nuestro serial--->lo compara con el original--->llego a
la conclusión ke no es igual--->Salta a la zona del Mensaje de error

Me kedo un rato mirando la hoja mientras fumo un cigarrillo, y se me enciende la


lamparita ;), ke pasaría si pudiese evitar ke el programa luego de comparar los serial
saltará a la zona de error...mmmmm, entro al Wdasm y lo desesamblo y luego de borrar
el salto ke hay después de la comparación...BUUUUUUUUUUUUUUUUUU, lo único
ke he conseguido es ke el programa se me cuelgue al intentar registrarme,
evidentemente la cosa es por ahí pero esa no es la solución. Pienso un poco más y digo,
y si cambio el salto para ke salte si son iguales, por lo tanto si son diferentes saltaría a la
parte del programa donde estaremos registrados, interesante , interesante....
Desensamblo mi objetivo con el Wdasm y busca las referencias de cadenas de texto (el
el botón de la derecha de todo al lado del de print, "String Data References") y veo algo
así

O por dios! si está allí ni más ni menos ke el mensaje de error ke salta al ingresar un
serial falso, mmmm... haremos doble click sobre el a ver donde está y me arroja a la
posición de la memoria 004013B4, así ke akí está la zona de "mal chico". Apuntamos
está dirección en nuestra hoja como más nos guste llamarla, yo por ejemplo puse,
Posición de Msg de Error 004013B4. Ahora a continuar... comienzo a mirar para arriba
para ver desde donde han llamado al mensaje de error, paso por el lugar ke hace
referencia a una string ke dice "No Luck!", me huele ke buska despiertarno, seguiremos
con lo ke tenemos hasta ahora , seguimos subiendo un poco más y veremos algo así

Referenced by a (U)nconditional or (C)onditional Jump at address : 0040138B (C)

Esto kiere decir ke la zona de error fue llamada desde esa dirección, así ke como con
todo descubrimiento , a la hojita. Inmediatemente iremos a esa dirección a ver ke
diablos ocurre por esos lados. Vamos en las opciones del Wdasm a goto--->Goto code
location o tocamos Shift+F12 e iremos a esa dirección. Nos deposita allí y estamos
sobre una orden ke dice Jb , y la zona de la memoria de donde venimos . Bueno este Jb (
no no, no está hablando de la marca de whisky, significa Jump if Below),es muy bonito
pero no lo keremos dentro de nuestro programa ya ke nos está llevando donde no
keremos ir. Ahora ke tenemos la dirección cerramos el Wdasm y nos vamos al
OllyDBG y desensamblamos el Crackme. Hacemos click sobre la pantalla ya vamos a
GO TO--->Expression, e ingresamos a la dirección de la memoria ke keremos ir. Pero
ke le haremos a este pobre JB , lo modificaremos para ke salte si los serial son iguales
por lo tanto si son diferentes....ejemmm , pensemos ke pasara. Nos situamos sobre el
salto y hacemos un click con el botón derecho del mouse y vamos a la opcion assemble.
Aki modificamos el JB por un JE (Las modificaciones realizadas en ollyDBG son
provisorias, más adelante veremos como hacerlas permanentes), asi saltará si son
iguales y vamos a Debug--->RUN e intentamos registranos
Y........BUUUUUUUUUUU.... agua, no ha pasado nada ese tedioso mensaje sigue en el
mismo lugar, pero por más pesada ke sea la piedra siempre hay una forma de moverla ;),
asi ke volvemos al Wdasm y y volvemos a las cadenas de texto , y vemos el mensaje de
error hacemos doble clic y estamos en la misma zona de la memoria de siempre, si le
damos otro doble click sobre el mensaje.... O DIABLOS, está en otra parte también el
mensaje o sea ke el programa solo buskaba despistarme....maldito, cai en la trampa pero
te he pillado igual. Esta vez caemos sobre 401370, asi ke a la hoja y lo anotamos y
escribimos ke lo anterior era un engaño para recordarlo. Y ahora igual ke antes nos
interesa ver desde donde se llama esta posición y vemos ke es llamada desde 401245,
asi ke anotamos y halla nos vamos. A ver ke hoy , justo encima de esa posición vemos
un JE siguiendo a una comparación, demasiado sospechoso para mi gusto jeje. asi ke
anotamos la posicion del JE 401243 y me posiciono encima del salto y lo sigo con el
botón Jump To a ver a donde nos lleva. Si alguien se molestó en mirar bien y no se
dedica unicamente a hacer lo ke akí les digo ;) habrá notado ke en las referencias de
cadenas había un mensaje ke decís "Great Work,mate!" , y si alguno milagrosamente
por curiodad le hizo doble click y ya por gracia divina miró desde donde era llamado....
BINGOOOOOOOOOOOO estamos en el mismo lugar o sea ke ESE es nuestro salto
muchachos.
Ahora entonces nos vamos a toda velocidad al OllyDBG y nos posicionamos sobre el
salto y en assemble lo cambiamos por un JNE , para ke salten si no son iguales y le
damos RUN (F9) e intentamos registrarnos y lo tenemos nos sale un mensaje de
felicitaciones :). Lo hemos logrado. Bueno espero ke se hayan divertido, ha sido un
capitulo bastante fructifero , ya hemos crackeado nuestro primer programa. Escribanme
para decirles si les ha gustado, cualkier duda o sugerencia.

TERCERA CLASE

El Crackme puede bajarse de la zona de descargas de indaya en Seguridad--->Cracking


Bueno gente siendo consiente de la impaciencia ke los ocupa, y a riesgo de aburrirnos
comenzaremos en este capítulo a hacercarnos al primer programa :) .El objetivo será un
crackme V1.0 de cruehead ke obtuve con el curso de Ricardo Narvaja(muy
recomendado para akellos ke se decidan por el Softice en lugar del OllyDBG), creo ke
el autor no se molestará, ya ke este curso es con fines educativos y siempre es bueno
aprender ;).
Lo primero ke haremos será claro está registrarnos, al menos ke seas de esas personas
ke se ganan la lotería me imagino ke es altamente probable ke te salte el siguiente
mensaje "No Luck there,mate!". Entonces tomaremos lápiz y papel y anotaremos este
mensaje ke es el ke nos dá el programa cuando nos registramos incorrectamente. Ahora
pensemos lo siguiente, hemos ingresado un serial y nos há retornado un mensaje donde
nos dice ke el serial es incorrecto, momento... como diablos lo sabía?, luego de pensarlo
un rato llegamos a la conclusión lógica, nuestro serial en algún momento ha tenido ke
ser comparado con el primero para ke el crackme llegue a saber ke no era válido.
Entonces nos keda después de pensar un poco más el siguiente eskema:

El programa captura nuestro serial--->lo compara con el original--->llego a la


conclusión ke no es igual--->Salta a la zona del Mensaje de error

Escribo este eskema en mi hoja justo debajo del mensaje de error y en mi hoja miro toda
la información ke junte y me keda algo como lo siguiente:

Nombre del Programa: CrackMe v1.0 Autor:Cruehead Msg de Error: "No Luck
there,mate! El programa captura nuestro serial--->lo compara con el original--->llego a
la conclusión ke no es igual--->Salta a la zona del Mensaje de error

Me kedo un rato mirando la hoja mientras fumo un cigarrillo, y se me enciende la


lamparita ;), ke pasaría si pudiese evitar ke el programa luego de comparar los serial
saltará a la zona de error...mmmmm, entro al Wdasm y lo desesamblo y luego de borrar
el salto ke hay después de la comparación...BUUUUUUUUUUUUUUUUUU, lo único
ke he conseguido es ke el programa se me cuelgue al intentar registrarme,
evidentemente la cosa es por ahí pero esa no es la solución. Pienso un poco más y digo,
y si cambio el salto para ke salte si son iguales, por lo tanto si son diferentes saltaría a la
parte del programa donde estaremos registrados, interesante , interesante....
Desensamblo mi objetivo con el Wdasm y busca las referencias de cadenas de texto (el
el botón de la derecha de todo al lado del de print, "String Data References") y veo algo
así

O por dios! si está allí ni más ni menos ke el mensaje de error ke salta al ingresar un
serial falso, mmmm... haremos doble click sobre el a ver donde está y me arroja a la
posición de la memoria 004013B4, así ke akí está la zona de "mal chico". Apuntamos
está dirección en nuestra hoja como más nos guste llamarla, yo por ejemplo puse,
Posición de Msg de Error 004013B4. Ahora a continuar... comienzo a mirar para arriba
para ver desde donde han llamado al mensaje de error, paso por el lugar ke hace
referencia a una string ke dice "No Luck!", me huele ke buska despiertarno, seguiremos
con lo ke tenemos hasta ahora , seguimos subiendo un poco más y veremos algo así

Referenced by a (U)nconditional or (C)onditional Jump at address : 0040138B (C)

Esto kiere decir ke la zona de error fue llamada desde esa dirección, así ke como con
todo descubrimiento , a la hojita. Inmediatemente iremos a esa dirección a ver ke
diablos ocurre por esos lados. Vamos en las opciones del Wdasm a goto--->Goto code
location o tocamos Shift+F12 e iremos a esa dirección. Nos deposita allí y estamos
sobre una orden ke dice Jb , y la zona de la memoria de donde venimos . Bueno este Jb (
no no, no está hablando de la marca de whisky, significa Jump if Below),es muy bonito
pero no lo keremos dentro de nuestro programa ya ke nos está llevando donde no
keremos ir. Ahora ke tenemos la dirección cerramos el Wdasm y nos vamos al
OllyDBG y desensamblamos el Crackme. Hacemos click sobre la pantalla ya vamos a
GO TO--->Expression, e ingresamos a la dirección de la memoria ke keremos ir. Pero
ke le haremos a este pobre JB , lo modificaremos para ke salte si los serial son iguales
por lo tanto si son diferentes....ejemmm , pensemos ke pasara. Nos situamos sobre el
salto y hacemos un click con el botón derecho del mouse y vamos a la opcion assemble.

Aki modificamos el JB por un JE (Las modificaciones realizadas en ollyDBG son


provisorias, más adelante veremos como hacerlas permanentes), asi saltará si son
iguales y vamos a Debug--->RUN e intentamos registranos
Y........BUUUUUUUUUUU.... agua, no ha pasado nada ese tedioso mensaje sigue en el
mismo lugar, pero por más pesada ke sea la piedra siempre hay una forma de moverla ;),
asi ke volvemos al Wdasm y y volvemos a las cadenas de texto , y vemos el mensaje de
error hacemos doble clic y estamos en la misma zona de la memoria de siempre, si le
damos otro doble click sobre el mensaje.... O DIABLOS, está en otra parte también el
mensaje o sea ke el programa solo buskaba despistarme....maldito, cai en la trampa pero
te he pillado igual. Esta vez caemos sobre 401370, asi ke a la hoja y lo anotamos y
escribimos ke lo anterior era un engaño para recordarlo. Y ahora igual ke antes nos
interesa ver desde donde se llama esta posición y vemos ke es llamada desde 401245,
asi ke anotamos y halla nos vamos. A ver ke hoy , justo encima de esa posición vemos
un JE siguiendo a una comparación, demasiado sospechoso para mi gusto jeje. asi ke
anotamos la posicion del JE 401243 y me posiciono encima del salto y lo sigo con el
botón Jump To a ver a donde nos lleva. Si alguien se molestó en mirar bien y no se
dedica unicamente a hacer lo ke akí les digo ;) habrá notado ke en las referencias de
cadenas había un mensaje ke decís "Great Work,mate!" , y si alguno milagrosamente
por curiodad le hizo doble click y ya por gracia divina miró desde donde era llamado....
BINGOOOOOOOOOOOO estamos en el mismo lugar o sea ke ESE es nuestro salto
muchachos.
Ahora entonces nos vamos a toda velocidad al OllyDBG y nos posicionamos sobre el
salto y en assemble lo cambiamos por un JNE , para ke salten si no son iguales y le
damos RUN (F9) e intentamos registrarnos y lo tenemos nos sale un mensaje de
felicitaciones :). Lo hemos logrado. Bueno espero ke se hayan divertido, ha sido un
capitulo bastante fructifero , ya hemos crackeado nuestro primer programa. Escribanme
para decirles si les ha gustado, cualkier duda o sugerencia.

CUARTA CLASE

En este capitulo veremos como crackear el mismo Crackme , pero si no pudiesemos ver
las string references, es decir, imaginensen ke cuando lo desensamblamos con el wdasm
, o miramos las referencias de texto en el OllyDBG y no encontramos nada, ke
hacemos?. Bueno para resolver esta preguntra, aclararemos lo siguiente, además de
poder situar lo Breakpoint en ciertos lugares del programa como hemos echo en el
capitulo anterior, existen las llamadas funciones API, ke son funciones ke exiten en
Windows , y el programa utiliza para no escribir funciones ke ya puede utilizar
tomandolas de otro lado.

La idea será utilizar estas funciones para ke nos guien a las zona deseada, para poder
encontrar el salto condicional ke deseamos cambiar. En este caso la función API ke
utilizaremos es una llamada MESSAGEBOXA , ke es la ke dibuja las ventanitas con
mensajes, así ke pensaremos ke si podemos ubicar cuando el programa llama a esta
función para dibujarnos la ventanita de NO LUCK THERE MATE, podremos ubicar
desde donde se realiza la comparación, ya ke antes de dibujarla chekeará si nuestro
serial es correcto.

Dicho esto, ponemos manos a la obra. Como siempre lo primero ke haremos será irnos a
nuestro kerido OllyDBG, y desensamblaremos el Crackme. Echo esto le daremos a F9
(para ke corra el debugeador y se ejecute el programa), y luego haremos click derecho
sobre el programa desensamblado e iremos a SEARCH FOR--->Name (label) in current
module, o simplemente pulsaremos CTRL+N, lo ke es ekivalente y obtendremos algo
como lo siguiente.

Bueno aki estamos delante de los modulos ke se utilizan. Lo ke haremos será localizar
el ke nos interesa MESSAGEBOXA. Aki veremos una direferencia, mientras ke con el
Softice bastará poner BPX MESSAGEBOXA, para poner un breakpoint en la función,
aki lo ke haremos será seguirla para ver desde donde se utiliza, ya ke con un Breakpoint
no llegaremos a nada :) .

Entonces lo siguiente, ubicada la función nos situaremos sobre ella y le daremos al


botón derecho del mouse, y lo ke nos ocupa a nosotros es ver desde ke lugares es
llamada, asi ke iremos a la opción FIND REFERENCES TO IMPORT , y allí nos salen
4 direcciones 40135C , 401378 , 4013BC , 40143A .

Si hacemos doble click sobre la primera (para ke nos lleve al programa desensamblado,
a la posición desde donde se llama) veremos ke se trata de la ventana de ke hemos
ingresado el serial correcto, es claro ke esta no nos interesa, ya ke si ingresamos el serial
incorrecto , no utilizará dicho mensaje :p .

Asi ke seguimos, si hacemos doble click sobre el segundo y el tercero, veremos ke


ambos hacen referencia a la ventanita de error, mmmmm... por akí debe ser el asunto.
Pero miro , y digo "son dos", algo no está bien, y es allí donde usando la memoria me
acuerdo ke ya en el Capitulo anterior, el programa me había engañado llevandome por
un camino falso, así ke procederé con cautela.

Hago doble click sobre la ke se llama desde 401378 , y debajo de la posición en la ke


me arroja, hay un RETN (return , es decir ke utiliza la función y me devuelve mediante
esa orden, debajo de la posición desde la cual fue llamada para dibujar la ventana), asi
ke pondremos con F2 un Breakpoint en ese RETN , he intento registrame , esta vez lo
hemos pillado, ya ke el programa nos arroja el error inmediatamente luego de intentar
registrarnos, lo ke nos está diciendo ke nuestro Breakpoint no ha detenido el programa,
por lo ke el programa no utiliza la zona donde pusimos con F2 el Break, por lo tanto
este es el mensaje de error ke nos había engañado en el capítulo pasado.
Así ke sabiendo esto hacemos doble click sobre 4013BC, e igual ke con el anterior
vemos ke debajo de donde nos arroja, hay un RETN, al ke le pondremos un Breakpoint ,
y luego intentaremos registrarnos.

En esta ocasión el programa se ha detenido ;), así ke le daremos a F8 para ke nos


devuelva, y nos arroja sobre la posición 401232, hasta akí vamos bien pero, mmmm....
este lugar me resulta familiar,aaaaaa....como no? si no es más ni menos ke donde la otra
vez habíamos hallado el salto a modificar la ultima vez jajaja ;), si miramos 5 y 6
ordenes hacia abajo respectivamente veremos la comparación y el salto, modificaremos
el salto igual ke la vez anterior posicionandonos sobre el , le damos a la barra
espaciadora, para ke nos lleve a la opción Assemble y allí modificamos el salto JE por
un JNE, y ... BINGO , lo hemos logrado una vez más y no hemos precisado las
referencias de texto ;).

Escribanme para decirles si les ha gustado, cualkier duda o sugerencia.

QUINTO CLASE

Bueno hasta ahora nos venimos divirtiendo despues de dos capitulos de ejercitación,
pero llego la hora de hacer un repaso general ;).

Cap 1: En este capitulo hemos aprendido los conceptos generales sobre el lenguaje
Assembler, CALL,JNZ,JE,TEST,CMP. Aprendiendo la principal diferencia entre Jnz y
Je, para identificar saltos ke nos llevan a la zona del programa a la ke no keremos ke nos
arroje.

Cap 2: Manejo del OllyDBG, e instrucciones básicas para su fincionamiento

Cap 3: Manupilación y crackeo de nuestro primer programa

Cap 4: Forma alternativa de capturación del salto, ke nos llevaba a la zona no deseada
del programa.

Refrescado el contenido anterior, comenzaremos este capitulo. Como primer paso lo ke


haré es recordarles ke en el capitulo anterior la forma alternativa ( En realidad es mejor
acostumbrarse a esta para prescindir de las String References) , consistia en ubicar un
Breakpoint en MessageBoxA, donde se generaba el cartel de error; a continuación les
haré un listado de otros lugares donde pueden situar los breakpoint en las API, para
encontrar el salto no deseado para poder modificarlo.

"MessageBox" ; MessageBoxExA ; MessageBeep ; "SendMessage" ;


DialogBoxParamA ; CreateWindow ; CreateWindowEx ; ShowWindow ;
UpdateWindow; GetDlgItemText ; "GetDlgItemInt" ; GetWindowText ;
GetWindowWord ; GetWindowInt ;
Para programas con vencimiento de tiempo: GetLocalTime ; GetFileTime ;
GetSystemtime

Como habrán notado, en la lista anterior, hay tres ke he resaltado con comillas, esto se
debe a ke son a nivel personal las ke generalmente mas funcionan, lo ke no kiere decir
ke siempre sea así. Visto esto daremos inicio al temario ke ocupa al Cap 5.
Lo ke haremos será el tradicional metodo visto en el cap 3, con un nuevo Crackme, del
mismo autor y obtenido del mismo lugar ke el anterior. Pero no es igual al anterior, si
no ke al ejecutarlo nos pide solamente un password. La intención de este Capítulo, es
tomar práctica.
Cojeremos el Crackme v2.0, y lo primero ke haremos será obviamente ejecutarlo, e
intentar registrarnos para ke nos salga el mensaje de error. "NO LUCK THERE,
MATE!", claro este ke anotaremos el mensaje en nuestra hoja de descubrimiento
(recordemos ke SIEMPRE debemos anotar lo ke vayamos descubriendo, ya ke hay
programas, ke llevan dias para enteder correctamente el funcionamiento y realizar los
cambios necesario, y seria ilogico todos los dias empezar de 0 ;) ). Ahora lo
desensablamos con el Wdasm y vamos a las straing references, una vez alli ubicamos el
cartel de error y le damos doble click y nos arroja sobre la zona 00401357, pero como
somos muy listos nos acordamos ke anteriormente nos habian pillado con un doble
mensaje, asi ke le hago doble click de nuevo....esta vez nos arroja sobre el mismo lugar,
es decir, no hay otro nadie intenta engañarnos,pero bueno mejor prevenir ke curar dice
el dicho ;).
una vez alli subimos y buskamos para ver desde donde ha sido llamado el salto y vemos
ke se hace desde 00401243. Justo encima de este vemos el salto 00401241 ke contiene
el JE ke nos lleva a la zona ke no keremos llegar, anotamos esta dirección y nos vamos
al OllyDBG y vamos a esa direccion y como se ha enseñado en lecciones anteriores
modificaremos por un JNE , e intentamos registrarnos, y.....BINGO estamos adentro. Si
keremos utilizar el metodo sin las References String, no tenemos mas ke ir a los
modulos y localizar el MessageBoxA, si hacemos doble click nos arrojará, justo debajo
del salto :) .
Bueno allí fue nuestro segundo programa, espero ke les haya agradado, escribanme para
dejarme comentarios o decirme si les ha gustado.

SEXTA CLASE

Bienvenidos a este nuevo capitulo del curso de cracking , en esta oportunidad lo que
haremos será registrarnos en el conocido programa de chat Mirc. Para esto lo ke
haremos será bajarnos de www.mirc.com el programa, si es ke ya no lo tienen , y lo
instalamos en nuestra PC.

Una vez ke hicimos esto, lo abriremos y nos aparecerá una ventana ke dice ke nos kedan
x dias para ke venza el periodo de pruba....mmmmm...interesante, ya ke nos indica ke
hay una rutina para chekar los dias ke faltan para ke expire el programa, la cual
podriamos atakar, pero primero a lo primero.

Si vamos a la pestaña HELP del programa encontraremos una opcion ke dice


REGISTER... , alli lo ke haremos será como siempre intentar registrarnos claro esta, y
aparece una mensaje diciendonos, "THE REGISTRATION NAME AND NUMBER
YOU HAVE ENTERED ARE NOT VALID.PLEASE MAKE SURE YOU ARE
ENTERING THE REGISTRATION USING THE CORRECT CAPITALIZATION
AND SPACING".

Ok , ya tenemos el mensaje de error ke nos arroja al registrarnos como para buskar por
donde viene el asunto ;). Lo ke haremos será como siempre hoja y lapicera en mano y
anotar este descubrimiento, y de inmediato (si es ke ya no lo hicieron como sospecho ke
algunos ya han adelantado ;) ), lo desensamblamos con el Wdasm...

Alli iremos a las referencias de cadena de texto y lo ke haremos será encontrar el


mensaje de error ke nos arroja al registrarnos incorrectamente. La encontraremos en
String Resource ID=1909:"...", si hacemos doble click nos arrojara sobre la zona ke se
corresponde a este mensaje 004C7D34 , le haremos doble click de nuevo para ver si no
es llamada desde otra parte, nada solo desde ahi :). Pero aki lo ke haremos será
encontrar el ke dice ke nos hemos registrado correctamente ke se halla una o dos
cadenas por encima de la anterior mencionada, Y al hacer doble click nos arrojará sobre
la direccion de la memoria 004C7C5B .

Con estos datos (ke de mas esta decir ke me imagino ke todos hemos tomado nota jaja),
cerramos el Wdasm y nos vamos a nuestro amado OllyDBG. Una vez ke abrimos el
programa con F9 lo hechamos a andar y con el boton derecho vamos a Go To --->
Expression, y alli vamos a la zona anteriormente indicada. Una vez alli para ver si nos
hallamos en lo correcto ponemos sobre esa posicion un Breakpoint con F2 , y lo ke tiene
ke ocurrir es ke el programa se detendrá??.....

NOOOOO, no han prestado atencion NO PASARA NADA, por ke tamos poniendo un


breakpoint en el mensaje de registracion correcta y lo ke nos arrojara (al menos ke
tengais mucha suerte) es el mensaje de error de registracion incorrecta :) jajaja.
Entonces ke hacemos esto supuestamente detendria el mensaje de registracion
correcta... pero de nada nos ayuda, lo ke haremos entonces es comenzar a mirar el
codigo mas arriba , hasta donde aparesca un return , lo ke indica el final de la rutina
anterior y el comienzo de esta ke estimamos será donde chekeara mi serial....

vamos subiendo y vemos aproximadamente ke en la direccion 004C7BD2 aparece el


serial ke intentamos ingresar seguido de nuestro usuario, de lo ke deducimos ke en el
proximo salto ya tendra comprobado nuestro serial y nos arrojará hacia la zona de error ,
por lo ke inmediatamente lo hubicamos y vemos sin mayores problemas ke se halla en
la dirección 004C7BE3, entonces nos situaremos sobre esta y tocaremos la barra
espaciadora (o assemble con el boton derecho del mouse como mas gusten ;) ) y
cambiaremos como hemos aprendido el JE , por un JNE (saltar si son diferentes), he
intentamos registrarnos :).

Bueno eso a sido todo espero ke les haya gustado y hayan aprendido algo, Claro esta ke
los cambios se iran al cerrar el OllyDBG pero de eso hablaremos mas adelante, ya ke
me imagino ke nadie kiere hacer nada indebido jajaja.... Escribanme para contarme si
les ha gustado.

SÉTIMA CLASE
Bueno con demoras pero henos aki, Bienvenidos al capitulo numero 7 de este cursillo
de cracking. Hasta ahora hemos visto como desensamblar un programa , reconocer los
saltos necesarios, etc...

En este capitulo veremos como matar los bytes , es un tema extremadamente sencillo ,
asi ke sera breve :D. Como recordaremos el salto JE se correspondia con el valor
hexagesimal 84 / 74 y el JNE con el valor 85 / 75 , ke significa entonces esto de "matar
los bytes", kiere decir realizar el cambio ke habiamos echo en el ollydbg de forma
permanente.

Para esto utilizaremos un editor hexagesimal , aki utilizaremos el Hiew,lo puedes


descargar de la zona de descargas de indaya-->seguridad-->cracking o haciendo cilck
aqui Hiew, tiene un entorno gráfico al estilo del softice, o sea ke lo manejaremos con el
teclado. Las funciones ke nos interesarán son:

F4: Mode--> aki cambiaremos en komo keremos ver el programa Text, Hex
(hexagesimal), Decode.
F7: Search--> nos servira para ubicar la cadena ke kerramos cambiar
F3: Edit --> Para realizar la edición
F9:Update-->para ke se mantengan los cambios realizados
F10:Quit --> mmmmmmm.......

Bueno teniendo todo esto desensamblaremos el Crackme v1.0 ke tenemos desde el


capitulo 3, buscamos donde se hallaba el salto, como no soy tan malvado como para
hacerlos hacer todo el trabajo de nuevo jajaja, les recordaré ke el salto se hallaba en la
dirección 401243 , alli veremos ke al costado se halla el valor hexagesimal ke es 74 07,
lo ke haremos es lo siguiente, tomaremos una hoja y un papel y anotaremos este valor
hexagesimal seguido de algunos más consecutivos para poder encontrar la cadena en el
Hiew.

Ej. nos kedaria algo asi: 74 07 E8 18 01 00 00 EB 9A

Una vez ke tenemos esto corremos el Hiew , y abrimos el Crackme1.exe .


Una vez ke lo tenemos alli presionamos F4 y elegimos el modo Hex,
luego F7 , he insertamos la cadena ke keremos , nos posicionamos sobre el 74 (JE) ,
le daremos al F3 y lo cambiaremos por un 75 (JNE) ,
tocaremos F9 para ke se actualice y luego F10 para salir
Ahora abran el programa e intenten registrarse ;) . jajajajja. Espero ke les haya gustado ,
escribanme si tienen dudas o comentarios.

También podría gustarte