![]() |
Добро пожаловать, гость ( Вход | Регистрация )
![]() |
-=CHE@TER=- |
![]()
Сообщение
#1
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,371 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 318 раз(а) ![]() |
Как оказалась игра тупо проверяет все диски на наличие 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 файлами?.. |
![]() ![]() |
-=CHE@TER=- |
![]()
Сообщение
#2
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,371 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 318 раз(а) ![]() |
Прочитал на одном форуме, что английский No-CD подходит к русской версии только при полной установке игры. No-CD вообще только при полной установке будет работать, т.к. файлы при частичной находятся на CD-диске и игра без них, понятно, не пойдёт. Попробуй подставь в игрушку англ. exe-шники, вдруг сработает Попробовал - заработало, но... Русский .EXE файл, оказывается, уже сразу ставится пропатченный - "1.2 (164)" Так с версией 1.2 попробовал - всё ок, только теперь начальный диалог с настройками стал на английском... Это не есть гуд. Ещё раз напомню - за что мы бьёмся (*улыбается*): хотелось бы поменять 1 или 10 байт и получить версию играющую без диска. Любое решение, ИМХО, должно: 1) Занимать как можно меньше места (1 или 2 Kb - это не 1 или 2 Mb, особенно, если модем). 2) Не доставлять каких-либо лишних недобств пользователю (например, установить это, включить тут эмуляцию того, отключить привод и т.д.). 3) Решать данную задачу, а не отсылаться к другой (что мы сейчас и имеем подсовывая вместо русской версии - английскую). В общем, я ещё как-нибудь попробую dump сделать, если получится. Если нет, то, пожалуй, .BAT файлы выложу - они меньше занимают и оставляют все как было - на русском. (*улыбается*) |
![]() ![]() |
Упрощённая версия | Сейчас: 30th April 2025 - 19:51 |