APRENDIENDO CRACKING |
¿Qué es el software? |
Todo programa de computadora fue creado en algun lenguaje de programacion, y basicamente se trata de una serie de instrucciones que se estaran ejecutando de acuerdo a ciertas normas establecidas por el compilador en el que fue creado, hasta que demos la opcion de terminar o salir de el.
LOS COMPILADORES:
Para que un programa pueda ejecutarse en un PC, el codigo fuente debe COMPILARSE, esto es que una ves que tenemos escrito el programa, el COMPILADOR se encarga de traducir todo el codigo a lenguaje binario para que pueda ser entendido por el procesador (CPU = Unidad Central de Procesamiento, aqui un enfasis, generalmente le llaman de forma equivocada CPU al GABINETE que integra nuestra computadora, siendo que CPU es el CHIP principal o lo que conocemos por PENTIUM por dar un ejemplo), asi que al decir COMPILAR queremos decir con "QUE" esta traducido para que pueda funcionar.
A diferencia de los programas hechos para trabajar en MSDOS, los programas de windows ejecutan sus comandos con la ayuda de interfases llamadas API.
Las API son la conexion entre los demas componentes de la computadora, como teclado, reloj, mouse, pantalla, archivos, etc. y el mismo programa. Son estas APIs de las que nos valdremos para poder estudiar los programas.
Una API es una funcion, es decir, al llamar una funcion, es necesario darle los valores con los que va a trabajar y del cual al procesarlos, obtendremos un resultado; para entender esto pongamos el siguiente ejemplo, el cual lo hare de manera muy simple...
Funcion SUMAVALORES (Val1, Val2: ENTERO): ENTERO
SUMAVALORES == Val1 + Val2
miprograma
Valor1 == 2
Valor2 == 5
Valor3 == SUMAVALORES (Valor2, Valor1)
Ahora la explicacion: Como podemos ver, en Valor1 guardamos el 2, y en Valor2 guardamos el 5 luego, en Valor3 obtenemos el RESULTADO de lo que pasa dentro de SUMAVALORES.
SUMAVALORES es una FUNCION a la que le pasamos 2 valores ENTEROS, realiza la operacion matematica y regresa OTRO valore (se me fue el italiano, jeje) ENTERO. Si no eres malo con las matematicas, podras sacar el resultado, el cual es 7. Solamente con pura logica, sabes lo que pasa, esto es porque esta manera de procesar la informacion es algo que nos enseñan en la escuela y lo aplicamos en la vida cotidiana, ¿si o no?
Pero si observas con detenimiento, aqui hay "truco"... seguramente ya lo notaste, si no es asi, te explico...
Valor3 == SUMAVALORES (Valor2, Valor1)
ASI ES!!! yo pase primero el VALOR2 y luego el VALOR1, esto no afecta porque es una suma, PEROOOO, ¿que tal si fuera una division o resta?, bien de esto se trata el cracking, de estar al pendiente que pasa con la informacion que maneja el programa ;)
Regresando al tema: A una FUNCION le pasamos ciertos valores y nos regresa un resultado, asi funcionan las API. Cada API de windows tiene un nombre representativo de lo que hace, y windows es muy celoso del nombre, asi como en español los nombres propios de personas deben llevar la primera letra mayusculas, windows espera que nosotros llamemos a sus API de la misma forma, asi que NO es valida usar todas minusculas o todas MAYUSCULAS, debemos respetar este orden.
Veamos una de las apis mas conocidas: MESSAGEBOXA, la cual su forma correcta de hacer referencia, de escribirla, sería: MessageBoxA; esta API lo que genera es una ventanita con un icono (puede ser de: aviso, advertencia o pregunta), dos lineas de texto (una en la cintilla y otra dentro de la ventanita) y un boton, que puede ser "Aceptar", a esta funcion le pasamos ciertos valores y nos regresara un valor que representaria que ya "pulsamos" ACEPTAR, el programa que mando llamar esta API detectaria este valor y lo interpretaria, procediendo a seguir con el flujo del programa. Aqui una imagen de como se ve una API MessageBoxA de un crackme muy conocido, el "Crackme1" del cracker Cruehead, en este caso, nos avisa de que el registro no fue el correcto.
Esta es una llamada API a MessageBoxA
Recapitulando: Los programas usan las API para obtener resultados de la informacion que estan manejando.
Las APIs estan almacenadas dentro de archivos que windows maneja en forma nativa, los cuales pueden ser: "kernel32.dll", "advapi32.dll", "user32.dll", "guid32.dll", etc. Estos archivos los puedes encontrar dentro de %WinDir%\System32, donde: %WinDir% puede ser "windows" o "winnt". En este ejemplo, MessageBoxA esta guardada dentro de la libreria: "user32.dll".
¿Qué tipos de lenguajes de programacion existen?
Dentro de los más usados tenemos:
Visual Basic (VB).- Es el lenguaje de programacion creado por microsoft y de los mas "faciles" de usar. Los programas compilados en VB se caracterizan por usar sus propias APIs, y que como vimos antes, estas APIs esta contenidas dentro de las librerias: MSVBVM50.DLL si se trata de VB v5.0 y MSVBVM60.DLL para la version 6.0.
Un programa hecho en VB puede estar compilado de dos maneras:
FORMA NATIVA: Indica que la aplicacion se compila usando el juego de instrucciones sobre la plataforma de desarrollo con la que se compilo, o sea, se usaria en lenguaje ensamblador de la familia de los CPU x86. Por ejemplo, para llamar la API MessageBoxA, VB usaria la API rtcMsgBox.
P-CODE: Indica que la aplicacion se compila usando un juego de instrucciones fijo, es decir que el juego de instrucciones usado es el mismo para todas las plataformas de desarrollo. Basicamente se parece mucho al lenguaje Java, al igual que este, se utiliza una maquina virtual para traducir las instrucciones al lenguaje del procesador sobre el cual se ejecuta la aplicacion. En un PC esta maquina virtual reside en las famosas DLL msvbvm50.dll y msvbvm60.dll. Basta por ahora decir que practicamente todo el programa se ejecuta dentro de estas librerias y no en el ejecutable, pero ya veremos eso mas adelante, no se me desesperen.
Visual FOX Pro (VFP).- Desde el punto de vista del programador, Visual Fox Pro es un gestor de base de datos, orientado a la programacion de objetos. Pertenece a la familia xbase lo que hace que su programacion sea sencilla, estructurada y mas facil de entender.
VFP al ser un producto de Microsoft, veremos que tmb basa su funcionalidad en el uso de librerias, las cuales nos daran la pauta de saber con facilidad de que version de VF se trata, p.e. en el videotutorial del Crackme v2 del cracker Blasito se pueden apreciar las siguientes librerias: vfp9r.dll, VFP9ENU.dll y vfp9t.dll, que como se puede apreciar, nos indica que corresponden a la version 9 del VFP y que esta utilizando las librerias en Ingles (ENglish).
Desde el punto de vista del cracker, La dificultad de analizar una aplicacion compilada en VF depende de la pericia del que la revise, ese decir, se puede utilizar algun debugger (para los que no saben que es un debuger, mas adelante lo veremos) pero veremos que nos complicaremos la existencia, a menos que sepamos ya la manera en que trabaja internamente las librerias de VF y generalmente no esperen buscar un salto a modificar y CALL a nopear, xq practicamente no la encontraran.
Afortunadamente para la delicia de muchos, existen "descompiladores", entre los cuales, el ReFOX es la preferida por su facilidad de uso, decir que este programa nos regresa el codigo fuente "tal cual" lo tiene el programador en su compu. Pero OJO!, no esperen que esto se repita con otros lenguajes de programacion, porque se llevaron una decepcion.
Curiosamente todas las protecciones en VFP que he visto se basan en la generacion de numeros de serie.
C++.- pendiente.
Delphi.- Delphi es un IDE (Integrated Development Environment, Ambiente de Desarrollo de Software) creado para la programacion con propósito general con énfasis en la programación visual. En Delphi se ve como una versión moderna del lenguaje de programación Pascal llamado Object Pascal. En sus origenes, Delphi fue desarrollado por Borland Software Corporation (anteriormente Borland Internationa, Inc.), compañía de Sofware de Scott Valley, California, Estados Unidos. Este lenguaje nació en la primavera de 1995. Borland actualmente lo comercializa la empresa estadounidense CodeGear. En sus diferentes variantes, permite producir archivos ejecutables para Windows, Linux y la plataforma .NET.
Ensamblador (TASM / MASM / FASM).- Quien programe en este nivel, practicamente es un cracker en potencia. Es lo mas cercano a trabajar a lenguaje maquina. El ensamblador es una serie de instrucciones llamadas mnemotecnicos cuyo codigo es facilmente traducido a codigo binario por lo que practicamente tienes que programar todo lo que quieras hacer, y con esto tienes una puerta abierta a todo un universo de posibilidades.