Корсары проклятье дальних морей — Пример взлома CD

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

Автор: Fess

Target: Корсары проклятье дальних морей

Tools:

Немного мозгов

Win32Dasm 8.93

Любой файловый менеджер

Hex-редактор

Пролог

Вступление:

Наконец-то заработал CD-ROM!!! Дали мне тут гамес Корсары от известной в России фирмы 1С. Насколько мне известно игры от этой фирмы за- щитой не блещут. Установилась хорошо, вот только без кампакта работать не хотела. Что ж придется помочь. А заодно вот решил накатать тьюториал, как иллюстрация к другому моему тьюториалу от 31.05.2002 с названием «Практи- чески все о взломе CD». Найти можно на vallkor.chat.ru.

Что за прога:

Вполне приличный гамес типа RPG. Минимальные системные требования: PII-233МГц, 64 Мб оперативки, 3D-видео карта, 800 Метров на ЖД, Win9x.

Начало

Первое, что надо сделать это проверить, каким методом гамес проверяет наличие CD. Вариантов 3: использует функцию GetDriveTypeA, пишет букву CD в файл, другим способом. Первые два наиболее популярны. Проверяется это так, заходим в «Система» Панели управления и изменяем имя вашего CD-ROM’a на любое другое. У меня был K: я заменил на Z:. Перезагружаем. И запуска- ем гамес, компакт с игрой, оставив в лотке CD-ROM’a. Заработала. Значит тип защиты (скорее всего номер 1).

Взлом

Засовываем запускающийся файл engine.exe в Win32Dasm и ищем там, в разделе Импорта строку KERNEL32.DLL GetDriveTypeA. К сожалению, ее там не оказалось. Стукните рукой по CD-ROM’у может заработает. И тут нам приходит в голову, что если ее тут нет, значит она может быть где- нибудь еще, например, в динамической библиотеке (dll). Запускаем любой фаловый менеджер (я предпочитаю клоны DosNavigator’a, в частности NDN). Заходим в каталог куда мы установили Корсары нажимаем Alt-F7. Выбираем такие опции: Поиск в текущем каталоге, Рекруссивный поиск. В Имя файлов пишем *.dll в Содержащий текст пишем GetDriveTypeA. И запускаем, если все сделано правильно находится один файл core.dll, его и дизассемблируем.

Опять смотрим в таблицу импорта. Нашлась строка, нажимаем на нее два раза и вываливаемся тут.

:1000C86A 8D6C1C18 lea ebp, dword ptr [esp ebx 18]

:1000C86E 55 push ebp

* Reference To: KERNEL32.GetDriveTypeA, Ord:0104h

|

:1000C86F FF1534700110 Call dword ptr [10017034]

:1000C875 83F805 cmp eax, 00000005

:1000C878 7579 jne 1000C8F3

:1000C87A 8BFD mov edi, ebp

Ага, это почти 100% то, что нам нужно, если посмотреть в моей общей статье (см. выше) вид функции GetDriveTypeA, то можно узнать, что она во- звращает в eax 3, если имя ЖД и 5, если имя CD. То есть здесь нам надо просто заменить по адресу в файле C877 число 05 на 03.

Посмотрим дальше, может еще что-нибудь есть.

:1000C8DC 895704 mov dword ptr [edi 04], edx

:1000C8DF 894708 mov dword ptr [edi 08], eax

* Reference To: KERNEL32.CreateFileA, Ord:0034h

|

:1000C8E2 FF150C700110 Call dword ptr [1001700C]

:1000C8E8 8BF0 mov esi, eax

:1000C8EA 83FEFF cmp esi, FFFFFFFF

:1000C8ED 752C jne 1000C91B

Да, вот еще один трюк, попытка создать файл на CD, если бы вы это про- пустили, она бы не заработала, потому что на ЖД можно создать файл. И вы- деленное сравнение, есть ни что иное как проверка создался файл или нет, т.е. если в eax (потои перешедшее в esi) возвратилось FFFFFFFF, вроде как файл не смог создаться, то все нормально. Значит здесь надо заметить в файле по адресу C8ED число 75h (jne,jnz) на EBh(jmp), т.е. на безусловный переход.

Посмотрим может еще что-нибудь есть. Да вроде нет , дальше выход из функции обеспечивающей проверку. Если вы хорошо разбираетесь в этом, то можете увидеть, что функция проверки возвращает eax=1, если проверка уда- лась и eax=0, если не удалась. Вывод: можно в самом начале функции напи- сать mov eax,1 , а затем ret. Это попробуйте сами.

Послесловие

Товарищи программисты. Это не защита это отмазка, любой начинающий сломает ее не трудясь за 3 минуты. Хотите получать деньги, делайте лучше.

Все ругательства отправлять в null

Все остальное на lomovskih@yandex.ru

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

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

With best wishes Fess

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

{/codecitation}

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