![]() |
Utility for SONY PlayStation Утилиты и программы для работы с играми SONY PlayStation |
Реклама | |
![]() |
|
Опции темы |
![]() |
#1 |
Person Of The Community
![]() Регистрация: 30.06.2015
Пол: Мужской
![]()
Сообщений: 7
![]() ![]() ![]() ![]() ![]() ![]() |
Всем привет! Сделал я этот редактор достаточно давно, но никак не было времени выложить. Собственно, зачем он так нужен? Как-то я наткнулся на тему, где чел выложил сборник с озвучкой от Фаргуса и текстом от Paradox. Я подумал, почему текст от Фаргуса тоже не впихнул.
А дело вот в чём. В .mlt файлах есть контрольная сумма, и если поменять хоть 1 байт в тексте, то игра тупо не запустится (PSX) или запустится, но без текста (ПК). Примечательно, что никто из фанатов никогда не согласится передать вам исходники своих тулз, как будто это у них негласное правило. Что ж, с удовольствием нарушу его ![]() Сорцы и бинарники доступны на GitHub: В принципе, это всё. Под спойлером будут технические детали ![]() Нажмите
Чтобы получить возможность изменять текст, есть 2 варианта: 1. Как-то узнать алгоритм вычисления контрольной суммы. 2. Найти эту проверку в исполняемом файле и затереть её Сначала я хотел пойти по более лёгкому пути (2 вариант), но PSX версия отказывалась запускаться на эмуляторе. Вешалась после заставки. Мне ничего не оставалось, кроме как искать алгоритм там, ведь я хотел сделать универсальный редактор. Запускаем игру, подходим к уровню и в x64dbg подключаемся к SheepD3D.exe. Нас интересует функция доступа к файлу CreateFileA. Ставим на неё брейкпоинт, переходим в игру и заходим на уровень. Сработает бряк, в отладчике будет виден полный путь к файлу. Жмём F9 до тех пор, пока не появится .mlt файл. После этого ставим бряки на ReadFile, после срабатывания переходим по адресу в регистре ESP и видим, что сначала читается 4 байта, затем 8, снова 4 и, наконец, всё остальное. ![]() После последнего чтения заходим в каждую функцию. Задача -- найти цикл, в котором считается контрольная сумма. После некоторых поисков я попал в этот длинный цикл и вот она та самая функция: ![]() Как оказалось, это -- простой CRC32, только с изменённым полиномом. Я не стал искать, где генерируется таблица, а просто выдрал её из памяти и вставил в исходники редактора. Ещё спустя некоторое время оказалось, что структура файла такова: Код:
{ crc_header: u32, header: u8[8], crc_body: u32, body: u8[] } Также .war файлы тоже защищены контрольной суммой, но про них, как нибудь, в другой раз |
![]() |
![]() |
Эти 13 пользователи сказали Спасибо MG_REX за это сообщение: |
Реклама | |
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Looney Tunes: Sheep Raider [SLUS-01369] [Russian] [Paradox] | aNDROID999 | (PSX) Action/Adventure (RU) | 17 | 26.01.2025 23:00 |
Looney Tunes Sheep Raider [SLUS-01369] [Russian] [Vector] | weberbor | (PSX) Action/Adventure (RU) | 21 | 21.07.2024 00:28 |
Looney Tunes: Sheep Raider [SLUS-01369] [Russian] [Фаргус] | DruchaPucha | (PSX) Action/Adventure (RU) | 39 | 04.06.2023 17:48 |
Looney Tunes: Sheep Raider [SLUS-01369] | Aguia | (PSX) Action/Adventure (U/C) | 2 | 19.12.2022 13:23 |