Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Как взломать WinRoute Lite v3.0

Оформил: DeeCo
Автор: http://www.cracklab.narod.ru

Статья переведена, исправлена и дополнена by vallkor(vallkor@chat.ru)
Автор: da Cracker/CBE

Вступление: Многие сейчас спрашивают меня "Можешь ты научить меня как ломать программы?" Поэтому я решил написать этот туториал, в котором я научю вас как взломать WinRoute Lite v3.0... Надеюсь, что вам это понравится! Если у вас есть какие -нибудь комментарии, дополнения, .... пожалуйста напишите мне сюда: dc_cbe@hotmail.com

Содержание:

  1. Программы, необходимые для взлома этой программы
  2. Поиск места, которое необходимо запатчить
  3. Как патчить найденное место
  4. Изменение текста в программе
  5. Написание патча на С++
  6. Последние штрихи

1. Программы, необходимые для взлома WinRoute Lite Вот список необходимых для взлома WinRoute Lite:

WinDisassembler
WinRoute Lite ( что? правда? ;) )
QView

Не надейтесь кракнуть прогу без этих утилит (прим.переводчика: я бы и без них кракнул)!
Эти тулзы можно найти здеесь http://cracking.home.ml.org
Вы можете взять WinRoute Lite at http://www.winroute.com

2. Поиск места, которое необходимо запатчить Теперь мы будем искать место, которое необходимо запатчить

запускаем WinRoute 3.0
Что мы видим? WinRoute 3.0, 30 days evaluation... Эта версия триал на 30 дней.
ОК, давайте патчить этот кусок **** (прим.автора: здесь вырезана нецензурщина ;)
Выходим из WinRoute Litе
Теперь установим системные часы на месяц вперед...
Запускаем WinRoute Lite снова.
Trial Expired! Вы всё ещё хотите использовать эту программу... Ok,
поехали: давайте кракнем её. Запомним сообщение (Trial Period Expired).
Теперь выходим из WinRoute Lite
Идём в дирректорию WinRoute Lite (по умолчанию
c:\Program Files\WinRoute 3.0)
Копируем wrlite.exe в wrlite.bak (для восстановления на случай неудачи)
и в 1.exe (для использования в w32dasm... Зачем??? Потому что нельзя будет
модифицировать файл, который использует дизассемблер).
(прим. переводчика: на самом деле можно - поставить в настройках full accsess)
Сделали? хорошо, теперь запускаем w32dasm.
Выбираем Disassembler --> Open File to Disassemble
Заходим в дирректорию WinRoute Lite и выбираем 1.exe
дизассемблировалось быстро?
Это потому что программа маленькая... теперь выбираем меню
Search --> Find Text и ищем текст "trial period expired" (это было сообщение
об ошибке, помните?) Вот что мы имеем:

*Possible StringData Ref from Data Obj -> "#5Trial period has expired" <-- Sux

:0040B348 6898704200 push 00427098 <-- Сохраняет полезную информацию
:0040B34D E80E7D0000 call 00413060 <-- что-то вызывает
:0040B352 83C404 add esp, 00000004 <-- добавляем 4 к esp (прим. переводчика: вообще здесь правят стек)
Что же делать? давайте посмотрим на одну строку выше:
:0040B346 750D                    jne 040B355 <-- прыгаем, если триал не вышел
(прим.переводчика: Тут автор воспевает себе оды, что он нашел это место, поэтому я сам расскажу, что здесь нужно сделать):
Т.к. мы прыгаем если триал не закончился, то менять jne на je нельзя, т.к. тогда если триал действительно не вышел, то мы не прыгнем и программа не заработает. Поэтому нужно поменять jne на jmp! т.е. теперь мы будем прыгать в любом случае, независимо от того, окончился триал или нет!

Теперь перейдем к патчю!

3. Как патчить найденное место (прим. переводчика: здесь я тоже сам расскажу как и что):
открываем wrlite.exe в QView. Выбираем Search (F7)
и вводим в строке hex :
75 0D 68 98 70 42 00
он находит это место.
Теперь переходим в режим дизассемблера и меняем jne на jmp
т.е. 75 на EB
ВСЁ!
Теперь сохраним: ESC -> write
программа готова к использованию.

4. Изменение текста в программе (прим. переводчика: здесь автор предложил использовать тот же самый хекс- редактор для изменения текста в программе "WinRoute v3.0, 30 days evaluation" на просто "WinRoute v3.0", у меня есть идея получше):
Запускаем любой редактор ресурсов программы (Restorator, RS, ResExplorer) или даже из пакета делфи. Ищем в разделе Strings эту строку и заменям её на нашу.
Всё.

5. Написание патча на С++ Вот исходник патчера на С++:

--------------Вырезать здесь---------------
#include <stdio.h>

long filesize(FILE *stream)
{
   long curpos, length;
   curpos = ftell(stream);
   fseek(stream, 0L, SEEK_END);
   length = ftell(stream);
   fseek(stream, curpos, SEEK_SET);
   return length;
}

main() {

int   counter;
FILE *filename;
unsigned char readbyte;

long int offset[1] = {
        153268 }; // Offset address

unsigned char data[2] = {
        132, 133 }; // Data to be written


printf(" ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ\n"); // Displays the logo
printf("ЫЯ                                   ЯЫ\n");
printf("Ы          Hex Workshop v2.54         Ы\n");
printf("Ы          ENTER ANY SERIAL #         Ы\n");
printf("Ы              BY dC/CBE              Ы\n");
printf("Ы      E-mail: dc_cbe@hotmail.com     Ы\n");
printf("Ы      Website: http://cbe.ml.org     Ы\n");
printf("Ы         IRC: #cbe98 on Efnet        Ы\n");
printf("ЫЬ                                   ЬЫ\n");
printf(" ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ\n");
printf("\nю OPENING FILE: ");
if ((filename = fopen("HWORKS32.EXE", "r+")) == NULL) {
      printf("OK!\nю CHECKING SIZE : ");
 if (filesize(filename) == 678912) {
      printf("OK!\nю PATCHING FILE : ");
	   for (counter=1;counter<2;counter++) {
	      fseek(filename,offset[counter-1],SEEK_SET);
	      fscanf(filename,"%c",&readbyte);
	  if (readbyte == data[(counter*2)-2]) {
	  fseek(filename,offset[counter-1],SEEK_SET);
	  fprintf(filename,"%c",data[(counter*2)-1]);
	  } else
          {printf("ERROR!\nю FILE ALREADY PATCHED OR DIFFERENT!\n"); fclose(filename); return 1; }
	  }
       printf("OK!\nю PATCH SUCCESSFULL! Enjoy it!\n");
   } else printf("ERROR!\nю FILESIZE MISMATCH!!\n");
       fclose(filename);
} else printf("ERROR!\nю CAN'T OPEN FILE!!\n");
return 0;
}
--------------Вырезать здесь---------------
Теперь компилируйте программу и крак готов!

6. Последние штрихи Надеюсь вам понравилась данная статья!

-da Cracker/CBE
dc_cbe@hotmail.com
http://cbe.ml.org
#cbe98 on Efnet

Литературный перевод, а фактически переделал туториал:
vallkor (vallkor@chat.ru)

Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay