Корсары проклятье дальних морей - Пример взлома CD
Автор: 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-сектора.
|