Модификация игры Метро Исход |
Здравствуйте, гость ( Авторизация | Регистрация )
Модификация игры Метро Исход |
02.03.2019, 15:25
Сообщение
#21
|
|
Геймер Репутация: 86 Группа: Участник Сообщений: 128 Награды: 4 Регистрация: 05.05.2012 |
abramcumner, если все срастется с чтением ресурсов из папки, то в конечном итоге хотелось бы иметь возможность модифицировать игру по следующей схеме:
- распаковка игровых ресурсов в папку - модификация ресурсов с возможностью сразу запустить игру и проверить результат - запаковка ресурсов обратно Вот с последним пунктом неясно пока, либо все ресурсы с учетом изменений паковать как было в оригинале, либо только измененные ресурсы в патчи. Сообщение отредактировал autistic - 02.03.2019, 15:25 -------------------- nop
|
 
|
|
|
|
02.03.2019, 15:33
Сообщение
#22
|
|
Игровое Воплощение Репутация: 394 Группа: Участник Сообщений: 4791 Награды: 4 Регистрация: 27.04.2011 |
abramcumner, если все срастется с чтением ресурсов из папки, По идее не должно срастись. Иначе я не понимаю, чем денува вообще занимается? И почему еще не сдампили в нормальный кряк. Цитата Вот с последним пунктом неясно пока, либо все ресурсы с учетом изменений паковать как было в оригинале, либо только измененные ресурсы в патчи. В оригинале не было паковки всех ресурсов, только измененные. Вот мод на 2033: Запакован только измененный level.bin Сообщение отредактировал abramcumner - 02.03.2019, 15:35 |
 
|
|
03.03.2019, 14:43
Сообщение
#23
|
|
Геймер Репутация: 86 Группа: Участник Сообщений: 128 Награды: 4 Регистрация: 05.05.2012 |
Почитал что за зверь этот Denuvo, оказывается это
Попробую реализовать обход этой ф-ии при помощи инструкции JMP и вызвать свою ф-ию, которая запишет в лог имя файла, а потом откроет его и вернет дескриптор. Если получится, значит можно двигаться дальше. -------------------- nop
|
 
|
|
11.03.2019, 00:17
Сообщение
#24
|
|
Геймер Репутация: 86 Группа: Участник Сообщений: 128 Награды: 4 Регистрация: 05.05.2012 |
Подсунул свою функцию открытия файлов архивов, она вызывается несколько раз, а потом игра крешится где-то в другом месте. Непонятно, то ли денува виновата, то ли память побилась. Попробую написать небольшое тестовое приложение и перехватить его ф-ию, если сработает, значит что-то и впрямь нечисто с этой денувой.
На всякий случай выложу Краткая инструкция по сборке Краткая инструкция по отладке Путь к папке с игрой для запуска под отладчиком задается макросом GAME_DIRECTORY в файле common.h В свойствах проекта MetroExodusLauncher необходимо в качестве рабочей директории прописать путь к папке в которую собираются бинари Чтобы сработала точка останова на внедренной ф-ии, необходимо установить ее на 82 строке в dllmain.cpp. Затем установить точку останова на строку 288 в winmain.cpp запустить приложение под отладчиком и встать на нее. Далее нужно подцепиться отладчиком к процессу MetroExodus.exe и продолжить выполнение вплоть до срабатывания точки останова в dllmain.cpp Если в процессе отладки что-то пошло не так, значит вы долго возились и истекло время таймаута, оно задается макросом TIMEOUT в common.h Что еще Поиск нужной ф-ии для подмены осуществляется ф-ией FindTargetFunctionAddress в адресном пространстве, в которое загружен MetroExodus.exe. Ф-ия осуществляет поиск по первым нескольким байтам машинного кода нужной ф-ии. Чтобы получить указатель на какую-то другую функцию нужно определить и по аналогии с существующим кодом захардкодить ее первые несколько байт Сообщение отредактировал autistic - 11.03.2019, 00:19 -------------------- nop
|
 
|
|
11.03.2019, 07:33
Сообщение
#25
|
|
BFG9000 owner
Половина землекопа Репутация: 247 Группа: Припаркованный аккаунт Сообщений: 1813 Награды: 3 Регистрация: 30.03.2010 |
Могу посоветовать обратить внимание на этот хукер -
Используется для многих патчеров / фиксеров. В частности у нас в Silent Hill Widescreen Fix -------------------- Hello worlds!
|
 
