скрыть

скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Google  
 

Пишем КейГен для 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






Copyright © 2004-2016 "Delphi Sources". Delphi World FAQ




Группа ВКонтакте   Ссылка на Twitter   Группа на Facebook