![]() |
Добро пожаловать, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
-=CHE@TER=- |
![]()
Сообщение
#1
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,360 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 313 раз(а) ![]() |
Как оказалась игра тупо проверяет все диски на наличие 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,360 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 313 раз(а) ![]() |
Всё ещё воюю с Inst.dat - "поможите чем можите" (с).
В OllyDbg32 жахнул бряк на: CODE .0001C2DC call ResumeThread Т.е. файл в это время уже в оперативке собранный - всё ок. Дамплю процесс "M3R.exe" - файла "Inst.dat" там нет, т.к. это отдельный поток. В TaskManager'е вижу "Inst.dat" 200 Кб весом - но никак не могу к нему подцепиться, чтобы сдампить. OllyDbg32 вообще его не видит, пока не сделаю ResumeThread, но тогда он, сволочь, успевает распаковаться и дамп памяти в это время уже нахрен не нужен - от запакованного там ничего не остаётся. Кто-нибудь знает программу для dump'анья спящих процессов? ProcDump тоже не хочет... Или дайте код, как можно по hThread процесса (push eax - предыдущая команда, перед ResumeThread) получить его dump? Буду благодарен за любую помощь. |
jTommy |
![]()
Сообщение
#3
|
Наблюдающий ![]() ![]() ![]() Группа: CTPAX-X Сообщений: 197 Регистрация: 4-February 08 Из: деревня Москва Пользователь №: 6 Спасибо сказали: 19 раз(а) ![]() |
Может не стоит так заморачиваться?
1. 600мб на диске не так уж много 2. можно попробовать вручную (или прогой Mini-Image Ripper, например) изготовить мини-образ. 3. Для английской версии есть лекарство или ты русскую исследуешь? |
Siberian GRemlin |
![]()
Сообщение
#4
|
![]() Advanced Member ![]() ![]() ![]() Группа: CTPAX-X Сообщений: 537 Регистрация: 4-February 08 Пользователь №: 2 Спасибо сказали: 221 раз(а) ![]() |
Как оказалась игра тупо проверяет все диски на наличие 1-го файла: %c:\Data\MACAnodes.m3a (%c - буква (формат-строка из C) диска, от A до Z) Я EXE'шник не видел, но что если в нём написать, чтобы он проверял не на дисках а в папке с игрой или оттуда откуда он расположен, чтобы он проверял ".\Data\MACAnodes.m3a". Каким орбазом хранится путь в EXE'шнике к этому файлу? Если просто строка "%c:\Data\MACAnodes.m3a", то замени её на ".\Data\MACAnodes.m3a", т.к. она короче на два байта оригинальной, то получится ".\Data\MACAnodes.m3a"+Chr(0)+Chr(0) |
-=CHE@TER=- |
![]()
Сообщение
#5
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,360 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 313 раз(а) ![]() |
Спасибо, что откликнулись!
Может не стоит так заморачиваться? 1. 600мб на диске не так уж много 2. можно попробовать вручную (или прогой Mini-Image Ripper, например) изготовить мини-образ. 3. Для английской версии есть лекарство или ты русскую исследуешь? 1. Не... так не пойдёт - у меня из-за всех игр, которые я сейчас исследую - всего 200 метров свободных осталось... Да и вообще - элементарно подсчитай: допустим у тебя стоит 10 игр - и каждая по 600 Мб... 600*10 = 6 Гб. Дальше - больше. "Это не наш метод". © (*улыбается*) 2. Тоже не канает - на приведённых выше .BAT файлах заморочек меньше. 3. Я исследую лицензионную русскую версию от Russobit-M - другой у меня нет. Я EXE'шник не видел, но что если в нём написать, чтобы он проверял не на дисках а в папке с игрой или оттуда откуда он расположен, чтобы он проверял ".\Data\MACAnodes.m3a". Каким орбазом хранится путь в EXE'шнике к этому файлу? Если просто строка "%c:\Data\MACAnodes.m3a", то замени её на ".\Data\MACAnodes.m3a", т.к. она короче на два байта оригинальной, то получится ".\Data\MACAnodes.m3a"+Chr(0)+Chr(0) Ну, во-первых, на что ты не обратил внимания и из-за чего идёт такой гемморой - строчку "%c:\Data\MACAnodes.m3a" я взял из распакованного и сдампленного из памяти файла. В оригинальном файле - ты её не найдёшь и изменить нормально не сможешь, т.к. файл упакован. (*улыбается*) Во-вторых, замена на ".\Data\MACAnodes.m3a"+Chr(0)+Chr(0) не пройдёт, потому что там вызывается sprintf(), а она должна куда-то параметр диска сувать - а т.к. у тебя в строчке теперь не будет "%c" - то из-за засунутого в стэк и неиспользуемого адреса буквы диска полезут глюки (я, как ты предлагаешь, делал на одной игре - получил, что называется, по морде Fatal Error'ом). (*улыбается*) В общем, нужен Dumper... сейчас думаю заняться геммором - запустить виртуальную машину - там запустить эту прогу и сдампить всю виртуальную машину (16 Мб) - может там найду собранный .EXE'шник... |
Siberian GRemlin |
![]()
Сообщение
#6
|
![]() Advanced Member ![]() ![]() ![]() Группа: CTPAX-X Сообщений: 537 Регистрация: 4-February 08 Пользователь №: 2 Спасибо сказали: 221 раз(а) ![]() |
Во-вторых, замена на ".\Data\MACAnodes.m3a"+Chr(0)+Chr(0) не пройдёт, потому что там вызывается sprintf(), а она должна куда-то параметр диска сувать - а т.к. у тебя в строчке теперь не будет "%c" - то из-за засунутого в стэк и неиспользуемого адреса буквы диска полезут глюки (я, как ты предлагаешь, делал на одной игре - получил, что называется, по морде Fatal Error'ом). (*улыбается*) ".\%cata\MACAnodes.m3a"+Chr(0) ![]() |
-=CHE@TER=- |
![]()
Сообщение
#7
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,360 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 313 раз(а) ![]() |
|
Siberian GRemlin |
![]()
Сообщение
#8
|
![]() Advanced Member ![]() ![]() ![]() Группа: CTPAX-X Сообщений: 537 Регистрация: 4-February 08 Пользователь №: 2 Спасибо сказали: 221 раз(а) ![]() |
3. Для английской версии есть лекарство или ты русскую исследуешь? Ты бы привёл ссылку (я найти не смог, например (что удивительно =) )) , возможно она бы помогла или подошла бы к русской версии. Насколько мне известно, на анг версии стоит защита Safedisc 2.30.031, а на русской похоже нет. |
jTommy |
![]()
Сообщение
#9
|
Наблюдающий ![]() ![]() ![]() Группа: CTPAX-X Сообщений: 197 Регистрация: 4-February 08 Из: деревня Москва Пользователь №: 6 Спасибо сказали: 19 раз(а) ![]() |
Ты бы привёл ссылку (я найти не смог, например (что удивительно =) )) , возможно она бы помогла или подошла бы к русской версии. Насколько мне известно, на анг версии стоит защита Safedisc 2.30.031, а на русской похоже нет. Лекарство я в локальной сети нашел, вот оно: http://www.sendspace.com/file/2pkfrt (а в сети, как ни странно, нету). Для версии 1.00 лекарство не корректное(не все проверки убраны), для версии 1.22 нормальное. Патч до версии 1.22 ставить не обязательно. P.S.: защита там, какая-то Cdilla2. |
-=CHE@TER=- |
![]()
Сообщение
#10
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,360 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 313 раз(а) ![]() |
Лекарство я в локальной сети нашел, вот оно: http://www.sendspace.com/file/2pkfrt (а в сети, как ни странно, нету). Для версии 1.00 лекарство не корректное(не все проверки убраны), для версии 1.22 нормальное. Патч до версии 1.22 ставить не обязательно. P.S.: защита там, какая-то Cdilla2. Спасибо! Посмотрел оба .EXE - это собранные и распакованные .EXE файлы. В начале у каждого из них торчит сигнатура "BoG_ *90.0&!!" - это значит, что перед тем как лишиться девственности это был действительно "SafeDisk" (SafeDisc FAQs / SafeDisc FAQ DMCA). Что-то мне подсказывает, что в руссифицированной Russobit-M версии его нет, иначе он бы банально не сработал с надувательством через subst. Такое ощущение, что Russobit-M решили выпендриться и поставить свою защиту... |
jTommy |
![]()
Сообщение
#11
|
Наблюдающий ![]() ![]() ![]() Группа: CTPAX-X Сообщений: 197 Регистрация: 4-February 08 Из: деревня Москва Пользователь №: 6 Спасибо сказали: 19 раз(а) ![]() |
Попробуй подставь в игрушку англ. exe-шники, вдруг сработает
|
Siberian GRemlin |
![]()
Сообщение
#12
|
![]() Advanced Member ![]() ![]() ![]() Группа: CTPAX-X Сообщений: 537 Регистрация: 4-February 08 Пользователь №: 2 Спасибо сказали: 221 раз(а) ![]() |
Прочитал на одном форуме, что английский No-CD подходит к русской версии только при полной установке игры.
|
-=CHE@TER=- |
![]()
Сообщение
#13
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,360 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 313 раз(а) ![]() |
Прочитал на одном форуме, что английский 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 файлы выложу - они меньше занимают и оставляют все как было - на русском. (*улыбается*) |
-=CHE@TER=- |
![]()
Сообщение
#14
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,360 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 313 раз(а) ![]() |
Понимаю, что 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 Тогда, по идее, после распаковки программа сама себя пропатчит этим No-CD в памяти.C6 05 A4 43 46 00 00; mov b,[004643A4], 000h E9 DF 4F 41 00; jmp OEP |
![]() ![]() |
Упрощённая версия | Сейчас: 10th September 2024 - 03:31 |