- Sin embargo, para obtener un password Ascii común, habría que ir eliminando (restando) de siete en siete bits:
Código
.386 .model flat, stdcall option casemap: none include windows.inc include kernel32.inc includelib kernel32.lib .data? password db 5 dup(?) .code keymaker: mov eax, 0F6C53333h ; Constante a reversear lea edi, password + 4 inicio: movzx ebx, al shl bl, 1 ; Descarta el primer bit shr bl, 1 ; para trabajar en ASCII de 7 bits mov [edi], bl ; Guardando el serial dec edi ; generado sub eax, ebx rol eax, 0Dh cmp eax, 0 jne inicio invoke ExitProcess, 0 end keymaker
-- Devuelve: RzLX3 que es el Ascii normal más corto, y PxÌØ3 es todavía más corto (menor) pero no es Ascii normal.
- Con respecto al Keygen, y teniendo en cuenta que al final lo que hay que hacer convertir la constante 0F6C53333 a 00000000 utilizando el algoritmo inverso: restar los últimos 8 o siete bits y luego hacer el ROL 13, repetir hasta obtener 00000000 y guardar los bits restados que serán los bytes del password (ordenados al revés). Supongo que se puede restar menos bits, ya no ocho o siete, sino seis o menos, esto haría un password con más bytes debido a que serán más vueltas al algoritmo.
-- Lo que me gustaría es que el KeyGen pida una semilla (Nombre de usuario o algo así), luego aplicar el algoritmo no-inverso (el original) a la semilla para ver que valor devuelve (valor de EDI), luego aplicar el algoritmo inverso hasta obtener 00000000 sobre la semilla trabajada (valor de EDI que había quedado), de esta manera obtener seriales válidos como: EdePC - XXXXXX