скрыть

скрыть

  Форум  

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

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



Google  
 

Регистрация WinRAR 3.0 - бесплатно



Автор: Bad_guy
WEB сайт: http://cracklab.narod.ru

Для тех, кто пришёл просто за крэком к WinRAR 3.0:
WinRAR 3.0 Full Rus с крэком - http://cracklab.narod.ru/dload/wrar300full.zip
Сам крэк для WinRAR 3.0 Full Rus - http://cracklab.narod.ru/dload/wrar3fp.zip

Наконец-то мои руки добежали по кнопкам до написания этой статьи, но идея кипела в моей голове уже долгое время, не давая мне есть, спать, ходить, сидеть, ну и так далее... неужели я успокоюсь после написания статьи, наверное НЕТ (идеи распирают голову вот-вот она лопнит, придёться экран вытирать... э-э-э, чего-то меня понесло, пора переходить к делу).

Одним прекрасным днём родилась идея обновить любимый архиватор ВинРАР, я зашёл на сайт rarsoft или rarlab (не помню как он тогда назывался) и, о чудо, увидел, что мне сейчас доступен WinRAR 3.00 beta 4, да ещё и русская версия, я получил вожделенные ~980Kb и, установив, заметил небезизвестное (через букву "ы") окошечко с 40 дневным предложением поюзать UNREGISTERED VERSION. Я не помню такого дня, чтоб я не воспользовался Winrar'ом хотя бы один раз и, естественно, наг окно через пару дней мне надоело и решил "Иванушка-дурачок" снять его НАВСЕГДА (ФОРЭВА - для тех, кто в танке).

Скажу сразу, что для осуществления взлома мне потребовался только отладчик SoftIce, но позже понадобился и шестнадцатиричный редактор (WinHEX) и Delphi, а ещё текстовый редактор Bred, чтобы писать эту статью.

Допустим, вы запустили WinRAR 3.0, увидели всё то же окошко и задумались какой же ставить брэйкпойнт? Я тоже когда-то над этим задумался и что-то придумал, что - сейчас уже выветрилось из головы... попробую вспомнить (засечём время). Прошло 10 минут... напрочь забыл - начал врубаться по-новой. Говоришь, 40 дней - ставим брэйк в SoftIce:


:bpx GetLocalTime

Говоришь - "незарегистрированная версия" в заголовке окна - получай


:bpx SetWindowTextA

Теперь, как сделает программист: Сначала поставит "незарегистрированная версия" в заголовке окна, а потом узнает время - вряд ли, что подтверждается на практике. Попробуем, насколько "солёненький" WinRAR нам попался - запускаем его.


004367B3 - здесь у нас GetLocalTime;
0043FA27 - а здесь SetWindowTextA;

Скорее всего между этими двумя адресами и будет вычисление "зарегистрированности" версии. Сразу после 004367B3 идёт вызов какой-то процедуры, которая возвращает результат в AL в виде 0 или 1, а затем значение AL закидывается в некоторый адрес памяти. Поглядев внимательно внутрь этой процедуры, я заметил, что она начинает проверять файл RARReg.Key (я не сказал: у меня был легальный ключик для 2.9 версии, я его положил первым делом в папку с новым WinRAR 3.0), пока я смотрел процедуру я успел понять, что в принципе она должна как-то возвратить значение AL не 0, а 1, но я пошёл дальше. AL закидывается в некоторый адрес памяти - я заменил значение AL перед этим и "отпустил" программу на выполнение, программа загрузилась как "незарегистрированная", но когда она прервалась по SetWindowTextA при создании НАГ-окна я посмотрел в тот адрес памяти, где должна была быть 1 и увидел там 0 и тут я решил поставить брэйкпойнт на память и посмотреть, что программа всё-таки делает с этой переменной ?


:bpm 48dd1c rw

За всё количество прерываний по этому брэйку, два раза пришлось сменить значение по этому адресу (48dd1c) с 0 на 1 (команда :eb - для тех, кто не знает) и увидел на экране зарегистрированную версию WinRAR 3.0 beta 4 Rus. Посмотрим, где же в память записывается 0, в какой процедуре ? - а в той же, что и в первом случае, значит просто находим место в ней где сделаем, чтобы в AL ВСЕГДА возвращалось значение 1 и будем писать крэк для WinRAR 3.0 beta 4 Rus.

Как оказалось технология та же и для WinRAR 3.0 Full, но я думаю, что с легкостью по этому же принципу можно будет создать кряк и для WinRAR 3.1, 3.2 и может 3.3, ну а потом уж автор WinRAR (мультимиллионер супершароварщик Евгений Рошал или его наёмники) найдут в инете эту статейку и закроет лазейку, а мы постараемся найти другую !

Что-то у меня получилось не внятно как-то, ладно в таком случае дам я вам ещё исходники патчера для WinRAR 3.00 Full (между прочим для минимизации размера написал я его на Delphi без использования VCL, то есть на WinAPI):

PATCHER.DPR


program Patch;

uses windows, messages, shellapi;

