PSPx форум

PSPx форум (https://www.pspx.ru/forum/index.php)
-   Русификация игр для PS Vita (https://www.pspx.ru/forum/forumdisplay.php?f=400)
-   -   Поиск указателей на текст в eboot.bin на примере Hotline Miami 2 (https://www.pspx.ru/forum/showthread.php?t=106270)

lupus 31.08.2016 10:23

Поиск указателей на текст в eboot.bin на примере Hotline Miami 2
 
В разделе для psp Эрик подробно расписывал, как посчитать относительный адрес смещния текстовой строки, зная абсолютный и найти казатель на него.
Интересует аналогичный алгоритм поиска для витовских ибутов с целью перевести некоторые строки, которые туда зашиты.
Для примера можно взять eboot.bin из Hotline Miami 2, которую я русифицировал:
https://mega.nz/#F!E4MAnQAT!yCyQQK2kwzUI_PK1nDIWfQ

Хотелось бы доработать неполный авторский перевод, но для этого, как раз и нужно править eboot, а учитывая, что русский текст будет в utf-8, перемещать строки придётся в пустое место, т.к. их длина получится минимум в 2 раза больше, чем в оригинале.

Для наглядности предлагаю взять строки:
New game
Continue
Options
поскольку они встречаются в самом начале.

Также интересует, какой диапозон адресов можно использовать под текст, если строки могут лежать где угодно, то оптимальным было бы их переносить в область, где есть большие куски 0x00 и собирать в одном месте.

ErikPshat 31.08.2016 20:29

lupus, пока заметил, что каждая новая секция начинается с заголовка Magik: 2D992982 и в следующей строке 2FF8FFFF

Пока башка не варит, ночью посмотрю - темнота, тишина и луна располагают :)

lupus 31.08.2016 21:13

Я пытался простым дедовским способом искать, без декомпиляции - зная абсолютное смещение, вычислить относительное таким макаром:
Код:

адрес абсолютного смещения строки -минус- размер заголовка SCE (0xA0) -минус-  размер заголовка ELF (0x60)
от полученного результата и отталкивался
Код:

NEW GAME        0x0136e3a0 - 0x100        0x0136E29F
Эту последовательность и пытался найти, учитывая Big Endian, но бес толку :/
Не уверен, что данный метод здесь применим.

Теоретически, можно было бы написать софтинку, которая сама будет искать указатели, зная адреса начала 2+ строк, по разнице их смещений, но я совсем не умею кодить :/

ErikPshat 31.08.2016 22:12

Цитата:

Сообщение от lupus (Сообщение 1104957)
размер заголовка ELF (0x60)

Обрати внимание, что в eboot.bin находится общий ELF-файл, внутри которого лежит ещё один ELF-файл.
Вообще размер заголовка записан по адресу 0х38 в ELF-файле, который начинается по адресу 0xF60, а там я вижу размер заголовка 0x80.

Цитата:

Сообщение от lupus (Сообщение 1104957)
учитывая Big Endian

По-моему Little Endian (задом наперёд).

lupus 31.08.2016 23:08

Отрезал всё лишнее пред первым эльфом, считаю

Код:

NEW GAME        0x0136d3a0 - 80        0136D320
CONTINUE        0x0136d3ac
EDITOR                0x0136d3b8
OPTIONS                0x0136d3c0
QUIT GAME        0x0136d3c8

Тоже, без толку. Спасибо, что поправил, ищу последовательность в обратном порядке.

riku.kh3 01.09.2016 11:15

С использованием real-time debugger'а в ассемблере такие вещи надо искать. Может там поинтеры, может таблица, а может вообще в инструкцию вшита позиция строки.

lupus 01.09.2016 15:29

riku.kh3, т.е. в текущей ситуации это не реально?

riku.kh3 01.09.2016 16:02

От игры зависит. Если текста очень много и он идет цельным блоком, то скорее всего должна быть таблица. Можно попробовать визуально в хексе поискать нарастающие 4-байтные значения, сравнивая разницу значений с расстояниями между строками.

Такие строки, как NEW GAME может быть трудно найти, если поинтер или инструкция указывающая на нее просто рандомно лежит далеко от таблицы.

Конкретно в этом случае IDA Pro рефференс к этой строке NEW GAME не находит в коде, значит только дебаггером через брейкпоинт отлавливать (нужен DevKit и софт).

lupus 02.09.2016 23:50

по адресу 0x136e264 начинается блок текста, перед ним, предположительно, лежит пачка указателей по 4 байта, теперь понять бы, откуда начинать отсчёт и какой размер всего этого блока (указатели + текст), тогда, по идее, можно было бы пересчитать начало строк после правки.
Пока не пойму, оно ли это...

ErikPshat 03.09.2016 06:54

Цитата:

Сообщение от lupus (Сообщение 1105028)
по адресу 0x136e264 начинается блок текста

Что-то с первым ELF считал и со второго ELF считал, но никак не попал в начало текста.

Вообщем текст идёт блоками.
Каждый текстовой блок начинается с хедера 2D992982 и следом приклеивается следующий текстовой блок с таким же хедером, прямо после последнего слова в предыдущем блоке. И так далее.

Может пригодится... Если отрезать первый заголовок ELF, то в позициях:
  • 0x18 - записана позиция 012F1144 (без учёта размера заголовка) на начало блока системных модулей, начинающаяся с названия HotlineMiami2.
  • 0х38 - размер заголовка.
  • 0х44 - записан размер 01389E98 тела ELF-файла (без учёта заголовка) и заканчивается буквами DDDD.
  • 0х58 - записана позиция 0138A080 (с учётом заголовка). Здесь лежит RAW-картинка(и) однозначно.
  • В позиции 0х01395FC8 - записан хейдер PSP2 - видимо это какой-то файл.
А теперь ещё интереснее...
  • Если пройти в секцию HotlineMiami2, то сразу можно увидеть смещения 012F11A0, 012F11C0, 012F11D8, 012F1144 - это указатели на позиции модулей.
  • А вот после FFFFFFFF, чуть далее идут немного по другому записанные смещения: 822F1A78, 822F1A88, 822F1A98, 822F1C00, 822F2148...
  • То есть, можно заметить, что первая цифра адресации 01 сменилась на 82.
Поэтому, адрес позиции, скорее всего, записывается через 82, что и надо искать.

Yoti 03.09.2016 11:04

Цитата:

Сообщение от lupus (Сообщение 1105028)
лежит пачка указателей по 4 байта
<…>
Пока не пойму, оно ли это...

Меняй значение на 1 в большую сторону, может строка со второй буквы начинаться будет?..

lupus 03.09.2016 11:05

По разниуе смещений посчитать бы как-то. Руками муторно...

lupus 04.09.2016 23:17

Верно ли понимаю, что при помощи RinCheat http://wololo.net/talk/viewtopic.php?f=116&t=46982 можно сдампить содержимое озу и поможет ли это в поиске указателей?

ErikPshat 01.10.2016 21:58

Цитата:

Сообщение от lupus (Сообщение 1105100)
Верно ли понимаю, что при помощи RinCheat http://wololo.net/talk/viewtopic.php?f=116&t=46982 можно сдампить содержимое озу и поможет ли это в поиске указателей?

Ссылка для нас более правильная ;) https://www.pspx.ru/forum/showthread.php?t=106301

Ну так ты выяснил, можно ли сдампить содержимое ОЗУ?

lupus 02.10.2016 03:18

Ещё не пробовал. Хочу другие проекты (перевод tales from space и перенос русика shovel knight) до ума довести, прежде чем здесь в дебри лезть.

Yoti 14.09.2018 13:18

С тех пор у нас появился правильный декриптор fagdec и потихоньку пилится эмулятор vita3k. Думаю, ещё через пару лет доделаем)

Edit#1: https://github.com/CelesteBlue-dev/P...iler-mod/build


Текущее время: 17:27. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot
PSPx Forum - Сообщество фанатов игровых консолей.