Как отучить игры от
проверки CD-ROM (на примере Hellfire) |
|||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Использованные программы:
Hellfire v2.0, W32Dasm v8.9, Dos Navigator v1.5
В статье рассматриваются следующие вопросы:
Заменяем в программе HellFire v2.0 проверку с диска CD-ROM на сетевой диск Суть проблемы состоит в том, чтобы
доказать программе, что винчестер на
самом деле совсем не винчестер, а CD-ROM.
Или скажем - как в данном случае - в
выдаче за локальный CD сетевого, ну
один CD на работе, а играть-то всем
охота!
Стандартно программа получает
список всех дисков, проверяет их на
"CDромность" и по нахождению
проверяет наличие нужных файлов. Для
проверки, необходимо, очевидно,
сравнить возвращаемое значение с 5.
Найдем этот момент программы, вот как
он выглядит после
дизассемблирования HellFire с помощью
W32Dasm :
Запишем HEX-DUMP этого куска и найдем его в шеснадцатеричном редакторе. Например в DN: откроем файл hellfire.exe по F3, далее F4 (переход в HEX режим), F7 (поиск), в строке ввода HEX строки введем записанное ранне и вперед (т.е. ENTER). Вместо 83F805 введем 83F804 и любой из подключенных сетевых дисков теперь будет восприпринят прораммой за CD, иначе введем 83F803 - тогда жесткие диски будут приниматься за CD. Фантазия может развиваться по-любому, можно изменить условие перехода после сравнения, тогда не придется заботится о типе диска. Вот и все на сегодня, в следующий раз можно будет поговорить о минимизации количества данных, копируемых с диска. Эта проблема отнюдь не тривиальна, так как файлы обычно храняться в виде типа PAK как, например в QUAKE. Для простых же программ можно посоветовать обнулить все WAV, AVI файлы. Для этого есть специальные утилиты, но, конечно, проще создать файл нулевой длинны с таким же именем, например по Shift-F4 в любом дисковом коммандере (DN,NC,etc.). Пишем Fake-CD для OS Windows 95 Для DOS существовала прекрасная утилита - FakeCD, которая подменяла MSСDEX и эмулировала таким образом CD-диск который, на самом деле, был каталогом на винчестере. Для Win95 такую программу найти не просто, поэтому необходимо ее сделать самим. Этим мы и займемся, тем более, что это будет прекрасная практика по копанию в недрах 95'ого. Посмотрим на проблему, обсуждавшуюся раннее, с другой стороны. Заменим не использование функции, а саму функцию. Если в DOS для замены функций необходимо только было изменить обработчик прерываний, то в Windows такой финт уже не поможет. Выясним, где "живет" GetDriveType(). И - о ужас - это главная библиотека Win95 KERNEL32.DLL. Что делать? Как всегда, запастись кофе и напуcтить на KERNEL32.DLL дизассемблер. OK, ждем окончания процесса и смотрим список экспортируемых функций. Вот нужная нам:
А теперь - для ленивых - кусок кода, который возвращает 3:
Да - лучше сохранить старый KERNEL32, так как некоторые программы могут не оценить ваш юмор, и решить, что несколько CD и ни одного винчестера - это слишком. А вообще идеально было бы изменить функцию коренным образом. Скажем сделать CD дисками все, начиная с T. Тогда можно было бы подключать subst'ом каталоги, которые были бы CD, а винчестеры остануться винчестерами. Но это уже задание на дом. Удачи! Vadim M. |