Практически все о взломе CD

Материал из DRKB

Практически все о взломе CD[править | править код]

Вступление[править | править код]

Наконец, я решился на написание этой статьи, идея пришла давно, но полностью систематизировать решился только сегодня. Сегодня мы не будем рассматривать конкретного взлома. На это есть две причины:

  1. У меня начал глючить CD-ROM, пора менять
  2. Статья получилась бы слишком длинной

В принципе вторая причина меня волнует мало, но первая встала достаточно остро.

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


Принципы и методы защиты[править | править код]

Сейчас я постараюсь написать все, когда либо встреченные методы защиты:

  1. Проверка на наличие диска
  2. Проверка на метку тома
  3. Проверка на наличие места
  4. Проверка на наличие файла и его атрибуты
  5. Проверка на запись файла
  6. Другие виды проверки
  7. Некоторые общие моменты


Проверка на наличие диска[править | править код]

Я разделяю эти проверки на два класса:

1) Функцией GetDriveTypeA[править | править код]

Теория: Функция GetDriveTypeA возвращает в eax тип диска по его имени Вот список возвращаемых значений.

0 -- - Невозможно определить тип
1 -- - Диск не найден
2 DRIVE_REMOVABLE - Гибкий (возможна замена)
3 DRIVE_FIXED - Жесткий (замена невозможна)
4 DRIVE_REMOTE - Сетевой диск
5 DRIVE_CDROM - CD-ROM
6 DRIVE_RAMDISK - RAM - Диск 
Как часто встречается
Такая проверка стоит на абсолютном большинстве ИГР.
Методы взлома
  1. Используя Soft-Ice/TRW2000 поставить бряк на эту функцию командой bpx GetDriveTypeA и если после выхода в вызывающую программу, недалеко стоит cmp eax, 00000005, то следует 5 исправить на 3, т.е. программа будет искать не CD-ROM, а жесткий диск.
  2. Дизассемблировать перейти к месту вызова функции, посмотреть, есть ли сравнение. Это несколько модернизированный вариант пункта 1.
  3. На эту идею я натолкнулся в статье Vadim M. "Как отучить игры от про- верки CD-ROM (на примере Hellfire)". Краткое описание: поскольку функция GetDriveTypeA вызывается из kernel32.dll будем править там, смысл, чтобы все жесткие диски в системе были бы как CD-ROM'ы, этого легко достичь пере- правив результат возвращаеммый функцией с 3 на 5, правдо это не всегда про- ходит. Эту статью можно увидеть на www.reversing.net
Примеры игр
Project IGI, Deadly Dozen, and many others


2) Запись имя диска в реестр или файл[править | править код]
Как часто встречается
Достаточно часто
Метод взлома
Я использую такой метод, т.к. программа где-то сохранила имя CD-ROM'a, значит, если мы изменим имя, то программа откажется запускаться, даже если диск будет торчать в CDюке. Изменяем имя и если запускаться перестанет, то ищем с помощью RegMon и FileMon, куда программа его запрятала.
Примеры игр
Shockman (Шокмэн), записывала в файл WINDOWS\facked.ini


Проверка на метку тома[править | править код]

Теория: Метка тома проверяется с помощи функции GetVolumeInformation, если эта функция вызывается, то почти однозначный вывод проверка метки тома. Функция очень часто используется с категорией 1.

Как часто встречается
Очень часто
Методы взлома
  1. Используя Soft-Ice/TRW2000 поставить бряк на эту функцию командой bpx GetVolumeInformation. После этой процедуры скорее всего идет процедура сравнения правильной метки с вашей. После процедуры переправить переход.
  2. Дизассемблировать перейти к месту вызова функции, посмотреть, есть ли сравнение и т.д.. Это несколько модернизированный вариант пункта 1.
  3. Если категорию 1 вы уже правили. Посмотреть метку тома на компакт-ди- ске, и установить такую же на любом жестком диске.
  4. Если категорию 1 не правили. Берем любой свой компакт с длинной метки тома меньшей, либо равной длинне метки на ломаемом компакте. Ищем в испол- няемых файлах программы, настоящую метку и заменяем ее нашей. Вывод если Вы вставляете свой компакт, игра думает, что это ее родной.
Примеры игр
Deadly Dozen


Проверка на наличие места[править | править код]

Теория: Наличие свободного места на диске проверяется функцией GetDiskFreeSpace. Функция вызывается для того, чтобы проверить что это за диск, ведь на CD свободного места нет.

Как часто встречается
Бывает
Методы взлома
Аналогичны методам 1 и 2 из 1 и 2 категории, только на другую функцию.
Примеры игр
Была какая-то, но не помню названия.


Проверка на наличие файла и его атрибуты[править | править код]

Теория: Один из распространившихся в последнее время приемчиков, часто это используется для проверки видео. Которое не копируется на ЖД. В основном используются такие функции:

  • GetFileAttributesA - Проверка аттрибутов файла
  • ReadFile - Чтение файла
  • GetFileSize - Получение размера файла
  • FindFirstFile - Поиск файла.
Как часто встречается
Иногда
Метод взлома
Я использую такой метод, запускаем FileMon. Затем запускаем игру, со вставленным компактом. Потом сразу же выходим и смотрим, к каким файлам шло обращение. Если файлы не большие можно скопировать их на ЖД, если есть большие видео, то их можно заменить любыми другими видаками маленького размера. В других случая придется править переходы. Если используются все эти функции придется попотеть.
Примеры игр
Project IGI, в этой игре были два файла по 1 байту, я их скопировал на диск C: в корневой, изменил после GetDriveTypeA сравнение и все.


Проверка на запись файла[править | править код]

Теория: Для этого используются функции WriteFile и GetLastError. Одна для записи файла другая для проверки ошибки, если они стоят подряд, то это явно она.

Как часто встречается
Ни разу не встречал
Метод взлома
Чуть-чуть исправленный метод из предыдущей категории.
Примеры игр
Я же сказал: "Не встречал!"


Другие виды проверки[править | править код]

Теория: Бывают и другие сильно замусоленные проверки

Как часто встречается
На дисках компании "Русобит"
Метод взлома
Почитайте статьи ASMax'a на www.reversing.net
Примеры игр
Казаки, Star Force.


Некоторые общие моменты[править | править код]

Часто в играх проверки объединены в одну общую процедуру. И удалив ее, программа начинает работать.

Практически всегда программа защищена совокупностью защит, которые здесь представлены в разных категориях.

Статья не претендует на всеобщность, поэтому я не могу предугадать ходы разработчиков. Статья открыта для дополнения, если у Вас есть какие нибудь ценные мысли по этому поводу, шлите на мыло.

Все ругательства отправлять в null. Все остальное на lomovskih@yandex.ru

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

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

With best wishes Fess

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



Source: Взято с http://delphiworld.narod.ru
ID: 01408