Показать сообщение отдельно
Старый 19.07.2024, 20:59   #198
Person Of The Community
 
Аватар для Revers
 
Регистрация: 17.03.2024
Адрес: Sled V istorii
Пол: Мужской Мужской
Сообщений: 529
Revers репутация неоспоримаRevers репутация неоспоримаRevers репутация неоспоримаRevers репутация неоспоримаRevers репутация неоспоримаRevers репутация неоспоримаRevers репутация неоспоримаRevers репутация неоспоримаRevers репутация неоспоримаRevers репутация неоспоримаRevers репутация неоспорима
Россия / Russia Re: Ответ: Создание PSX Multi Game Disc (Сборка мультиигровок)             

Цитата:
Сообщение от SlavaVlasov Посмотреть сообщение
Если игры выходили на сборниках и запускались, ты можешь банально сравнить оригинальный EXE с извлеченным из сборника, чтобы найти хотя бы местоположение таблицы. А потом посмотришь, как оно устроено. Вот пост, в котором я нашел LBA у игры Bugs Bunny - Lost in Time - тоже LBA-зависимой. Не смотрел пока, как с другими играми, но в случае с этой получается, что в EXE-шнике были прописаны значения в формате Little Endian (это когда пары байтов перевернуты - на картинке видно) в шестнадцатеричном (Hex) формате, которые, при конвертации в десятичный (Dec) показывают значение, совпадающее со списком LBA и файлов, на которые они указывают, который справа на картинке извлечен через IsoBuster. В UltraISO также можно глянуть столбик LBA. А утилитой HexCmp2 можно сравнить два файла и выполнить поиск местоположения различающихся данных.

Весь смысл в том, чтобы:
  1. Найти участок в файле с LBA путем сравнения с другим EXE из сборника.
  2. Узнать десятичное значение каждого адреса
  3. Найти такие же адреса в столбике LBA в UltraISO или IsoBuster и посмотреть, на какой файл в столбике "Имя файла" они указывают.
  4. Самостоятельно составить в Блокноте или Excel таблицу вида "| LBA-адрес | Имя файла |", прописав в первом соответственно LBA, а во втором имя файла, сверяясь с UltraISO или IsoBuster. Это нужно для того, чтобы понять последовательность файлов (то есть, игра, дергая, скажем, за первый LBA, ожидает получить файл, на который этот адрес ссылался в оригинальном образе, а если там окажется другой файл, это будет сродни импорту картинки поверх EXE-файла, то есть, игра получит не те данные, которые ожидает, поэтому нам нужен этот список). Главное его случайно не отсортировать - последовательность адресов должна быть именно такой, как в оригинальном EXE.
  5. Собрать новый образ с другой игрой, скажем, утилитой ViToTiV'а.
  6. Открыть новоиспеченный образ в IsoBuster или UltraISO и узнать новые LBA-адреса.
  7. Создаем в нашем списке еще один столбик с новыми LBA и повторяем пункт 3, только на этот раз копируем LBA-адреса из нового образа. Обязательно также сверяемся с именем файла, к которому этот LBA относится.
  8. Когда список готов, надо извлечь EXE из нового образа, перейти к оффсету, где расположены LBA, и прописать в те места, где были старые LBA, новые LBA из последнего столбика в том же порядке в шестнадцатеричном формате. HxD для этого подходит очень хорошо: можно просто выделить нужное количество байт и в поле UInt32 прописать десятичное значение, убедившись что внизу справа выбрано "Little Endian" - Hex-редактор сам пропишет значение в шестнадцатеричном формате.
  9. Последнее: сохраняем новые значения в EXE, открываем новый образ в CDmage и импортируем в него только EXE-файл с нашими новыми LBA, которые указывают уже на реальные адреса в этом образе.
Приведу наглядный пример:
Допустим, в образе у нас есть файлы:
FILE1.DAT (LBA 24)
FILE2.DAT (LBA 233)
FILE3.DAT (LBA 5680)


Дальше сравниваем два EXE (оригинал и со сборника), чтобы найти местоположение LBA-адресов и находим, допустим, такие значения:

18 00 00 00
30 16 00 00
E9 00 00 00


Переводим их в десятичный вид:

Hex>Dec
18 00 00 00>24
30 16 00 00>5680
E9 00 00 00>233


Cоздаем новую таблицу в Excel и пишем в первом столбике LBA (взятый из EXE), во втором - имя файла, согласно списку в UltraISO
То есть, смотрим в UltraISO, а там у нас в столбике "Имя файла" написаны вот эти "FILE.DAT", а в столбике LBA - вот эти значения из скобок:
LBAИмя файла
24FILE1.DAT
5680FILE3.DAT
233FILE2.DAT

И мы понимаем, что, исходя из последовательности декодированных в Dec адресов и сопоставленных с ними файлов, у нас последовательность идет: 1 файл, 3 файл, 2 файл (а без этого списка мы бы этого не узнали)

Потом, допустим, мы пересобрали образ, и в нем теперь LBA совсем другие:

FILE1.DAT (LBA 48)
FILE2.DAT (LBA 512)
FILE3.DAT (LBA 4668)


Создаем новый столбик в Excel и пишем в него новые LBA:
LBAИмя файлаНовые LBA
24FILE1.DAT48
5680FILE3.DAT4668
233FILE2.DAT512


Теперь смотри: те LBA, что помечены красным - это те, которые находятся в оригинальном EXE, а те которые синим - в новоиспеченном образе. Игра не загружается, потому что пытается искать файлы по красным значениям, а надо, чтобы искала по синим. И вот эти синие значения в той же последовательности надо прописать в EXE-файле, который впоследствии надо будет импортировать в новый образ образ через CDmage.
Для этого идем в HxD, выделяем 4-байтный блок со старым адресом, который в строке "UInt32" декодируется как "24" и меняем его на "48", согласно нашему списку. Следом находим и выделяем значение, которое декодируется как "5680" и меняем его на "4668" (это все условные цифры чисто для примера, чтобы понятна была логика).


Потом сохраняем EXE и импортируем в новый образ. Таким образом, значения в EXE будут совпадать с реальными адресами в образе и игра будет запускаться.


P. S. Это я все писал чисто на примере Bugs Bunny - Lost in Time. В других играх может быть все по-другому.
Вот если бы так все отвечали, вместо того, чтобы воду лить )
__________________
Сборники ретро-игр на русском языке: PS2, GBA, SNES, SEGA: https://archive.org/search?query=cre...vergentFour%22
Revers вне форума  
Ответить с цитированием