_____________________________________________________________________
            __            _  _         ___   _        __            
|         --|__INTRODUCCION_AL_CRACKING!___por_Kacimiro__|--         |
____________________________________________________________________

Entonces que ? , como les va? (no me gusta ser cordial , pero necesitaba algo 
para empezar).
La idea principal al escribir este tutorial no es ensear , es inquietar y lo 
escribo con el animo de ver reacciones y comentarios.  No quiere decir que no 
vayan a  aprender nada , pero a  mi eso de ensear ni me gusta , solo  quiero
darme a conocer y  conocer las mentes, en especial de Colombia, que de verdad
se interesan por el tema. Ojal muchos de los lectores sean colombianos y que
de verdad se puedan generar algunas expectativas entre tanta mente inutil.

No voy a entrar a explicar demasiado , tantas cosas , solo voy a hablar de lo
mas  importante , el tutorial probablemente  sera corto , porque solo  es una
introduccion  y sera el primero  de una serie de  articulos , todos aceca del
cracking, entonces repito, en este  solo hablare de lo  que es el cracking en
general , tipos de protecciones , las herramientas , Key  generators  y otras
cosas  que no se me  ocurren en  este momento, pero  que ire agregando poco a 
poco poco, pero bueno, si estan leyendo esto quiere decir que ya agregue todo
lo que iba a agregar, (virgen del agarradero!).

La verdad el cracking puede tener  muchas areas donde aplicarse y el concepto
se puede ampliar mucho , pero casi siempre  que la gente habla de cracking se
refiere a las protecciones shareware , o sea , esos 30  dias de prueba o esos
"numeritos magicos" , o algunas  veces a las protecciones de cd de los juegos
( en general ), que no nos dejan copiar el cd , sacando un error de lectura o
no se que . En que otras  areas  pueden aplicar el cracking ? no se , ustedes
veran , depende de  su imaginacion .  Hay gente  que  disfruta  del  cracking
haciendo trampa en los juegos y hay  otros que prefieren jugar con el notepad
y agregarle  otras funciones , hay otros  mas desocupados  que le cambian  el
color al prompt de DOS y hay otros que... 

Que se necesita? las herramientas escenciales de un cracker son, un desensam-
blador,un debugger y un editor hexa.
Editores hexadecimales hay por cantidades , en desensambladores se recomienda
el Win32Dasm y el IDA y el debugger mas recomendado es el SoftIce.Yo creo que
la mejor herramienta de un cracker es el softice,ese es un programota, famoso
por sus breakpoints.(Luego habra un articulo dedicado al softice). Aunque eso 
no quiere decir que sea indispensable . Lo  indispensable aqui es un cerebro, 
que se  han venido  agotando, o no  estoy seguro si es  que hay  que  saberlo
conseguir, en fin!.

El shareware y sus protecciones

Las  protecciones  mas comunes  son las de " registration keys "  o  " serial
numbers".
Eso funciona asi: usted le paga al creador  del programa y el le da una clave
para registrarlo, generalmente esta clave esta creada en base a los datos que
usted de , casi siempre de acuerdo al nombre, obviamente este algoritmo tiene
que  estar incluido en cada copia del programa . Otras veces no existe ningun
algoritmo y es un mismo numero para todas las copias. Otras veces , su merced
le paga al " ambisioso creador " y el " ambisioso creador " le manda un patch
(parche para los que no entienden).

Dispuesto  ante este tipo de  proteccion , el cracker  tratara de  alterar el
flujo del programa de diversas y muy comunes maneras,puede simplemente entrar
directamente  al proceso de  comprobacion de  la clave o puede ir habilitando
cada una de las opciones  y matando las  tan conocidas  nag-screens  que  nos
recuerdan a cada momento nuestra "necedidad" de registrar  el programa , cosa
que es mas complicada, larga y estupida. Tambien puede extraer la rutina  que
crea la clave y hacer su  propio generador de claves , que  es mas complicado
aun, o puede  simplemente  buscar el  patch o  crack, o el  maldito  numerito
para registrar, cosas que abundan en Internet.

Ustedes  quieren saber  de donde salio el numerito , si acaso es un agradable
amigo que  registro el  programa y quiere  compartir su felicidad con todo el
mundo , o si acaso fue un  misterioso  hombre que  simplemente  acerto  coin-
cidecialmente  o  si , en el  mejor  de los  casos  a alguien  se le  ocurrio
investigar el programa y encontrar la forma de hallar ese numerito.

Tenemos un programa llamdo "programa", lo queremos registrar, vamos a al menu
de ayuda  y hay una  opcion que  dice , " Register " , nos metemos , sale una
ventanita con  un espacio  para un  nombre y un numero , escribimos cualquier
cosa, presionamos "OK" y la cosa funcionaria, generalmente asi:

- "programa" llama a funcion que coge nombre y coge numero de ventana. 
  -    32 bits         16 bits
     GetWindowTextA  GetWindowText
     GetDlgItemTextA GetDlgItemText
- "programa" llama a funcion que usa nombre para generar numero.
- "programa" llama a funcion que compara numero ingresado con generado.
- La llamada anterior retorna un valor (1 o 0, verdadero o falso).
- Se mira el valor retornado.
- Se produce o no se produce un salto de acuerdo a la operacion anterior.
- si salta llama a funcion que muestra mensaje "good cracker! kacimiro"
- si no salta muestra mensaje "bad cracker! kacimiro"
  -   32 bits     16 bits
    MessageBoxA  MessageBox

Esto se traduce en ensamblador de la siguiente manera:

call [USER32!GetWindowTextA] --> o la funcion que sea.
...
... 
call xxxxxxxx --> genera y compara, aunque puede estar diferente llamdas.
test eax, eax --> mira si eax=1
jne xxxxxxxx --> si es igual sigue, sino salta a xxxxxxxx
...
*Refencia a cadena -> "Bad cracker! kacimiro"
push xxxxxxxx
...
call [USER32!MessageBoxA]
...
*Referenciado por un salto condicional en xxxxxxxx
*Refencia a cadena -> "Good cracker! kacimiro"
push xxxxxxxx
...
call [USER32!MessageBoxA]
...
*Y sigue registrando.

Si no saben nada de ensamblador para eso hay un cuerso en esta misma revista, 
si no entienden nada, se pueden dar por perdidos en el mundo underground. 
Gracias.

Bueno sr. profeso , ya sabemos como funciona, pero como encontramos esa parte 
del codigo y despues de entender como funciona que hacemos?. Juanito es usted
un completo estupido si no se le ocurre nada, pero como se supone que los que
leen esto no saben mucho, pues ah va:

Para encontrar esa parte del codigo es facil , en Win32 Dasm hay  una  opcion
para ver las referencias a todas las cadenas del codigo. Ahi  podemos  buscar
lo que necesitamos . Ya  les  mostre las  funciones de windows  mas comunes ,
hablando  de  cracking . Con  el SoftIce  podemos hacer  unas  cosas  llamdas 
Breakpoints estos famosos Breakpoints sirven para interumpir la ejecucion del
programa en la funcion o direccion de memoria que necesitemos. 

Entonces, ya que entendemos como funciona la cosa, llego la hora de hacer los
cambios . Como ya se  les debio haber ocurrido ( Al que no  se le  ocurrio se
puede ir)
si queremos crackear este programa hay que cambiar ese saltico . Queremos que
siempre salte, para que nos registre el programita (jne por jmp).

En el Win32Dasm y en muchos desensambladores cada linea se ve asi:

:00403040 7521 jne 00401252 -> Para los estupidos que no se dan cuenta de las
cosas, estos valores son ficticios (o sea que no exiten), no existen.

el primer valor es una direccion que Win32Dasm asigna a cada instruccion , el
segundo valor es la instruccion convertida en numeros hexadecimales.
Ese valor es el que necesitamos cambiar. Nos metemos en el editor buscamos el
valor, lo cambiamos y listo. Y como sabemos por cual valor cambiarlo? asi:

jne 75 o 85
je  74 o 84
jmp eb (corto)
    e9 (medio)
    ea (largo)
nop 90
ja  77
jb  72
jna 76
jle 7e
jl  7c

ya? bueno. Hay unas recomendaciones que hacer para la hora de cambiar:

- Si  queremos  saltar : cambiar  el  salto  condicional  por  incondicional
(74 -> eb) no por el opuesto ( 75 <--> 74 ). Esto se aplica mejor en protec-
ciones de cd.
-si no queremos saltar : cambiar por push eax, pop eax (4048) no por nop (90)
porque algunos programas nuevos lo verifican.
-se debe cambiar el mismo numero de bytes, quiero decir que:
si queremos hacer no operacional una instruccion que en hexa es 
xxxxxxxx la cambiamos por
40484048

Queda claro que eso es una proteccion absurdamente sencilla,suele suceder que
solo estemos cambiando el mensaje, pero nada mas , otras veces pasa que queda
registrado y al reiniciar vuelve a estar " unregistered " , esto quiere decir
que verifica mas de una vez. La solucion podria ser buscar que llamdas hay un
poco mas arriba , o buscar el comienzo de toda la rutina en que estamos y ver
de donde mas es llamda y luego hacer los cambios. Y asi es basicamente en los
programas shareware.

Las protecciones de CD.

Bueno con el capitulo  anterior debieron haber quedado muy bien entenidos los
aspectos basicos, entonces aqui la explicacion se resumira mucho.

Y que es eso de protecciones de cd ? pues  son esas que no nos dejan jugar si
no esta el cd metido en la unidad y en algunos tiene que ser original , el cd
original tendria un sistema de proteccion contra copia como safedisk y la co-
sa funciona asi , safedisk coloca una firma digital en cada cd original , que
no puede ser copiada con una copiadora tradicional. En los primeros dos minu-
tos del cd, encontraremos una cantidad de errores de lectura. Con algunos 
programas se puede lograr la copia, pero no es lo mismo. Luego hablaremos mas
de este safedisk.

Nos vamos a dedicar a las protecciones mas sencillas, por ahora.

Primero necesitamos  el juego que queremos crackear , hacemos la  instalacion
mas grande posible . Ejecutamos el juego , sin el cd , y saldra un  mensajito
diciendo, "Insert the fucking cd, are you fucking losing your mind".

Ahi tenemos la primera referencia para buscar en el codigo desensamblado.
Encontrandonos ya ahi, hay muchas cosas que se pueden hacer.

Empezemos por lo mas sencillo.Debemos buscar una llamada anterior al mensaje,
y la cambiamos por una instruccion que no haga nada (push eax , pop eax) . Si
no funciona , hay que probar con otras llamadas de mas atras , si no funciona
que es lo mas obvio es porque la cosa no funciona asi. Si funciona quiere de-
cir que es la proteccion mas estupida que pudimos haber encontrado.

Tambien podemos  buscar algun salto condicional justo antes del mensaje o al-
guna referencia a un salto, entonces cambiamos el salto, ya deben saber como.

Tambien podemos buscar una llamada a GetDriveTypeA y despues de esto una com-
paracion con 00005 que corresponde al cd, en este caso podemos cambiar el 005
por un 3, que corresponde al Hard Disk.

Hay otras funciones muy comunes cuando hablamos de game cracking y estas son:

- GetDriveTypeA 
- GetVolumeInformationA 
- GetDriveAttributeA 
- FindFirstFileA 
- SetCurrentDirectoryA 
- GetFileSize 
- CreateFileA 
- GetDiskFreespaceA 
- GetFileAttributeA 

No entrare en detalle, solamente las nombro porque... porque... si y que!????

Y eso es todo lo que aprenderan hasta ahora, en proximas ediciones profundiza
remos mas, veremos algo sobre el SoftIce y muchas otras cosas que no se me o-
curren por el momento.


                                                Kacimiro - TRENCHCOAT LEGION.


