Практически всё о взломе CD
01.01.2007
lomovskih@yandex.ru
Вступление
Наконец, я решился на написание этой статьи, идея пришла давно, но полностью систематизировать решился только сегодня. Сегодня мы не будем рассматривать конкретного взлома. На это есть две причины:
- У меня начал глючить CD-ROM, пора менять
- Статья получилась бы слишком длинной
В принципе вторая причина меня волнует мало, но первая встала достаточно остро.
Хотя сдесь и будет в основном теоретический материал, о способах защиты от копирования с CD и методах устранения такой нехорошести, но я буду приводить и примеры игр, к сожалению, многое ломается на ходу и не обременяешь себя запоминанием, поэтому примеры игры в основном одни и те же.
Принципы и методы защиты
Сейчас я постараюсь написать все, когда либо встреченные методы защиты:
- Проверка на наличие диска
- Проверка на метку тома
- Проверка на наличие места
- Проверка на наличие файла и его аттрибуты
- Проверка на запись файла
- Другие виды проверки
- Некоторые общие моменты
1) Проверка на наличие диска
Я разделяю эти проверки на два класса:
- Функцией GetDriveTypeA
- Запись имени диска в реестр или файл
Теория:
Функция GetDriveTypeA возвращает в eax тип диска по его имени
Вот список возвращаемых значений.
- 0 - Невозможно определить тип
- 1 - Диск не найден
- 2 - DRIVE_REMOVABLE - Гибкий (возможна замена)
- 3 - DRIVE_FIXED - Жесткий (замена невозможна)
- 4 - DRIVE_REMOTE - Сетевой диск
- 5 - DRIVE_CDROM - CD-ROM
- 6 - DRIVE_RAMDISK - RAM - Диск
Как часто встречается:
Такая проверка стоит на абсолютном большинстве ИГР.
Методы взлома:
Используя Soft-Ice/TRW2000 поставить бряк на эту функцию командой
bpx GetDriveTypeAи если после выхода в вызывающую программу, недалеко стоитcmp eax, 00000005, то следует 5 исправить на 3, т.е. программа будет искать не CD-ROM, а жесткий диск.Дизассемблировать, перейти к месту вызова функции, посмотреть, есть ли сравнение. Это несколько модернизированный вариант пункта 1.
На эту идею я натолкнулся в статье Vadim M. "Как отучить игры от проверки CD-ROM (на примере Hellfire)". Краткое описание: поскольку функция GetDriveTypeA вызывается из kernel32.dll, будем править там. Смысл - чтобы все жесткие диски в системе были бы как CD-ROM'ы, этого легко достичь переправив результат возвращаеммый функцией с 3 на 5, правда это не всегда проходит. Эту статью можно увидеть на www.reversing.net
Примеры игр: Project IGI, Deadly Dozen, and many others
Второй тип защиты: Запись имя диска в реестр или файл
Как часто встречается: Достаточно часто
Метод взлома:
Я использую такой метод, т.к. программа где-то сохранила имя CD-ROM'a, значит, если мы изменим имя, то программа откажется запускаться, даже если диск будет торчать в CDюке. Изменяем имя и если запускаться перестанет, то ищем с помощью RegMon и FileMon, куда программа его запрятала.
Примеры игр: Shockman (Шокмэн), записывала в файл WINDOWS\facked.ini
2) Проверка на метку тома
Теория: Метка тома проверяется с помощи функции GetVolumeInformation, если эта функция вызывается, то почти однозначный вывод проверка метки тома. Функция очень часто используется с категорией 1.
Как часто встречается: Очень часто
Методы взлома:
Используя Soft-Ice/TRW2000 поставить бряк на эту функцию командой bpx GetVolumeInformation. После этой процедуры скорее всего идет процедура сравнения правильной метки с вашей. После процедуры переправить переход.
Дизассемблировать перейти к месту вызова функции, посмотреть, есть ли сравнение и т.д.. Это несколько модернизированный вариант пункта 1.
Если категорию 1 вы уже правили. Посмотреть метку тома на компакт-диске, и установить такую же на любом жестком диске.
Если категорию 1 не правили. Берем любой свой компакт с длинной метки тома меньшей, либо равной длинне метки на ломаемом компакте. Ищем в исполняемых файлах программы, настоящую метку и заменяем ее нашей. Вывод если Вы вставляете свой компакт, игра думает, что это ее родной.
Примеры игр: Deadly Dozen
3) Проверка на наличие места
Теория: Наличие свободного места на диске проверяется функцией GetDiskFreeSpace. Функция вызывается для того, чтобы проверить что это за диск, ведь на CD свободного места нет.
Как часто встречается: Бывает
Методы взлома:
Аналогичны методам 1 и 2 из 1 и 2 категории, только на другую функцию.
Примеры игр: Была какая-то, но не помню названия.
4) Проверка на наличие файла и его аттрибуты
Теория: Один из распространившихся в последнее время приемчиков, часто это используется для проверки видео. Которое не копируется на ЖД. В основном используются такие функции:
- GetFileAttributesA - Проверка аттрибутов файла
- ReadFile - Чтение файла
- GetFileSize - Получение размера файла
- FindFirstFile - Поиск файла.
Как часто встречается: Иногда
Метод взлома:
Я использую такой метод, запускаем FileMon. Затем запускаем игру, со вставленным компактом. Потом сразу же выходим и смотрим, к каким файлам шло обращение. Если файлы не большие можно скопировать их на ЖД, если есть большие видео, то их можно заменить любыми другими видаками маленького размера. В других случая придется править переходы. Если используются все эти функции придется попотеть.
Примеры игр:
Project IGI, в этой игре были два файла по 1 байту, я их скопировал на диск C: в корневой, изменил после GetDriveTypeA сравнение и все.
5) Проверка на запись файла
Теория: Для этого используются функции WriteFile и GetLastError. Одна для записи файла другая для проверки ошибки, если они стоят подряд, то это явно она.
Как часто встречается: Ни разу не встречал
Метод взлома: Чуть-чуть исправленный метод из предыдущей категории.
Примеры игр: Я же сказал: "Не встречал!"
6) Другие виды проверки
Теория: Бывают и другие сильно замусоленные проверки
Как часто встречается: На дисках компании "Русобит"
Метод взлома: Почитайте статьи ASMax'a на www.reversing.net
Примеры игр: Казаки, Star Force.
7) Некоторые общие моменты
Часто в играх проверки объединены в одну общую процедуру. И удалив ее, программа начинает работать.
Практически всегда программа защищена совокупностью защит, которые здесь представлены в разных категориях.
Статья не претендует на всеобщность, поэтому я не могу предугадать ходы разработчиков. Статья открыта для дополнения, если у Вас есть какие-нибудь ценные мысли по этому поводу, шлите на мыло.
Все ругательства отправлять в null
Все остальное на lomovskih@yandex.ru
P.S. Запомните все материалы публикуются только в учебных целях и автор за их использование ответственности не несет!!
P.P.S. Возможно имеют место опечатки, заранее извините!
With best wishes Fess
И да пребудет с вами великий дух bad-сектора.

