Autor: [KRaViTZ]
Notas del autor: Este material
completamente para uso educativo y no me hago responsable
en absoluto del uso que el lector le pueda dar al mísmo
ni de los daños y/o perjucios le pueda ocacionar. Si
desea publicar este manual puede hacerlo libremente pero
respetando los derechos de autor. Si Ud. no está de
acuerdo con las condiciones de uso de este documento, por
favor no lo lea y elimínelo de su disco duro.
Objetivos
El
objetivo de este manual es que los lectores interesados
puedan intruducirse a este mundo del cracking desde otro
enfoque diferente al que la gente conoce. Que puedan
iniciarse con un mínimo de conocimientos previos que se
les brindarán en este manual.
Concepto de Cracking
Tambien recibe el nombre de Ingeniería Inversa, es la
ciencia que estudia la seguridad de sistemas de
protección tanto de software como de hardware con el
objetivo de violarlos para aprender de ellos y obtener un
beneficio personal sin fines de lucro. Podemos definirlo
tambien de forma más generalizada como la acción que
consiste en la modificación total o parcial de sistemas
mediante alguna técnica específica para adaptarlos a
las nececesidades personales de uno o bien solucionar
fallas o errores de los mismos.
Breve
introducción a la materia
Casi todo el mundo ve al cracking como pirateria, como
algo ilegal, aunque algo de razon hay aqui si se emplea
incorrectamente como en la mayoría de los casos. Se
supone que toda ciencia es usada para el bien, y el
cracking deberia serlo. Seria bueno que los crackers
aprendan desde el principio a estudiar los sistemas de
protecciones comerciales para poder crear otros nuevos
con meyor seguridad o bien mejorar los existentes e
implementarlos en los futuros programas en vez de andar
publicando cracks en internet, por que eso sí es ilegal.
Entonces podriamos decir que existen crackers buenos y
malos, de los buenos por suerte hay una buena cantidad,
pero tambien hay muchos de los otros que quizas muchos de
ellos tienen muy malas intenciones como la creacion de
virus para ocacionar daños. El buen cracker puede
considerar o no como "enemigo" a estos tipo de
crackers, pero a diferencia del bueno, el malo tiene como
enemigo Nº1 los autores de los programas.
Quién
puede ser cracker?
Es común ver que muchas personas creen ser crackers por
el solo hecho de bajar un crack publicado de internet
para registrar un shareware y probablemente luego
venderlo. Ellos creen que esa acción es crackear, pero
es un pensamiento erroneo, nosotros los crackers los
vemos a ellos como verdaderos ignorantes. Entonces si
ellos creen ser crackers, que queda para el autor del
crack? Ambas partes se consideran complices de la
pirateria lo cual no es bueno.
Una persona debe reunir ciertos requicitos y cualidades
para poder ser cracker, acá muestro los mas importantes:
- Conocimientos de
Software y Hardware
- Conocimientos de
programacion en general
- Conocimientos
básicos de Assembler (Impresindible)
- Muchas ganas e
interés
- Mucha dedicación
y esfuerzo
- Mucha paciencia y
tiempo
Un cracker no se hace de un dia para el otro, esto puede
llevar meses e iclusive años. Para ser bueno eso
depende, pueden ser otros años mas, y para ser
profesional... bueno, mejor cambiemos de tema.
Qué
hay de las protecciones de software?
La extraordinaria cantidad de programas que han sido
crackeados, la mayoría fueron los programadores quienes
hicieron el sistema de protección. El resto han sido los
mismos crackers quienes lo programaron, y quien mejor si
no entonces? estas protecciones presentaban gran
dificultad para desprotegerlos, aunque se han visto
programas que son casi imposible crackearlos y solo un
cracker puede hacer un sistema asi, pero como ya sabemos
nada es imposible, no existe 100% seguridad. Pero
igualmente con esto logramos que las empresas
desarrolladoras de software contraten a un buen cracker
para proteger su software. También en internet hay
muchas empresas de seguridad informática que están
conformadas principalmente por crackers y hackers que
prestan ese tipo de servicios y venden licencias de
software con sistema proteccion incluida.
Existen infinidades de maneras de proteger programas, las
mas comunes de encontrar en los programa son los
siguientes:
Tiempo
de uso limitado:
El programa puede caducar después de un período de
tiempo determinado por el programador desde la fecha de
instalación si no se registra el programa. Se suele
limitar a minutos, horas, dias y meses.
Cantidad
de ejecuciones limitadas:
El
programa caduca luego de haberlo ejecutado una cantidad
determinada de veces despuás de su instalacion si no se
registra.
Numero
de serie:
Esto es lo mas comun encontrar, existen de dos tipos,
números de serie fijos o variables, éste ultimo se
genera en la mayoria de los casos en base a algo, como
por ejemplo en funcion del nombre de usuario,
organizacion, etc. de esta manera se consigue un serial
diferente y único para cada cliente o usuario. Pero
también se suelen generar en función al nombre de la
PC, del número de serie de disco o de algun otro
componente del equipo. Y por último tenemos los números
aleatorios, éstos son los más dificiles de crackear.
Mensajes
molestos y/o nags:
Esto tambien es bastante común, son ventanas que pueden
aparecer al inicio del programa o al final, o en alguna
accion por parte del usuario en donde informa que se
encuentra ante una copia no registrada o algun otro
mensaje relacionado a la protección. Estos mensajes
desaparecen al registrar.
Funciones
desabilitadas:
Esto le dá a un shareware una escencia de que estamos
ante una Demo pero no lo es en absoluto, generalmente
deshabilitan funciones importantes de la aplicación,
como por ejemplo: abrir, guardar, importar, exportar,
imprimir, grabar, etc. Cuando registramos se habilitan
todas.
CD-ROM:
Esta es la mas usada por los videos juegos. Debemos
insertar el disco para poder jugarlos. Aveces hay juegos
que están completamente instalados en el disco rigido
pero nada más por seguridad nos piden el CD, otros
realmente requieren archivos del mismo para su
funcionamiento.
Archivos
llave:
Es algo parecido al anterior pero funcionan de muchas
formas diferentes dependendiendo de las habilidades del
programador.
Anti-herramientas
cracking:
Estas son muy efectivas si se utilizan técnicas
novedosas o desconocidas para los crackers. Se pueden
aplicar anti-depurador , anti-desensamblador,
anti-monitores de registros o archivos, api, etc. Tambien
anti-modificacion del ejecutable que seria algo como
anti-editores hexadecimales.
Ejecutable
comprimido y/o encriptado:
Esto también es muy efectivo si no se usan técnicas
genericas. Por ejemplo con la compresion logramos
disminuir el tamaño del ejecutable impidiendo que pueda
ser desensamblado y también ocurre lo mismo con la
encriptación. Pero tiene sus desventajas, con un
depurador podemos ver el codigo en memoria ya
descomprimido o desencriptado y se puede trabajar sobre
él. Hay programas genericos que permiten descomprimir o
desencriptar ejecutables para dejarlos tal y como lo
vemos en memoria para poder aplicar parches.
Qué herramientas se utilizan?
Para crackear no se necesitan tantas
herramientas, pero las hay segun sea el caso, a
continuación nombraré y describiré las principales:
Depurador:
(En inglés Debugger) Es un programa que en realidad ha
sido creado para solucionar errores o bugs de otros
programas. Permite ver instrucción por instrucción en
assembler que ejecuta el microprocesador en memoria
durante la ejecución del programa y además nos permite
poner puntos de parada (BreackPoints) en cualquier parte
del código durante la ejecución. Podemos editar en
forma temporal la memoria, los registros y las
instrucciones para alterar su comportamiento. Ejemplo:
SoftICE, TRW2000.
Desensamblador:
(En inglés Disassembler) Es un programa que nos permite
ver el código de un ejecutable en assembler e
interactuar con él. Podemos ver referencias de texto,
menúes y cuadros de dialogo, funciones importadas y
exportadas del programa desensamblado. Ejemplo: W32Asm,
IdaPro.
Editor Hexadecimal:
Con este programa podemos editar los bytes en hexadecimal
de las instrucciones de cualquier ejecutable o archivo.
Con esto hacemos los parches. Ejemplo: UltraEdit, Hview,
HexWorkshop, etc.
Monitor de Archivos:
Este
programa se encarga de mostrarnos secuencialmente en
tiempo real los archivos que estan siendo manejados con
operaciones de entrada y salida (I/O) y por que programa
esta siendo utilizado. Ejemplo: FileMon.
Monitor de Registro:
Este
programa es similar al anterior con la diferencia de que
se refiere al registro de Windows. Ejemplo: RegMon.
Monitor de Funciones API:
Este
otro programa también es similar a los anteriores, nos
permite espiar las funciones API utilizadas por un
determinado programa en tiempo de ejecucion. Ejemplo:
APIS32.
Descompresor:
Es un
programa que sirve para descomprimir ejecutables
comprimidos por algun compresor. Ejemplo: ProcDump.
Todas las herramientas se pueden encontrar
en internet pero como toda herramienta antes de usarla
por primera vez, debemos aprender a utilizarlas
correctamente, hay cientos de manuales dedicados a las
mas importantes, sobre todo el SoftICE que es muy dificil
entenderlo. Como ya se habran dado cuenta necesitamos
tener conocimientos de assembler para utilizarlas, por lo
tanto busquense un buen manual para aprender.
Un
pequño ejemplo práctico
Un programa es un conjunto de instrucciones
que al ejecutarlo se cargan en memoria y éstas son
ejecutadas una por una por el microprocesador. Muchas
instrucciones impiden que se ejecuten otras como las
instrucciones condicionales. Citaré un ejemplo un
shareware cualquiera que hay que registrar por con un
número de serie generado en base al nombre, si no
introducimos el número correcto nos mostrará un mensaje
de registración incorrecta. Qué ocurre en las
instrucciones? Lo que aquí sucede es que hemos entrado a
las rutinas de comprobación del serial del programa, que
compara nuestro número de serie introducido con el
número correcto, si son distintos muestra el mensaje de
error y si son iguales nos muestra el de felicitacion y
registra el programa. Saber assembler es fundamental para
el crackeo, es un lenguaje de bajo nivel y practicamente
el mas dificil de aprender. Ahora observaremos un
pequeño ejemplo del algoritmo que hablamos representado
en dicho lenguaje:
0001
push eax <- Almacena nuestro número en el registro
EAX
0002
mov ecx, 0123 <- Mueve el serial correcto al registro ECX
0004
cmp eax,ecx <- Compara nuestro serial con el verdadero
0005
jne 0008 <- Si son distintos nos muestra mensaje de
error
Este
sistema es uno de los mas sencillos y faciles de crackear
que nos podemos encontrar, aunque casi no quedan de esos.
Para crackearlo es muy facil, se pueden modificar varias
cosas, pero normalmente se acostumbra a invertir el salto
condicional JNE que salta a la direccion 0008 donde esta
el mensaje de error si EAX y ECX no son iguales, por el
salto JE que salta si son
iguales para que continue ejecutandose la siguiente linea
y con esto cuando registremos el programa, nos aceptará
cualquier número de serie como válido, salvo que
pongamos el serial real.
Palabras finales
Con esto ya concluimos con este manual. La
teoria necesaria para el cracking propiamente dicho
merecen tutoriales especificos para temas en particular.
Para los que se quieren iniciar, como ya he dicho, deben
como primera medida aprender lo básico de assembler,
aprender a usar las herramientas y luego leer tutoriales
prácticos de crackeo para despues comenzar a practicar.
Esas serían las pautas organizadas para que una persona
se forme como cracker. Pero siempre recomiendo leer
muchos manuales y tutoriales, muchisima práctica y
entusiasmo si de verdad queres progresar.
[KRaViTZ]
|