![]() |
eXeL@B —› Вопросы новичков —› Изменение функции в EXE |
Посл.ответ | Сообщение |
|
Создано: 06 февраля 2019 17:08 · Поправил: Xenon · Личное сообщение · #1 Приветствую ![]() Ситуация следующая: Занимаюсь портингом игры с консоли Xbox 360 на ПК. Занимаюсь, потому что издатель убил проект на ПК-версии, а именно - нет дополнительного контента (автомобили и трассы). Понял всю механику игры, как работает звук, как работают шейдеры, как происходит наложение текстур и прочее, подробности ни к чему. Столкнулся с такой проблемой: на консоли порядок байтов - BigEndian, на ПК - Little endian. Но на положение таблиц в файле это не влияет. Меняются местами только первые два байта, потом вторые два байта и т.д. в таблице. К примеру: 1. Cтроение 3D файла консольной версии. Любой формат трехмерного файла - это таблицы. Таблицы вершин, таблицы полигонов, координаты текстур. И эти таблицы идут по порядку. На консоли: 1-таблица полигонов, 2 - таблица вершин, 3 - таблица текстурных координат. 2. На ПК : 1-таблица текстурных координат, 2 - таблица вершин, 3 - таблица полигонов. Грубо говоря, файл записан задом наперед и порядок байтов иной Есть ли возможность изменить функцию чтения этого файла в исполняемом EXE? И как ее найти? P.S. Игра защищена SecuROM 2010 года ![]() |
|
Создано: 06 февраля 2019 18:08 · Личное сообщение · #2 |
|
Создано: 06 февраля 2019 18:11 · Поправил: Xenon · Личное сообщение · #3 VOLKOFF пишет: Скорее всего чтение происходит из разных мест и возможны разные хардкорные хаки, тут имхо более грамотным подходом будет сконвертить сами файлы, пройтись скриптом по директроиям игры и пересобрать в "правильном" порядке. Я так и сделал, но для обработки одного файла у меня уходит неделя. А файлов всего около 600. Спасибо за ответ) ![]() |
|
Создано: 06 февраля 2019 18:17 · Личное сообщение · #4 |
|
Создано: 06 февраля 2019 18:29 · Личное сообщение · #5 VOLKOFF пишет: Вы их руками что ли конвертите? На xentax-е точно пробегали готовые конверторы иксбоксовских файлов для пк. Свапаю байты, и меняю положение. Но смещение таблиц в файле прописывается внутри самого файла и это тоже редактирую. Ну и одна модель автомобиля состоит из 4 файлов - сама модель, текстуры, шейдеры и шейдерные инстансы. А сам автомобиль это двери, крылья, бампера, стеклянные элементы, колеса. И под каждый элемент отдельный шейдер. И это все вместе нужно редактировать. Инфа в hex-редакторе не очевидна и поэтому уходит много времени. Была мысль заморочится и написать на питоне 3d viewer, но пока все смутно))) На xentax`e много полезной инфы, оттуда и почерпнул знания))) ![]() |
|
Создано: 06 февраля 2019 18:29 · Поправил: Jonny · Личное сообщение · #6 Xenon пишет: P.S. Игра защищена SecuROM 2010 года Ты программу не распаковал что ли? Xenon пишет: Есть ли возможность изменить функцию чтения этого файла в исполняемом EXE? И как ее найти? Если распаковал, ищещь в дизассемблере эту функцию, запоминаешь ее адрес, создаешь свою функцию чтения под сигнатуру подменяемой функции, собираешь в длл либо blob, связываешь свой код с exe, чтобы вместо той функции вызывалась твоя. Связать свой код можно как минимум двумя способами - статическое - добавляешь в exe новую секцию, заливаешь в секцию свой блоб, пренаправляешь подменяемую функцию на твою с помощью jmp. динамическое - подгрузка своего кода во время выполнения. ![]() |
|
Создано: 06 февраля 2019 18:40 · Поправил: Xenon · Личное сообщение · #7 Jonny пишет: Ты программу не распаковал что ли? Нет. На просторах интернета лежит две кряктуные версии: 1. Такой же размер исполняемого файла, что и у лицензионного, но вызывается изменная dll 2. Размер исполняемого файла уменьшен на 7мб (думаю удален секуромовский мусор и прочее, что запутывает взлом) и вызывается изменная dll Добавлено спустя 5 минут Jonny пишет: Ты программу не распаковал что ли? Я не думаю, что экзешник запакован. Ну или чайник в этом всем, ибо часть кода, которая отвечает за путь к файлу легко просматривается хекс редактором, ну или же эта часть не запакована, как и в крякнутой версии так и в лицензионной. Хекс вид во вложении ![]() ![]() |
|
Создано: 06 февраля 2019 19:06 · Личное сообщение · #8 |
|
Создано: 06 февраля 2019 19:28 · Личное сообщение · #9 |
|
Создано: 06 февраля 2019 19:32 · Личное сообщение · #10 |
|
Создано: 06 февраля 2019 19:34 · Личное сообщение · #11 f13nd пишет: Страшно представить на чем и как ты этот конвертер написал. в хекс редакторе переставлял данные и правил. Ничего не писал Единственное что я сделал с экзешником, это заставил его читать файлы с жестого диска. То есть, лежал файл в сжатом архиве (чтобы такие как я не модифицировали игру) я его распаковывал в папку с экзешником и уже прописывал в экзешнике путь к этому файлу. Но это совсем просто ![]() |
|
Создано: 06 февраля 2019 20:06 · Личное сообщение · #12 Xenon пишет: в хекс редакторе переставлял данные и правил. Ничего не писал Понятно. Починка кода в программе это всегда кот в мешке. Никогда нельзя заранее знать чем окажется то, что представляется как "функция чтения структур файла", сколько времени займет все копание в программе и переделка. Рациональней всего вообще туда не лезть и таки сделать конвертер. ----- 2 оттенка серого ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Изменение функции в EXE |