IPB

Добро пожаловать, гость ( Вход | Регистрация )

> Myst III: Exile, No-CD
-=CHE@TER=-
Jul 28 2006, 20:28
Сообщение #1


Walter Sullivan
***

Группа: Root Admin
Сообщений: 1,353
Регистрация: 4-February 08
Пользователь №: 3
Спасибо сказали: 311 раз(а)



Как оказалась игра тупо проверяет все диски на наличие 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 файлами?..
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
 
Reply to this topicStart new topic
Ответов
-=CHE@TER=-
Jul 3 2022, 09:53
Сообщение #2


Walter Sullivan
***

Группа: Root Admin
Сообщений: 1,353
Регистрация: 4-February 08
Пользователь №: 3
Спасибо сказали: 311 раз(а)



Понимаю, что 16 лет спустя оно вряд ли кому-то нужно, но я случайно нашёл эти файлы у себя на жёстком диске и решил дожать, да и интересно было что там. И хотя No-CD исполняемый файл подходит и от английской версии v1.22, но всё же в русской было начальное окно с настройками переведено - немного, но всё же. Сразу скажу, что проверять мне не на чем, ибо игры нет, только "Inst.dat" и "M3R.EXE" остались. Если кто-нибудь проверит на русской версии, то буду благодарен.
Исполняемый файл собрал достаточно быстро, больше времени ушло на восстановление минимальных заголовков UPX, чтобы родным упаковщиком можно было распаковать. PE Explorer подсказал часть данных, часть подсмотрел из исходных кодов UPX версии 1.25 (использовался для сжатия, из веб архива качал), часть подсмотрел под отладчиком. Самое главное - правильно указать размер упакованных (они меньше, чем блок данных, ибо в конце код распаковщика) и распакованных данных (можно подсмотреть под отладчиком после функции распаковки, при условии, что размер упакованных указан правильно).

Сама программа с исходными кодами на C: buildm3r.zip

QUOTE
Myst III: Exile - Russian version executable builder + No-CD
© CTPAX-X Team 2022
http://www.CTPAX-X.org/

1. Установить игру на полной установке.

2. Скопировать в каталог, где находятся файлы "M3R.exe" и "Inst.dat", программу "BuildM3R.exe" и запустить.

3. Должен получиться файл "M3R_FULL.EXE" который нужно распаковать при помощи UPX https://upx.github.io/

upx.exe -d M3R_FULL.EXE

4. После этого в распакованном файле "M3R_FULL.EXE" нужно заменить следующие байты, чтобы сделать No-CD:

Смещение: было стало
0006434E: 75 EB
000643A4: 3F 00

5. После этого, по идее, всё должно работать.
Если всё будет нормально, то файл "M3R.exe" можно удалить и переименовать в него "M3R_FULL.EXE".


Я таки нашёл какой версией UPX игра была сжата - 1.00. При распаковке-упаковке получается точно такой же исполняемый файл, кроме текста копирайтов в заголовке. Но даже если распаковать, поменять два байта и запаковать назад, то разница будет в огромном количестве байт. Увы, тут сжатие не RLE и не LZSS/LZX, так что изменением пары байт не обойтись.

Добавлено:
О!!! До меня дошло, там же UPX - значит его можно прямо в памяти менять!
Может кто-нибудь проверить, у кого игра есть, такую штуку - в оригинальный файл "M3R.exe" по смещению 00071A93 записать следующие 19 (7 + 7 + 5) байт (первые 5 байт будут не нули - это jmp OEP - здесь я его перенёс на последнюю команду):
CODE
C6 05 4E 43 46 00 EB; mov b,[0046434E], 0EBh
C6 05 A4 43 46 00 00; mov b,[004643A4], 000h
E9 DF 4F 41 00; jmp OEP
Тогда, по идее, после распаковки программа сама себя пропатчит этим No-CD в памяти.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

Сообщения в этой теме
-=CHE@TER=-   Myst III: Exile   Jul 28 2006, 20:28
-=CHE@TER=-   Всё ещё воюю с Inst.dat - "поможите чем можит...   Aug 2 2006, 14:21
jTommy   Может не стоит так заморачиваться? 1. 600мб на дис...   Aug 2 2006, 20:31
Siberian GRemlin   3. Для английской версии есть лекарство или ты ру...   Aug 3 2006, 08:45
jTommy   Ты бы привёл ссылку (я найти не смог, например (ч...   Aug 3 2006, 17:49
-=CHE@TER=-   Лекарство я в локальной сети нашел, вот оно: http:...   Aug 3 2006, 18:16
Siberian GRemlin   Как оказалась игра тупо проверяет все диски на на...   Aug 3 2006, 06:05
-=CHE@TER=-   Спасибо, что откликнулись! Может не стоит так...   Aug 3 2006, 06:19
Siberian GRemlin   Во-вторых, замена на ".\Data\MACAn...   Aug 3 2006, 06:59
-=CHE@TER=-   ".\%cata\MACAnodes.m3a"+Chr(0)...   Aug 3 2006, 08:06
jTommy   Попробуй подставь в игрушку англ. exe-шники, вдруг...   Aug 3 2006, 20:41
Siberian GRemlin   Прочитал на одном форуме, что английский No-CD под...   Aug 4 2006, 02:48
-=CHE@TER=-   Прочитал на одном форуме, что английский No-CD под...   Aug 4 2006, 07:55
-=CHE@TER=-   Понимаю, что 16 лет спустя оно вряд ли кому-то нуж...   Jul 3 2022, 09:53


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0 -

 



Упрощённая версия Сейчас: 28th March 2024 - 23:50