
18.08.2007, 20:31
|
|
Banned
Регистрация: 20.06.2005
Сообщений: 880
С нами:
10994966
Репутация:
1332
|
|
хоть вариантов строки подходящей под значение хеш-функции уйма, но делать нормальный перебор значений мне показалось все-таки не тривиально; плюс ко всему можно использовать только печатаемые символы.
Код:
#include <stdio.h>
#include <string.h>
//
//super xek keygen by ZaCo for drmist crackme :)
//
int main(int argc, char* argv[])
{
char nickname[]="ZaCo";
char charset[]="ABCDEFGHIJKLMNOP";
int cs_len=strlen(charset);
char key[0x20];
char BL=0,DL=0,BH,DH;
//
int i=0, len=strlen(nickname);
for(;;)
{
BL+=nickname[i++];
if(i>len) break;
DL+=nickname[i++];
if(i>len) break;
}
BL--;
memset(key,charset[0],0x20);
//ïîäñòðàèâàåì key ïîä BL
DH=charset[0]*0x10;
unsigned char temp=BL-DH;
i=1;
while(temp>cs_len-1)
{
temp-=cs_len-1;
key[i]=charset[cs_len-1];
i+=2;
}
key[i]=charset[temp];
DH=BL;
//ïîëó÷àåì íóæíûé BH
BH=((0xB1-DH)^DL)-BL;
//ïîäñòðàèâàåì key ïîä BH
temp=BH-charset[0]*0x10;
i=0;
while(temp>cs_len-1)
{
temp-=cs_len-1;
key[i]=charset[cs_len-1];
i+=2;
}
key[i]=charset[temp];
//
printf("%20s",key);
return 0;
}
//---------------------------------------------------------------------------
идея в том, что используется !отрезок! печатаемых байт размером не меньше 16, для того чтобы можно было их суммой заполнить промежуток 0..255 и по любому никнейму можно было бы сгенерировать ключ.
|
|
|