Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 12 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

КейГен для Internet Maniac 1.2x

Обсудить статью на форуме

Очень удобно, когда все крэкерские инструменты, книги и статьи в одном месте. Используйте сборник от EXELAB - вот тут.

Автор: FEUERRADER <feuerrader@nm.ru>

КейГен для Internet Maniac 1.2

Программа: Internet Maniac 1.2a Размер: 114688 байт Язык: C++ Защита: Имя/Код Цель: Создание ключегена Инструменты: SoftIce, WinDasm32, любой удобный компилятор (здесь Delphi)

Предисловие: Internet Maniac служит для разных там фич с интернетом: пинг, traceroute, whois и др. Итак, ограничений у программы нет, exeшник ничем не защищен. Что еще нужно? Можно ломать 2 способами: 1) изменить условный переход 2) проанализировать код и создать кейген.

1 способ. Я не буду объяснять этот способ подробно, т.к. здесь даже самый начинающий кракер сообразит что надо делать. Ищем строки в WinDasm32 о неверном рег. номере: "Incorrect Registration code!", где перед ними видим:

016F:004051B7  CALL     00407FD0      //процедура проверки РН
 016F:004051BC  ADD      ESP,BYTE +08
 016F:004051BF  TEST     EAX,EAX
 016F:004051C1  JZ       0040520D

Тут все понятно 4051C1: 74 75. Дальше найдем

016F:00404BBB 51                      push ecx
 016F:00404BBC E80F340000              call 00407FD0        //процедура проверки РН
 016F:00404BC1 83C408                  add esp, 00000008
 016F:00404BC4 85C0                    test eax, eax
 016F:00404BC6 0F859B030000            jne 00404F67
 016F:00404BCC 68A0004300              push 004300A0
 016F:00404BD1 50                      push eax

заменим 404BC7: 85 84 и все. Правильный РН будет неправильным и наоборот. Но это все слишком просто. Хочу сам создавать рег. номера!

2 способ. Запускаем SoftIce. Ставим bpx 4051B7 т.к. этот адрес используется в обоих случаях (см. выше). Вводим в поле имени: 12345, код: 1111111111111. Жмем OK. Прерываемся. Нажимаем F8. Попали в процедуру генерации верного РН для нашего имени 12345. Вот эта процедурка с моими комментариями:

016F:00407FD0  SUB      ESP,BYTE +20        // В ESI адрес
 016F:00407FD3  PUSH     ESI                 // введенного нами
 016F:00407FD4  MOV      ESI,[ESP+28]        // имени 12345
 016F:00407FD8  PUSH     ESI                 // сохраняем ESI
 016F:00407FD9  CALL     `KERNEL32!lstrlenA` // Получаем длину строки имени
 016F:00407FDF  CMP      EAX,BYTE +04        // Сверяем ее с 4
 016F:00407FE2  JNL      00407FEB            // Если больше прыгаем и продолжаем
 016F:00407FE4  XOR      EAX,EAX             // Если меньше, возвращаемся из этой
 016F:00407FE6  POP      ESI                 // процедуры и показываем, что
 016F:00407FE7  ADD      ESP,BYTE +20        // наш РН - неверный
 016F:00407FEA  RET
 016F:00407FEB  MOVSX    EAX,BYTE [ESI+01]   // EAX=2 символу имени="2"=32h
 016F:00407FEF  MOVSX    ECX,BYTE [ESI+02]   // ECX=3 символу имени="3"=33h
 016F:00407FF3  SHL      EAX,1               // EAX=EAX*2
 016F:00407FF5  PUSH     EAX                 // Сохраняем EAX
 016F:00407FF6  MOVSX    EAX,BYTE [ESI+03]   // EAX=4 символу имени="4"=34h
 016F:00407FFA  SHL      ECX,02              // ECX=ECX*4
 016F:00407FFD  PUSH     ECX                 // Сохраняем ECX
 016F:00407FFE  MOV      ECX,0A              // ECX=0Ah
 016F:00408003  CDQ                          // значение EAX=34h делится на два байта
 016F:00408004  IDIV     ECX                 // и помещается в EAX=3h и EDX=4h
 016F:00408006  MOV      EAX,FA34C6A0        // EAX=FA34C6A0h
 016F:0040800B  MOV      ECX,EDX             // ECX=EDX
 016F:0040800D  SHL      EAX,CL              // EAX=EAX*2^ECX
 016F:0040800F  LEA      ECX,[ESP+0C]        // Дальше идут неинтересные строки
 016F:00408013  PUSH     EAX
 016F:00408014  PUSH     DWORD 00413B38
 016F:00408019  PUSH     ECX
 016F:0040801A  CALL     `USER32!wsprintfA`  // Собираем из кусочков РН
 016F:00408020  MOV      EDX,[ESP+40]
 016F:00408024  ADD      ESP,BYTE +14
 016F:00408027  LEA      EAX,[ESP+04]
 016F:0040802B  PUSH     EDX
 016F:0040802C  PUSH     EAX                 // EAX=адресу, где хранится верный РН!
 

Фишка в том, что остановившись по адресу 40802C ввести d eax, высветится верный РН! Итак, что мы знаем. Для создания РН используются 2,3,4 символы имени. Код 2 символа умножается на 2, код 3 символа на 4, а код 4 символа делится на два значения и последняя часть является показателем степени двух, умноженной на статическое FA34C6A0h=4197762720. Вот так все "сложно"!

Создание КейГена: вот мой РАБОТАЮЩИЙ набросок создания кейгена к Internet Maniac 1.2a, созданный в Дельфи. Где name:TEdit - строка имени, code:TEdit - собственно код.

procedure TForm1.nameChange(Sender: TObject);
 const stg:cardinal=$FA34C6A0;
 var
 by1,by2,par:string;
 ch,ch3 :string;
 p,p2,p3,x,l:integer;
 
 begin
 
 if length(name.Text)>3 then
 begin
 ch:=pchar(name.Text);
 
 p:=ord(ch[2]);
 by1:=inttostr(p);
 
 p2:=ord(ch[3]);
 by2:=inttostr(p2);
 
 p3:=ord(ch[4]);
 ch3:=inttostr(p3);
 
 l:=length(ch3);
 x:=strtoint(ch3[l]);
 
 par:=inttostr(stg shl x);
 
 if length(par)<10 then begin
 repeat
 par:='0'+par;
 until length(par)=10;
 end;
 
 code.Text:=par+'-'+inttostr(p2 shl 2) + inttostr(p shl 1);
 end else
 code.Text:='Имя введено неверно';
 
 end;

Заключение: Это достаточно простой пример генерации РН для программы. Создатели почему-то не побеспокоились о защите своего продукта.


Примечание: Расшифрую несколько слов:

       РН = Регистрационный номер
 FA34C6A0h = Число в шестнадцатиричной системе счисления
 



Все права защищены ©  2003 
...::FEUERRADER::...




Обсуждение статьи: КейГен для Internet Maniac 1.2x >>>


Материалы находятся на сайте https://exelab.ru



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS