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.exeestá 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 nameyserial) 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 breakpoint
- F9: run
- F8: 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