Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Пишем КейГен для IDentify - Version 1.1

Оформил: DeeCo
Автор: http://www.cracklab.narod.ru

Адрес: http://www.imptec.com

Вступление:
Я так и не разобрался чего делает эта прога, понял только, что стоит она $15 а это 2 моих месячных стипендии. Я решил н ждать 2 месяца, а получить прогу уже сейчас :)

Поехали:

Ставим Брекпоинт:
bpx GetWindowTextA
нажимаем 1 раз F5 а затем 4 раза F12 чтобы выйти из вложенных функций, мы окажемся здесь:
015F:004021E0  E865110200          CALL      0042334A
015F:004021E5  83EC04              SUB       ESP,04
015F:004021E8  8B45F0              MOV       EAX,[EBP-10]
015F:004021EB  83C060              ADD       EAX,60
015F:004021EE  8965E8              MOV       [EBP-18],ESP
015F:004021F1  50                  PUSH      EAX
015F:004021F2  8B4DE8              MOV       ECX,[EBP-18]
015F:004021F5  E88B200200          CALL      00424285
015F:004021FA  C745FC00000000      MOV       DWORD PTR [EBP-04],00000000
015F:00402201  C745FCFFFFFFFF      MOV       DWORD PTR [EBP-04],FFFFFFFF
015F:00402208  8D4DE4              LEA       ECX,[EBP-1C]
015F:0040220B  51                  PUSH      ECX
015F:0040220C  8B4DF0              MOV       ECX,[EBP-10]
015F:0040220F  E89C000000          CALL      004022B0		<--генерация правильного СН по имени
Зайдём в последнюю функцию(F8):
015F:004022C1  64892500000000      MOV       FS:[00000000],ESP
015F:004022C8  83EC48              SUB       ESP,48
015F:004022CB  C745FC01000000      MOV       DWORD PTR [EBP-04],00000001
015F:004022D2  56                  PUSH      ESI
015F:004022D3  8D4DF0              LEA       ECX,[EBP-10]
015F:004022D6  33F6                XOR       ESI,ESI
015F:004022D8  8975EC              MOV       [EBP-14],ESI
015F:004022DB  E8951F0200          CALL      00424275
015F:004022E0  8B450C              MOV       EAX,[EBP+0C]
015F:004022E3  33D2                XOR       EDX,EDX		<--обнулили счётчик цикла
015F:004022E5  C645FC02            MOV       BYTE PTR [EBP-04],02
015F:004022E9  8B48F8              MOV       ECX,[EAX-08]	<--Длинна имени
015F:004022EC  3BD1                CMP       EDX,ECX		<--конец цикла?
015F:004022EE  730D                JAE       004022FD		<--прыгаем
015F:004022F0  8B450C              MOV       EAX,[EBP+0C]
015F:004022F3  42                  INC       EDX
015F:004022F4  0FBE4410FF          MOVSX     EAX,BYTE PTR [EDX+EAX-01]	<--по очереди в цикле загружаем в EAX каждый символ имени и...
015F:004022F9  03F0                ADD       ESI,EAX			<--суммируем все символы в ESI
015F:004022FB  EBEF                JMP       004022EC			<--повтор цикла
Т.Е. после выполнения вышеописанного кода у нас в ESI сумма всех символов имени, а в ECX Длинна имени. Смотрим дальше:
015F:004022FD  83C105              ADD       ECX,05
015F:00402300  83C605              ADD       ESI,05
015F:00402303  0FAFCE              IMUL      ECX,ESI
015F:00402306  8D1489              LEA       EDX,[ECX*4+ECX]
015F:00402309  8BC1                MOV       EAX,ECX
015F:0040230B  6A0A                PUSH      0A
015F:0040230D  8D0C90              LEA       ECX,[EDX*4+EAX]	<-- ECX=EDX*4+EAX
015F:00402310  8D34C8              LEA       ESI,[ECX*8+EAX]	<-- ESI=ECX*8+EAX
015F:00402313  8D1470              LEA       EDX,[ESI*2+EAX]	<-- EDX=ESI*2+EAX
Тут идут математические действия очень простые. Аналогично такому выражению: EDX=(( ((сумма_всех_символов+5)*(длинна_имени+5)*5) *4+(сумма_всех_символов+5)*(длинна_имени+5))*8+(сумма_всех_символов+5)*(длинна_имени+5))*2+(сумма_всех_символов+5)*(длинна_имени+5)
Затем мы видим:
015F:00402319  50                  PUSH      EAX
015F:0040231A  52                  PUSH      EDX	<--сохранили EDX
015F:0040231B  E8207C0100          CALL      00419F40	<--функция перевода EDX из 16-ричной в 10-чную систему и запись результата в виде текстовой строки.
015F:00402320  83C40C              ADD       ESP,0C                         
015F:00402323  8D4DF0              LEA       ECX,[EBP-10]                   
015F:00402326  68F8924300          PUSH      004392F8                       
015F:0040232B  E8ED210200          CALL      0042451D	<--Вначале СН дописываем два символа "2D"
И получившаяся строка и есть правильный СН. УрА!

Я написал на C++ кейген, вот он:
#include <iostream.h>
#include <conio.h>

void main()
{
	char	*name;
   long	serial,sum=0;
   int	i;
   cout<<"IDentify! - Version 1.1 KeyGen"<<"\n";
   cout<<"CrAcKeD bY VaLLk0r [PTDS]"<<"\n";
   cout<<"http://vallkor.chat.ru"<<"\n";
   cout<<"Enter your name:";
   cin>>name;
   for (i=0;name[i]!=0;i++)
   {
   	sum+=name[i];
   }
   serial=((((sum+5)*(i+5)*5) *4+(sum+5)*(i+5))*8+(sum+5)*(i+5))*2+(sum+5)*(i+5);
   cout<<"\n"<<"Serial: 2D"<<serial;
   getch();
}
Для моего имени (vallkor) СН оказался: 2D3124224
Вводим эти данные и мы зарегестрированные пользователи.
ВсЁ!

Исследовал и наваял туториал:
vallkor //PTDS
E-mail: vallkor@chat.ru (vallkor@etel.dn.ua)
Page: http://vallkor.chat.ru

Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay