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