|
|
11.03.2019, 15:17
Сообщение
#26
|
|
Геймер Репутация: 86 Группа: Участник Сообщений: 128 Награды: 4 Регистрация: 05.05.2012 |
Могу посоветовать обратить внимание на этот хукер - Спасибо. Бегло просмотрел исходники, там вроде бы основной функционал нацелен на работу с таблицей экспорта из PE файла, в нашем случае от этого проку мало т.к. ф-ии которые хотелось бы похукать конечно же в таблицу экспорта не попали. Ну и кроме того, есть подозрение, что в x64 битном адресном пространстве этот патчер работать не будет Код // Set HotPatch hook *patch_address = 0xE9; // jmp (4-byte relative) *((DWORD *)(patch_address + 1)) = (DWORD)hookproc - (DWORD)patch_address - 5; // relative address *((WORD *)apiproc) = 0xF9EB; // should be atomic write (jmp $-5) Существует официальная библиотека от Microsoft которая позволяет вешать хуки, думаю ее опробовать и сравнить результат Сообщение отредактировал autistic - 11.03.2019, 15:21 -------------------- nop
|
 
|
|
11.03.2019, 15:25
Сообщение
#27
|
|
Игровое Воплощение Репутация: 394 Группа: Участник Сообщений: 4791 Награды: 4 Регистрация: 27.04.2011 |
Опенсорс. Прикольно... Сообщение отредактировал abramcumner - 11.03.2019, 15:27 |
 
|
|
11.03.2019, 15:31
Сообщение
#28
|
|
Геймер Репутация: 86 Группа: Участник Сообщений: 128 Награды: 4 Регистрация: 05.05.2012 |
х86 на ластлайте работал отлично. Ну там как повезет, если смещение между адресами меньше чем 2^32 - считай повезло -------------------- nop
|
 
|
|
11.03.2019, 15:53
Сообщение
#29
|
|
Игровое Воплощение Репутация: 394 Группа: Участник Сообщений: 4791 Награды: 4 Регистрация: 27.04.2011 |
На х86 всегда везет, там смещений больше 2^32 не бывает
|
 
|
|
11.03.2019, 15:58
Сообщение
#30
|
|
Геймер Репутация: 86 Группа: Участник Сообщений: 128 Награды: 4 Регистрация: 05.05.2012 |
А, ну для х86 приложения - да, Я думал речь про джамп по 32 разрядному смещению в х64 приложениях. Оно иногда срабатывает, иногда нет, в зависимости от
-------------------- nop
|
 
|
|
12.03.2019, 16:01
Сообщение
#31
|
|
Геймер Репутация: 86 Группа: Участник Сообщений: 128 Награды: 4 Регистрация: 05.05.2012 |
Кажется понял что произошло. Т.к. хук устанавливается не просто на ф-ию, а на метод класса-наследника, похоже я сломал таблицу виртуальных ф-ий при присвоениии результата членам класса. Проверю позже.
Немного теории тут: -------------------- nop
|
 
|
|
12.03.2019, 18:32
Сообщение
#32
|
|
Доктор Игровых Наук Репутация: 544 Группа: Участник Сообщений: 3657 Награды: 9 Регистрация: 12.07.2007 |
А в форточках есть способ делать аналоги линуксовых pipe и filedescriptor в фс?
|
 
|
|
12.03.2019, 21:38
Сообщение
#33
|
|
Геймер Репутация: 86 Группа: Участник Сообщений: 128 Награды: 4 Регистрация: 05.05.2012 |
К сожалению никакой виртуальной таблицей там и не пахнет, дело в чем-то другом
А в форточках есть способ делать аналоги линуксовых pipe Ну каналы связи это способ межпроцессного (в том числе) взаимодействия не только в линуксах, эта концепция существует независимо. и filedescriptor в фс? -------------------- nop
|
 
|
|
12.03.2019, 21:42
Сообщение
#34
|
|
Доктор Игровых Наук Репутация: 544 Группа: Участник Сообщений: 3657 Награды: 9 Регистрация: 12.07.2007 |
autistic, тогда можно дескриптор\пайп сунуть на архив игры и написать маленькую прослойку проксирующую чтение файла. Будет гораздо проще разобрать как чтение файла происходит и соответственно понять структуры.
|
 
|
|
12.03.2019, 21:50
Сообщение
#35
|
|
Геймер Репутация: 86 Группа: Участник Сообщений: 128 Награды: 4 Регистрация: 05.05.2012 |
можно дескриптор\пайп сунуть на архив игры и написать маленькую прослойку проксирующую чтение файла. Будет гораздо проще разобрать как чтение файла происходит и соответственно понять структуры. Не очень понятно о чем конкретно идет речь, объясни подробней, пожалуйста. А общая суть понятна, нечто подобное (прослойку) я и пытаюсь реализовать, чтобы упростить разбор форматов и абстрагироваться от виртуальной файловой системы. -------------------- nop
|
 
|
|
12.03.2019, 22:28
Сообщение
#36
|
|
. Репутация: 750 Группа: Участник Сообщений: 7072 Награды: 4 Регистрация: 30.07.2010 |
autistic, а можно эту твою штуковину MinGW собрать, или студия онли?
|
 
|
|
13.03.2019, 09:26
Сообщение
#37
|
|
Геймер Репутация: 86 Группа: Участник Сообщений: 128 Награды: 4 Регистрация: 05.05.2012 |
Modera, собрать-то может и можно, но будет ли работать? В комплекте с MinGW идет своя библиотека поддержки языка, которая
Там кстати полно разных сервис паков к ней, возможно хук не работает именно потому что разработчики используют не самый свежий СП, а я накатил самый последний. Надо пробовать с различными СП, я только в выходные смогу. Сообщение отредактировал autistic - 13.03.2019, 09:31 -------------------- nop
|
 
|
|
13.03.2019, 15:29
Сообщение
#38
|
|
. Репутация: 750 Группа: Участник Сообщений: 7072 Награды: 4 Регистрация: 30.07.2010 |
autistic, современный MinGW, который называется MinGW-w64 как-раз использует msvcrt.dll, это студия использует всякие там api-ms-win-блаблабла.dll.
Всё таки собрал, что-то оно у меня не находило функцию по начальным байтам. Вообще не совсем понял зачем так делать, можно же адрес функции получить гораздо проще LPBYTE(GetModuleHandle("metroexodus.exe"))+смещение_функции_относительно_imagebase. Для эксперимента сделал вместо подмены функции открытия файла обёртку над функцией открытия скрипта, которая печатает имя скрипта в консоль и вызывает оригинальную функцию. Вполне себе работает, даже меню загрузилось. |
 
|
|
13.03.2019, 16:03
Сообщение
#39
|
|
Геймер Репутация: 86 Группа: Участник Сообщений: 128 Награды: 4 Регистрация: 05.05.2012 |
Всё таки собрал, что-то оно у меня не находило функцию по начальным байтам. Вообще не совсем понял зачем так делать Странно, должно находить. Сделал так из лени, чтоб переделать когда-нибудь потом, неохота было смещение высчитывать. Для эксперимента сделал вместо подмены функции открытия файла обёртку над функцией открытия скрипта, которая печатает имя скрипта в консоль и вызывает оригинальную функцию. Вполне себе работает, даже меню загрузилось. Имхо, оно потому и не крешится, что оригинальную ф-ию позвал. А вот если открыть при помощи _open и вернуть дескриптор будет работать? Изначальная ф-ия имеется в виду, ее легко найти по брейкпоинту на NtCreateFile Сообщение отредактировал autistic - 13.03.2019, 16:12 -------------------- nop
|
 
|
|
13.03.2019, 16:37
Сообщение
#40
|
|
BFG9000 owner
Половина землекопа Репутация: 247 Группа: Припаркованный аккаунт Сообщений: 1813 Награды: 3 Регистрация: 30.03.2010 |
печатает имя скрипта в консоль Интересно что на вашем скрине куча файлов в папке "content/scripts" лежит, в то время как я в архиве только 2 файлика вижу "content/scripts/material.bin" бы мне очень пригодился -------------------- Hello worlds!
|
 
|
|
Текстовая версия | Сейчас: 28.04.2024, 05:13 |