Взлом FineReader Pro 5.0 Try and Buy - Красота в минимуме
|
Вчера в США хакер российского происхождения был осужден на 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-сектора.
|