const
  ar: array[1..6] of byte = ($E8, $BD, $07, $00, $00, $58);
  ar2: array[1..6] of byte = ($B8, $01, $00, $00, $00, $90);
var
  msg: tmsg;
  win: hwnd;
  bol: boolean;
  i, b: byte;
  f: file of byte;

{$R API.RES}

procedure CreateReg;
var
  f1: textfile;
  str: lptstr;
begin
  Assignfile(f1, 'RarReg.b_g');
  rewrite(f1);
  Writeln(f1, 'RAR registration data');
  Writeln(f1, 'Bad_guy');
  Writeln(f1, 'Advanced GOD Pro version');
  Writeln(f1, 'UID=fd402b81950501fbd1a1');
  Writeln(f1, '6412212250d1a118e384ae1996cdea4f90d100b3dcd53ea5fa77c2');
  Writeln(f1, 'a2a9458b4636334c81d46035c6ab9048e2c5c62f0238f183d28519');
  Writeln(f1, 'aa87488bf38f5b634cf28190bdf438ac593b1857cdb55a7fcb0eb0');
  Writeln(f1, 'c3e4c2736090b3dfa45384e18e9de05c5860c0cbfb4a4cbbe9549e');
  Writeln(f1, 'b4ca3bc23f80d0cde2d91ba211839f05b0a5de11631072687e814d');
  Writeln(f1, 'd0fa0ace9439b90564d3ba7de5413d0824487a50f64e6ea360c858');
  Writeln(f1, 'ee31cdacb655824a7a443ec0da598dfb6e79f305d8bf4260523534');
  closefile(f1);
end;

function SettingsDlgProc(Window: hWnd; Msg, WParam, LParam: Integer): Integer;
  stdcall;
var
  S: string;
begin
  Result := 0;
  case Msg of
    wm_InitDialog:
      begin
        Result := 0;
      end;
    wm_Command:
      begin
        case LoWord(WParam) of
          50:
            begin
              AssignFile(f, 'winrar.exe');
{$I-}
              Reset(f);
{$I+}
              if IoResult <> 0 then
                Messagebox(Win, 'An error ocured while opening file', 'Error',
                  MB_OK)
              else
              begin
                if Filesize(f) = 752640 then
                begin
                  Seek(f, $B26A);
                  bol := true;
                  for i := 1 to 6 do
                  begin
                    Read(f, b);
                    if b <> ar[i] then
                      bol := false;
                  end;
                  if bol then
                  begin
                    Seek(f, $B26A);
                    for i := 1 to 6 do
                      Write(f, ar2[i]);
                    Closefile(f);
                    CreateReg;
                    Messagebox(win, 'Patched succesfully', 'Congratulation',
                      MB_OK);
                  end
                  else
                    Messagebox(win, 'An error ocured while patching', 'Error',
                      MB_OK);
                end
                else
                  Messagebox(win, 'Wrong file size', 'Error', MB_OK);
              end;
            end;
          DestroyWindow(Win);
          Messagebox(Win, PChar('Автор крэка: Bad_guy Выпущен:' +
            '25.07.02 Ограничения: вы не сможете использовать "электронную' +
            'подпись" Адрес программы:' +
            'http://cracklab.narod.ru/dload/wrar300full.zip'), 'About', MB_OK);
          ShellExecute(win, 'open', PChar('http://cracklab.narod.ru/'), nil,
            nil, SW_MAXIMIZE);
        end;
      end;
    wm_Close: DestroyWindow(Win);
    wm_Destroy: PostQuitMessage(0);
  else
    Result := 0;
  end;
end;

procedure RunSettings;
var
  Result: Integer;
begin
  Win := CreateDialog(hInstance, PCHar(101), 0, @SettingsDlgProc);
  Showwindow(Win, SW_SHOW);
  Updatewindow(Win);
end;

begin
  RunSettings;
  while GetMessage(Msg, 0, 0, 0) do
  begin
    TranslateMessage(Msg);
    DispatchMessage(Msg);
  end;
end.

API.RC


101 DIALOG 0, 0, 266, 95
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUPWINDOW |
WS_DLGFRAME
CAPTION "WinRAR 3.00 Rus Patch by Bad_guy"
FONT 8, "MS Sans Serif"
{
DEFPUSHBUTTON "Patch", 50, 13, 73, 59, 14
PUSHBUTTON "Cancel", 51, 188, 73, 65, 14
CTEXT "[-== Bad_guy ==-] \n Remove 40-day limit and NAG-screen \n i'm a genius,
you are a shit", 100, 13, 42, 240, 27, SS_SUNKEN
CONTROL 101, -1, "STATIC", SS_BITMAP | SS_CENTERIMAGE | SS_REALSIZEIMAGE |
SS_SUNKEN, 13, 8, 240, 30
PUSHBUTTON "About", 53, 75, 73, 50, 14
PUSHBUTTON "Our Website", 54, 130, 73, 54, 14
}

Удачи вам в вашей деятельности, чем бы вы ни занимались, Bad_guy.






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




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