00489F3C |> 8B45 FC /MOV EAX,DWORD PTR SS:[EBP-4] 00489F3F |. 0FB67438 FF |MOVZX ESI,BYTE PTR DS:[EAX+EDI-1] ; берём по одной букве из нашего имени 00489F44 |. 8D55 F0 |LEA EDX,DWORD PTR SS:[EBP-10] 00489F47 |. 8BC6 |MOV EAX,ESI ; тут что-то каму-то передаём, посмотрите в отладчике :) 00489F49 |. E8 26FFFFFF |CALL disk.00489E74 ; что-то там вызываем :)) 00489F4E |. 8B55 F0 |MOV EDX,DWORD PTR SS:[EBP-10] 00489F51 |. 8D45 F4 |LEA EAX,DWORD PTR SS:[EBP-C] 00489F54 |. E8 03ADF7FF |CALL disk.00404C5C ; что-то там вызываем :)) 00489F59 |. 47 |INC EDI ; увеличиваем EDI на 1 00489F5A |. 4B |DEC EBX 00489F5B |.^75 DF JNZ SHORT disk.00489F3C ; looping (повторяем пока не закончатся знаки в нашем имени)
Вот это место где происходит вся генерация нашего серийника. Тут в частности надо знать что находится в EDI. А то, что находится в EDI я посмотрел в SoftICE. Там увидел вот что - CMW273333- Вот это и есть гвоздь программы :) Ну а дальше всё просто: прога берёт наше NAME, затем смотрит из скоки символов она состоит, добавляет длину имени к CMW273333, ну а дальше после ’-’ идёт HEX код нашего имени. Сложно? :)) ОК вот пример: Допустим мы ввели произвольное имя specz :)) HEX код этого имени (737065637A). specz 25 then //ограничиваем длину имени begin //ограничиваем длину имени Edit2.Text:=’Имя не больше 25 знаков’; //ограничиваем длину имени exit; end; scet:=33+len; // добавляем к 33 длину нашего имени Edit2.Text:=’CMW2733’+inttostr(scet)+’-’; // вывод всего безобразия в Edit2 for i:=1 to len do // тут начинается сама процедура begin t:=Ord(name[i]); // перевод имени в ASCII last:=InttoHex(t, 2); // перевод имени в HEX Edit2.Text:= Edit2.Text+(last); // вывод всего безобразия в Edit2 end; end;
Вот и вся любовь. Если кому впадлу использовать функцию copy&paste тогда вот !работающий! кейген :). За статью не отвечаю, ибо ещё сам являюсь в этом деле newbie поэтому могут быть ашипки :)).. Будут вопросы мыльте, всегда рад принять пару тысяч писем со спамом :)). Adioz...