Уже не помню, в честь чего и как давно писал, где выкладывал. Даже сорсов не сохранились. В общем программка лежит здесь: http://www.stnc.ru/ftpdrmist/other/crackme0.exe Расчитана на нубов, подсказок нет. Задача - подобрать ключ для своего ника. Кто первым закейгенит получит +10.
ну здравствуй, отравитель во первых строках письма шлю тебе превед. у меня упорно не желает выделять память по адресу 0400000h, поэтому пришлось его малость переделать под себя должно подойти: dMNt AdMNtdMNtdMN0d0N4d8N01214161810B
Ну подобрать так подобрать. 0xc0de abcdea789012345678i0a2c4u6080_U0 В win xp память по этому адресу не выделяецц0.. Пришлось под виртуальной 2000 ломать. Ибо переделывать лень)
хоть вариантов строки подходящей под значение хеш-функции уйма, но делать нормальный перебор значений мне показалось все-таки не тривиально; плюс ко всему можно использовать только печатаемые символы. Code: #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 и по любому никнейму можно было бы сгенерировать ключ.