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

Вчера в США хакер российского происхождения был осужден на 99 лет за взлом всех национальных компьютерных сетей. Сегодня пришло сообщение, что по данным Центрального компьютера исполнения наказаний, он отбыл весь срок и выходит на свободу.

Target: FineReader Pro 5.0

Tools:

  • Some brains
  • Win32Dasm 8.93
  • Любой hex-редактор (я использую QView)

Пролог

Вступление:

Как-то ко мне прибегает друг истошно ругаясь и проклиная крякеров за их кривые руки. Я попросил его подробно разъяснить мне, что случилось. А вот что: Пользовался он взломанной версией FineReader Pro 5.0 с пират- ского диска "Новый реаниматор : Куча левого софта" и вдруг он прекратил работу, такое уже бывало после переустановки Windows все заработало опять. На его гневную отповедь я ему говорю: "Купил бы у Аббая и все бы работало нормально". А он мне: "Какой купил, откуды баблосы? Сделай, млин, не охо- та Windows переустанавливать, а после завтра реферат сдавать.". Ладно грю, посмотрю, но ничего не гарантирую. Дал он мне диск с этим ридером, посмот- рел... А патч то занимает почти 2 метра это архив, там три файла для него. Не будем на него опираться сделаем свой, поскольку у нас не кривые руки, и растут они у нас из нужного места. Я считаю, что Красота в минимуме, если вы считаете, что это не так, то дальше можете не читать

Что за прога:

Очень хороший (лучший) распозновальщик текста после сканирования при этом русский интерфейс и все что нужно. Размер в архиве 24 Метра.

Примечание:

Хотел бы я увидеть в чьей же команде этот саморощеный крякер, но не увидивлся когда не увидел ни имени, ни группы. Да, я бы тоже такого стыдился.

Начало

Хочу сразу сказать, что тьютор будет очень коротким, потому что взлом ЭЛЕМЕНТАРНЫЙ, чего там наизменял ломавший до меня этот продукт крякер не хочется даже смотреть.

Приступим.

Не будем откладывать в долгий ящик дизассемблируем основной файл про- граммы FineReader.exe (1,511,424 байт, если у вас размер не такой, то и смещения внутри файла будут отличаться). Я использую Win32Dasm он быстрее, чем IDA, при таком размере файла IDA будет долго торможить.

Взлом

Теперь поищем в разделе строк что-нибудь напоминающее нам о регистра- ции, первое на что натолкнулся мой взгляд была стока IDD_SH_EVALCOPY, яс- ен кот, что речь идет о Evaluation Copy. Посмотрим откуда вызывается де- лаем двойной клик на этой строке и вываливаемся здесь.


* Referenced by a CALL at Address:
|:004042D2
|
:00502D90 6AFF                    push FFFFFFFF
:00502D92 68C5E45100              push 0051E4C5
:00502D97 64A100000000            mov eax, dword ptr fs:[00000000]
:00502D9D 50                      push eax
:00502D9E 64892500000000          mov dword ptr fs:[00000000], esp
:00502DA5 51                      push ecx
:00502DA6 53                      push ebx
:00502DA7 55                      push ebp
:00502DA8 56                      push esi
:00502DA9 57                      push edi
:00502DAA 8BF1                    mov esi, ecx
:00502DAC 6A00                    push 00000000

* Possible StringData Ref from Data Obj ->"IDD_SH_EVALCOPY"
                                  |
:00502DAE 6838A85600              push 0056A838
:00502DB3 89742418                mov dword ptr [esp+18], esi

Видим, что это скорее всего процедура напоминающая о том, что мы не зареганы. Идем по адресу вызова процедуры, т.е. на 4042D2. И видим там следующий код...


