Myst III: Exile, No-CD |
Добро пожаловать, гость ( Вход | Регистрация )
Myst III: Exile, No-CD |
-=CHE@TER=- |
Jul 28 2006, 20:28
Сообщение
#1
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Как оказалась игра тупо проверяет все диски на наличие 1-го файла:
%c:\Data\MACAnodes.m3a (%c - буква (формат-строка из C) диска, от A до Z) Причём, ни размер ни чтобы то ни было, больше не проверяется. Сейчас сделал банальный No-CD: InstallDrive.bat: CODE @echo off md Data cls > "Data\MACAnodes.m3a" subst Z: . cls UnInstallDrive.bat: CODE @echo off subst Z: /D del "Data\MACAnodes.m3a" rd Data cls Бесспорно, это лучше чем 604 мегабайта на жёстком диске или жужжание CD при запуске, но хотелось бы, так сказать, "поправить один байт" и всё. Увы, игра оказалась очень замороченной: 1) В игре два файла в \MYST III - Exile\Bin\ на которые нужно обратить внимание: M3R.exe (465.920 байт) Inst.dat (26.112 байт) 2) Файл Inst.dat содержит в начале "UPX0", ".hole", затем "rsrc" (стандартная для Win32 приложений). 3) M3R.exe написан то ли на Delphi, то ли на Builder и в конце содержит сплошной мусор, который в своём хвосте, в свою очередь, содержит всякие ссылки на .DLL и экспортируемые оттуда функции (типа DirectDrawCreate). Кстати - в Inst.dat в конце - тоже самое. 4) Что происходит при запуске игры - файла M3R.exe: а) запускается M3R.exe б) читает с диска Inst.dat в память как "спящий" процесс в) добавляет в него тот самый мусор из хвоста файла M3R.exe и получает полноценную программу г) "отпускает" спящий процесс Inst.dat на выполнение и M3R.exe завершает свою работу д) Inst.dat, в свою очередь, распаковывается и начинает работать Мне удалось на шаге д) "присосаться" через OllyDbg32 к процессу Inst.dat и дампнуть его. Оттуда я и узнал (там уже было всё распаковано) про проверку файла "%c:\Data\MACAnodes.m3a" на диске. Сделать нормальный No-CD мешает именно такая странная разбивка файла - я пустил M3R.exe под IDA, даже нашёл место, где оно склеивает всё в одно, загружает процесс "спящим", но так и не смог разобраться, в какое именно место нужно было "вклеить" хвост из M3R.exe и с какого места хвост брать. По хорошему, что нужно сделать: 1) Inst.dat + хвост из M3R.exe = Inst.exe 2) Если это и правда UPX - то распаковать 3) Пустить под дизассемблером и найти нужное место, поправить 1(2) байт(а) 4) Запаковать всё обратно 5) Посмотреть, чем различаются обычный Inst.exe и тот, что мы снова перепаковали - там различие должно быть, максимум, в 10 байтах. 6) Найти эти байты в M3R.exe в хвосте и сделать нормальный .CXP No-CD. А данном алгоритме я сразу сел на шаге 1) ибо не знаю куда в нутрях Inst.dat вставлять кусок и как его вытаскивать из M3R.exe Кто-нибудь хочет помочь или обойдёмся .BAT файлами?.. |
Упрощённая версия | Сейчас: 16th November 2024 - 09:35 |