💻💣 TUTORIAL MEGABÁSICO DE CÓMO CRACKEAR UN PROGRAMA 💣💻


byProphus

Miembro muy activo
Me he dado cuenta de que llevo en este foro desde 2019 y nunca he aportado nada, así que voy a aprovechar que desde hace unos años estoy bicheando con cosas de hacking/cracking para compartir lo que voy aprendiendo y tener un proceso documentado :)
Para entender este tutorial voy a explicar absolutamente todo lo que pueda, para que cualquier persona sin conocimientos básicos que lea este post pueda entender el máximo de conceptos posibles. Lo importante para mí no es aprender el "algoritmo", sino entender los fundamentos básicos y utilizarlos como herramienta para hacer todo este tipo de locuras.

Nos situamos en la piel del hacker: tenemos un programa (.exe) que nos pide cierto login, serial key, o cualquier mierda para autenticarnos. En este caso, me he tomado la molestia de hacer un pequeño programa en C++ con un login sencillo para poder crackearlo.

C++:
#include <iostream>
#include <string>
using namespace std;

int main(){
    string user;
    string password;
    cout << "- - - - - Gestor de passwords - - - - -" << endl << endl;
    while(true){
        cout << "Usuario: " ;
        cin >> user;
        cout << "Password: " ;
        cin >> password;

        if(!(user == "manologamer" && password == "villarea1968")){
            cout << "Login UNSUCCESFUL. Intentelo de nuevo." << endl;
        }
        else {
            cout << "Login SUCCESFUL" << endl;
            string fin;
            cout << "Credenciales almacenadas: " << endl << "[email protected] :: jaimitoelmejo123" << endl
            << "[email protected] :: betismanquepierda" << endl << "[email protected] :: yastinbibe45" << endl;
            return 0;
        }
    }
  
    return 0;
}

Como veis, he intentado simular un gestor de passwords rudimentario. Al ejecutar el .exe, nos encontramos con esto:
1707131520417-png.27009

Ten en cuenta que a la hora de crackear un .exe, no vas a tener acceso a este código, pero sí puedes acceder a su código en ensamblador. Simplemente he creado yo mismo el programa para poder mostrar su código y enseñar que esto del cracking no es ningún truco de magia ni nada por el estilo.

¿Qué coño es ensamblador?

Ensamblador (en inglés, assembly) es un lenguaje de bajo nivel que está por encima del binario (1's y 0's, que es lo que entiende la máquina). Este lenguaje varía dependiendo de qué arquitectura tenga nuestro procesador (x86, MIPS, etc...). En mi caso, aprendí ensamblador haciendo programas en MIPS para una asignatura de la carrera, pero una vez que entiendes un lenguaje ensamblador (cual sea), los otros no son tan difíciles de comprender. Es importante tener conocimientos de este lenguaje, porque gracias a esto vamos a poder modificar nuestro programa de manera que se pueda saltar la verificación de credenciales.

assembly.png


Si queréis aprender ensamblador, podéis hacerlo por vuestra cuenta en páginas como esta (en verdad he escogido una al azar, pero hay miles de vídeos y páginas web donde podéis aprender). Al aprender ensamblador, estaría bien que aprendierais como funciona un procesador por dentro, pero eso ya lo dejo a gusto de cada uno según las ganas que tengáis de maquinar.
Como esto del ensamblador da para otro post como mínimo, de momento lo dejo aquí y sigo con el tutorial.

Ya sé ensamblador. ¿Ahora qué?

Una vez que tengas nociones suficientes de ensamblador, toca pasar a la acción. Para poder ver el código ensamblador de un .exe, vamos a utilizar cualquier programa debugger que esté hecho para este fin. En mi caso, voy a utilizar x64dbg que es gratuito y podéis descargarlo en su página oficial. Os recomiendo que os descarguéis el mismo para seguir el tutorial porque cada debugger es un dolor de cabeza distinto.
¿Qué es lo que vamos a hacer en este programa? Como vamos a tener acceso a su código ensamblador, podemos modificar las partes que queramos para que el programa haga lo que nosotros queramos. En este caso, vamos a buscar la parte del login en el programa y modificaremos la parte donde evalúe la condición para superar el login.
Para ello, abrimos el .exe en el debugger:
1707126929388.png

Nos aparecerá una ventana del debugger con el código ensamblador, y otra ventana que, en este caso, es un cmd donde se ejecuta el programa. Podemos encontrar la parte del login de dos maneras:
1. Ejecutando el programa paso a paso (opción Step over) hasta que hayamos introducido el usuario y la contraseña. Una vez introducidos estos, el código pasará a ejecutar la evaluación de la condición para poder pasar el login.
2. En este programa tan sencillo, basta con buscar referencias a strings y encontrar la parte del código donde esté "Login SUCCESFUL".

En este post, os enseñaré a hacerlo de la segunda manera. Para buscar referencias a strings, hacemos click derecho en el código, opción Buscar en, Todos los módulos, Referencias a cadena:
1707127299254.png

Se nos abrirá una ventana en el programa con todas las referencias a cadena de éste. Lo normal es que nos encontremos una barbaridad, pero podemos filtrar la búsqueda. En este caso no es necesario porque a simple vista se puede encontrar fácil.
1707127518369.png

Ahí está lo que buscamos. Hacemos click derecho y le damos a la opción Mostrar en el desensamblador. Nos llevará a la parte del código donde se encuentra esta cadena.login-min.PNG
Vamos a comentar un poco este código. Vemos que hay un salto condicional (je programasecreto.401666; "jump if equal") que se cumple según lo que evalúe la instrucción anterior test. Si se da el salto, llegamos a la instrucción que printea "Login SUCCESFUL". Si no se da el salto, entonces se ejecuta el código de "Login UNSUCCESFUL. Intentelo de nuevo." Para que siempre se cumpla el login, podemos hacer que en vez de ser un salto condicional, sea un salto a secas, es decir, que ese salto siempre se cumpla (en vez de je sea un jmp). Hacemos click derecho en la instrucción de salto y le damos a la opción ensamblar. Nos aparecerá la instrucción que queremos editar.
1707128419520.png

En la imagen se ve como ya he cambiado la instrucción, y el propio programa me dice que está bien escrita, así que le damos a aceptar y ya podemos cerrar la ventana. Una vez editada la instrucción que queríamos, vamos a la barra de opciones del programa, seleccionamos Archivo, Parchear archivo, Aplicar el parche. Guardamos el nuevo .exe crackeado con el nombre que queramos... y listo. Ya podemos probar nuestro programa crackeado:
1707130504039.png

Podemos meter cualquier usuario y cualquier contraseña que siempre se va a hacer el login correctamente.
 

Adjuntos

  • 1707131520417.png
    1707131520417.png
    10,8 KB · Visitas: 228

ernestogar

Miembro muy activo
Brutal! sabrias decirme como crackear geomatic desing x y fusion 360? me haces padre ya que yo lo intente pero no consigo utilizar bien el debugger o no se puede crackear :cry:
 

pvtoari

Attempt to call a nil value
Noderador
Nodero
Noder
Después de haber estudiado ensamblador en la uni esto se hace bastante digerible, buen post
 
  • Like
Reacciones : byProphus

DBØY

>su 313
Burgués de Nodo
Noderador
Nodero
Noder
Post muy interesante, ya conocia el concepto del lenguaje ensamblador pero no tenia ni idea de que los cracks se hacian de esta forma.
Doy por hecho que en un programa algo mas "complejo" estilo Photoshop, no será tan facil que solo tengas que buscar una string.
 
  • Like
Reacciones : byProphus

jakea22

Miembro muy activo
Noder
Post muy interesante, ya conocia el concepto del lenguaje ensamblador pero no tenia ni idea de que los cracks se hacian de esta forma.
Doy por hecho que en un programa algo mas "complejo" estilo Photoshop, no será tan facil que solo tengas que buscar una string.
En juegos se ha llegado a ver por ejemplo que cuando llegas a ciertos niveles necesita conectarse a internet para usar parte del codigo que no esta en el programa como para abrir puertas pasar niveles etc..
Por lo que se puede complicar bastante como dices
 
  • Like
Reacciones : byProphus

byProphus

Miembro muy activo
Post muy interesante, ya conocia el concepto del lenguaje ensamblador pero no tenia ni idea de que los cracks se hacian de esta forma.
Doy por hecho que en un programa algo mas "complejo" estilo Photoshop, no será tan facil que solo tengas que buscar una string.
efectivamente, por eso lo he titulado mega básico, porque normalmente para programas estilo photoshop, flstudio, etc. se necesita un keygen
 
  • Like
Reacciones : DBØY