No, no tiene nada que ver con DLL. Es matematica o matematica booleana/logica pura.
Suponte esta pseudo rutina de generacion:
(usuario 4 letras)
(serial 4 letras)
usuario xor llave = serial.
de ahi se puede deducir:
serial xor usuario = llave
serial xor llave = usuario
la rutina de comprobacion NUNCA DEBE SER
serial valido = usuario xor llave
comparar (serial valido, serial introducido)
Porque no? porque le estas dando la respuesta al cracker.
Lo que si puede hacerse, es:
llave prueba = serial xor usuario
comprar(llave prueba, llave maestre)
obviamente XOR es solamente simbolico, la rutinas de generacion/validacion suelen ser mas complicadas, mas rebuscadas, etc... Pero el principio basico es el mismo.
NUNCA, NUNCA colocar la rutina de generacion dentro del programa. Si obviamente de comprobacion.
y la regla basica del reverser/cracker: La rutina de generacion es la inversa de la rutina de comprobacion.
En estos casos, toca pensar un poquito. Si el programa tuviera la rutina de generacion, es ya asunto resuelto.
Espero haberte aclarado la duda y no haberte confundido mas.
Flamer:En mi crackme, existe solamente un serial valido para cada usuario. Si le cambias 1 letra al usuario, minimo 8 bytes del serial van a cambiar.
TinkiCreo que el valor devuelto es en octal por %X pero no se que pinta el 08.
fijate documentacion sobre alguna de estas funciones: sscanf/wsprintf/sprintf/printf etc...
%X o %iX indica un numero hexadecimal.
8 indica la cantidad de caracteres a devolver
0 antepuesto al 8, indica que si faltan caracteres, en vez de poner espacios, coloca 0 al principio.
es decir 1234 se convierte en '00001234'