В этой статье я расскажу разработчикам всем известной программы
WinRAR как их программа легко поддаётся взлому. Данная информация будет предоставлена исключительно для ознакомления! 

На днях, посетив сайт CrackL@b, я решился заняться взломом программ. Пока что в этом деле я конкретный новичок => и эта статья написана на языке, понятном не только крякерам, но и простым смертным:)

Что ж, приступим. Для работы, вам потребуются программы:

  • SoftICE (как же без него то :))
  • W32dasm (для того, чтобы узнать Offset адрес)
  • WinHEX (или любой шестнадцатеричный редактор)
  • Delphi (это если вы будете писать само лекарство)

Альтернативный выход или логика где-то рядом

Прочитав несколько статей о том, как можно взломать WinRAR, я решил попытаться найти свой собственный способ. И вот к чему пришёл: WinRAR по истечению 40 дневного пробного периода включает НАГ
(окошко в котором он просит денег:) = > что бы выключить это окошко нужно либо заплатить
(без комментариев), либо зарегистрировать его вручную
(взломать). Конечно, я пошёл по второму пути, но тут в силу своих знаний я столкнулся с массой проблем. Крякнуть у меня его не получалось и тут меня осенило: нужно искать не как зарегистрировать WinRAR, а как убрать
окошко (НАГ). 

Таймер это классная штука 🙂 Запускаем ВинРАР. Что видим? Появляется НАГ, но не сразу, а через некоторое время. И что это значит?... Как это «не знаю»? Это значит, что заводиться таймер, по которому выполняется процедура, показывающая НАГ.
Чтобы НАГа не было нужно просто убить этот таймер. Но чтобы его убить нужно знать его адрес, а потом просто занопить
(на место команды CALL SetTimer записать необходимое
(5 в нашем случае) кол-во байт 90h, 90h это команда nop, она не делает ничего).

Ставим в SoftICE брекпоинт на функцию SetTimer. Сделать это можно так:

bpx SetTimer

Теперь запускаем RAR. У Вас должен был выскочить
любимый SoftICE. Если выскочил, жмите F5 пока не окажитесь в WinRAR. Ну как? Вы уже в
нем? Отлично, значит всё идёт как нужно :). Как только вы прервётесь, в
RAR указатель выполняемой строчки будет тут:

0043FAA0 MOV EAX,004AF1C4

А выше то, что нам нужно…

0043FA93 E8C0E90400 CALL [User32!SetTimer]

Теперь убираем бряк  (bc 0) и закрываем SoftICe.
Оторвёмся немного от взлома и подумаем, что нужно сделать дальше.
Значит так: у нас есть код команды CALL SetTimer, а это значит, что осталось узнать Offset код
(для правки в WinHEX’e) и занопить байты 

E8 C0 E9 04 00

на

90 90 90 90 90 

Открываем W32dasm, а в нём открываем WinRAR.exe. Далее жмём F12 и вводим 0043FA93.
Жмём ОК. Теперь мы оказались на той же самой строчке, что и в SoftICE, но уже не в запущенном файле, а в
дизассемблированном. Смотрим в строку состояния и
запоминаем Offset адрес этой строчки (0003F09Bh). Теперь у нас есть Offset адрес команды вызова таймера и байты, которые нужно подправить.
Открываем WinRAR.exe в WinHEX’e, ищем адрес 0003F090 в колонке слева. Нашли? Теперь букву B сверху. Как вы уже наверное успели заметить байты от
0003F09B до 0003F09F соответствуют байтам  E8 C0 E9 04 00.
А это значит, что их все нужно поменять на 90. Меняем. Заменили? Вот и хорошо, теперь сохраняем файл WinRAR.exe и запускаем.
Ну как? Есть надоедливое окошко? Нету? Значит вы всё сделали правильно и WinRAR уже не просит денег при каждом запуске, а это значит, что мы добились чего хотели. 

Скажу вам по секрету, что это первая программа, которую я взломал без помощи статей по взлому. 

Патч на Дельфи для WinRAR.

Вот исходник патча на дельфи. Он не обременен проверкой те ли это байты, но проверяет существование файла в папке с собой. 

program Crack; 

{$APPTYPE CONSOLE}
uses
Classes,
Windows,
SysUtils;
var
f:TFileStream;
s:byte;
begin
Writeln('Crack for WinRAR 3.xx by Angel');
Write('Press Enter to contine...');
Readln;
if not(FileExists('WinRAR.exe')) then
begin
Write('File not Found!!!');
ReadLn;
Halt;
end
else
begin
s:=$90;
f:=TFileStream.Create('WinRAR.exe',fmOpenWrite);
f.Seek($3F09B,soFromBeginning);
f.Write(s,sizeof(s));
f.Seek($3F09C,soFromBeginning);
f.Write(s,sizeof(s));
f.Seek($3F09D,soFromBeginning);
f.Write(s,sizeof(s));
f.Seek($3F09E,soFromBeginning);
f.Write(s,sizeof(s));
f.Seek($3F09F,soFromBeginning);
f.Write(s,sizeof(s));
f.Free;
end;
Write('File "WinRAR.exe" Cracked!!!');
ReadLn;
end.

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии