Reversando un KeyGen
[Wikipedia] Un keygen (del inglés key generator, generador de claves) es un programa informático que al ejecutarse genera un código (serial) para que un determinado programa de software de pago en su versión de prueba (Trial) pueda ofrecer los contenidos completos del programa ilegalmente y sin conocimiento del desarrollador.
-
Obten el TDC KeyGenME ejecutando lo siguiente desde un terminal
wget http://www.reversing.be/binaries/articles/20060115002634593.zip
-
Descomprime el zip y los zips que tiene dentro. El programa
keygenme.exe
está en el directorio TDC8. -
Usando Immunity Debugger, abre y ejecuta
keygenme.exe
Figura 1- Interfaz del KeyGen
-
Haz reverse engineering para determinar un par de inputs (para las cajas de texto
name
yserial
) que te dé un resultado correcto.
Preguntas guía (debes contestarlas como parte del informe)
-
Observa los nombres de los imports de este programa. ¿Cuál de ellos piensas que se invoca para leer los códigos que escribes en las cajas de texto? Explica tu contestación y cómo la corroboraste.
-
Una vez se han leido los códigos, en ¿que direcciones los guarda el programa?
-
¿En que dirección vive la función a la que se le pasan los códigos que se leyeron de los textboxes? Explica cómo te aseguraste.
-
¿Qué características debe tener el input que provees en la caja que originalmente dice "your name here please"? Por ejemplo, ¿puede ser un número? ¿en qué rango? ¿puede ser un string? ¿de cuántos caracteres?.
-
Para obtener el mensaje de éxito debes proveer un input en las dos cajas de texto. Según tu análisis, ¿el código correcto para la caja de serial depende de lo que hayas entrado en name? ¿O son independientes? Explica cómo lo sabes.
-
Escribe un programa en C que sería capaz de generar 100 pares de name y serial que funcionarían para este Key Generator.
Shortcuts útiles en Immunity Debugger
Ctrl+N
: View Names- Una vez en la ventana de los names. La tecla Enter muestra las referencias a la función seleccionada
F2
: toggle breakpointF9
: runF8
: step over- (Sobre la ventana de Memory Map)
Ctrl+B
: Search - (Sobre la pantalla de Hex Dump)
Ctrl+G
: Goto expression- Expression puede ser una dirección literal o expresión que incluya nombres de registros y operaciones aritméticas
Space
(sobre instrucción en ventana de dissassembly): cambiar instrucción;
(sobre instrucción en ventana de dissassembly): añadir comentario