От патча до кейгена — Sanchs Marine Aquarium v0.99L Beta

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Автор: Fess

Target: Sanchs Marine Aquarium v0.99L Beta

Tools:

Some brains

Soft-Ice 3.24

Win32Dasm 8.93

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

Пролог

Вступление:

Как-то около месяцев трех-четырех назад увидал я на softodrom’e хороший хранитель экрана в стиле «Эмуляция аквариума» и решил его себе закачать. Сказано сделано, скачал, поставил. Но по каким-то причинам он оказался шароварным. Дурацкий наг и возможность пользоваться одной рыбкой меня вдохновила на взлом. Наскоком взять не получилось, а со временем то- гда была напряженка сбацал патч и забыл. Но все возвращается, вот так и я от нечего делать решил вернуться и продолжить работу, как в следствии ок- азалось защита была плохой. Для начинающих крэкеров это в самый раз, и я предлагаю вашему вниманию 4 способа взлома этой программы.

Что за прога:

Один из самых лучших из видимых мной хранителей экрана, такой красоты и маленького размера (архив 1,1 Мб).

Примечание:

Если вы уже почетный крэкер и написание кейгена для любой проги для Вас плевое дело, то не читайте эту статью, так как в основном она предна- значена для начинающих желающих постичь все основы исскуства крэка. Я не считаю себя мастером крэкером, так что все огрехи в моей статье по незна- нию и не умению, но я стараюсь, чтобы их не было. Если вы нашли какие-ли- бо ошибки, не сочтите за труд и сообщите мне.

Вступление

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

Патч

Подсмотр кода

Написание кейгена на основе самой программы

Написание кейгена на Delphi

Патч

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

Ну что ж приступим.

Программа ничем не запакована и написана на Visual C . Поэтому сме- щение в файле равно смещению в памяти минус 400000h.

Первое, что нужно сделать это установить программу. Логично скажите Вы и будете правы. Установили? Теперь идем в Настройки Экрана, выбираем наш Screen Saver. И жмем кнопку Настройка. Там видим большое поле, где надо вводить наш код. Введем любой код и нажмем кнопку Enter. Код пропал, а ничего не произошло. Хм, странно. Почитаем текст вокруг. Написано, что можно написать TESTFISH, пишем, вводим и видим надпись: TEMP REGISTRATION OK. Работает. Скорее всего здесь и высветиться информация о правиль- ном номере. Что еще можно прочитать… Так написано, что нужно заплатить им 19,95 американских портретов за Deluxe регистрацию. Ладно, наплевать лучше сразу дизассемблировать, а там посмотрим. Копируем файл fish.scr из каталога Windows в свой каталог, у меня это MUSOR. Дизассемблируем. И ле- зем в директорию найденных в программе строк: StrRef и ищем там, какие- нибудь интересные строки, таковыми оказались:

«BASIC registration OK»

«DELUXE registration OK»

«TEMP registration OK»

Последнюю мы уже видели, а две другие нет. Судя по названиям Deluxe это продвинутая регистрация, а Basic основная. На Basic наплюем, хотя мы еще с ней встретимся в 2 и 3 пункте, а сделаем себя люксами. Два раза тыкаем на строку с Deluxe и оказываемя здесь Прим: все основные строки я выделю таким цветом.

:00411263 8B4D10 mov ecx, dword ptr [ebp 10]

:00411266 81E1FFFF0000 and ecx, 0000FFFF

:0041126C 81F95A020000 cmp ecx, 0000025A

:00411272 0F85E1010000 jne 00411459

:00411278 833D7493420003 cmp dword ptr [00429374], 00000003

:0041127F 751B jne 0041129C

* Possible StringData Ref from Data Obj ->»DELUXE registration OK»

|

:00411281 687C564200 push 0042567C

:00411286 6892000000 push 00000092

:0041128B 8B5508 mov edx, dword ptr [ebp 08]

:0041128E 52 push edx

* Reference To: USER32.SetDlgItemTextA, Ord:022Ch

|

:0041128F FF154C024200 Call dword ptr [0042024C]

Так в выделенной строке число по адресу 429374 сравнимается с 3 и если не равно, то идет куда-то дальше, а если равно, то выдает эту строку. Зна- чит надо, чтобы в этой ячейке памяти всегда было 3. Вы можете не согла- ситься со мной, сказав: «Может просто заменить переход после этого сравне- ния и все.» Это самая главная ошибка начинающих борьба не с причиной, а со следствием, такой способ может сработать, но редко. Хотя никто Вас не дер- жит попробуйте, может и получится.

Попробуем поискать фрагмент, где в эту ячейку записываются данные, это можно сделать с помощью Soft-Ice. Но зачем крэкеру геморой. Просто поищем строку mov dword ptr [00429374], 00000003. Глядишь, что и всплывет. Найде- но три адреса, вот текст около первого

:00404026 6A03 push 00000003

:00404028 E8C3F0FFFF call 004030F0

:0040402D 83C404 add esp, 00000004

:00404030 85C0 test eax, eax

:00404032 7434 je 00404068

:00404034 C7057493420003000000 mov dword ptr [00429374], 00000003

Каждые три раза вызывается эта процедура и если в eax она возвратит не 0, то все хорошо и идет присвоение, если 0, то плохо. Можно, конечно, поменять все jump’ы после этих процедур. И это скорее всего поможет, но я предпочи- таю действовать более тонко, сделать, чтобы процедура всегда возвращала не 0. Можно, конечно, прямо после входа в процедуру поставить ret, ведь скорее всего eax0. Процентов 91,2%. Но лучше присвоить eax единицу и выйти. Да- вайте так и сделаем.

Открываем файл qview или hiew. Включаем 32 битный-hex

Добавить комментарий