Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Curso Cracker
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).
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.
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.
SEGUNDA CLASE
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.
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.
Estas serán principalmente las opciones ke nos ocuparán, existen otras útiles, pero las
veremos más adelante cuando sean necesarias.
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.
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
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í
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
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
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í
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.
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 :) .
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 .
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 4: Forma alternativa de capturación del salto, ke nos llevaba a la zona no deseada
del programa.
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.
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...
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á??.....
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.
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.......