:004042A6 E815FD0100              call 00423FC0
:004042AB A138E25500              mov eax, dword ptr [0055E238] <- чтение переменной
:004042B0 33ED                    xor ebp, ebp
:004042B2 3BC5                    cmp eax, ebp  <- сравнение чего-то
:004042B4 0F84A2000000            je 0040435C   <- истинный переход
:004042BA E8A1760200              call 0042B960 <- ложная процедура
:004042BF 85C0                    test eax, eax
:004042C1 0F8484000000            je 0040434B   <- ложный переход
:004042C7 8D86C8000000            lea eax, dword ptr [esi+000000C8]
:004042CD 8D4C2430                lea ecx, dword ptr [esp+30]
:004042D1 50                      push eax
:004042D2 E8B9EA0F00              call 00502D90 <- наша процедура
:004042D7 8D4C2430                lea ecx, dword ptr [esp+30]

Смотрим. Выше нашей процедуры какой-то переход зависящий от значения в eax (если eax<>0 то переходим). Заходим в процедуру, чтобы посмотреть че- му будет равен eax и видим следующий код:


:0042B960 33C0                    xor eax, eax
:0042B962 C3                      ret

Выходит eax всегда 0 и переход никогда не выполняется. Ха-ха-ха хотели обмануть нас ложной процедурой. Значит посмотрим еще выше, на сравнение cmp eax, ebp; если посмотреть еще выше, то будет видно, что ebp равен 0. Значит переход будет осуществляться, если eax равен 0. А eax у нас берет- ся из mov eax, dword ptr [0055E238]. Теперь посмотрим где в [0055E238] пишется что нибудь. Набираем в поиске [0055E238] и ждем, прокрутим пару раз, пока не окажемся у следующего кода.


:0040A09D 3BC6                    cmp eax, esi <- сравниваем
:0040A09F 680080CF00              push 00CF8000
:0040A0A4 0F95C1                  setne cl     <-если было не равно cl=1
:0040A0A7 890D38E25500            mov dword ptr [0055E238], ecx

Какое-то сравнение, если не равно в ecx=1, затем пишем в нашу перемен- ную значение из ecx. А нам бы надо, чтобы ecx=0. Можно было бы, конечно, написать mov ecx,0 забив сравнение и установку, но я люблю поступать кра- сиво. Вы же не будете исправлять картину малярной кистью, лучше это сде- лать исправлять тонкой кисточкой. Вот и тут так же мне нравится исправлять минимальное число байтов. Смотрите нам надо, чтобы было равно, значит бу- дем сравнивать ecx с ecx или esi и esi.

Смотрите:

Команда Ее hex-код
cmp eax, esi 3BC6
cmp eax, eax 3BC9
cmp esi, esi 3BF6

Патч (Patch)

Программа написана на C++, значит смещение в файле равно смещению в па- мяти минус 400000. Т.е. если в памяти адрес был 40A09D, то в файле будет 40A09D-400000=0A09D.

Теперь переходим по адресу 0A09E и изменяем C6 на C9 или F6. Сохраняем. Запускаем и видим, что все ограничения исчезли. Слезы радости бегут из наших глаз и умиленное выражение не сходит с нашего лица. Делаем вывод 1 байт > 2 Мбайт. Значит мы рульные крэкеры и ценим минимум изменений для большой цели.

Послесловие

Граждане, соотечественники, если у Вас есть деньги купите этот продукт поддержите отечественного производителя. Тем более программа действительно хороша.

Крэкеры, крякеры и кракерята не выкладывайте кряки к этой программы в Инете, так мы сами в большинстве своем программисты, и ваш поступок будет выглядеть, как стрельба из пистолета себе в ногу.

Программисты фирмы Аббай. Ну что это такое, как это назвать. Не забы- вайте, что надежность защиты определяется стойкостью ее не максимально за- щищенного элемента, а минимального.

"Патч - это единство с программой в своих интересах, максимально близкое у оригиналу, но изменяющее форму и внешность содержания." (Fess)

Все ругательства отправлять в null
Все остальное на lomovskih@yandex.ru

P.S. Запомните все материалы публикуются только в учебных целях и автор за их использование ответственности не несет!!

P.P.S. Возможно имеют место опечатки, заранее извините!

With best wishes Fess

И да пребудет с вами великий дух bad-сектора.

Проект Delphi World © Выпуск 2002 - 2024
Автор проекта: USU Software
Вы можете выкупить этот проект.