Person Of The Community
Регистрация: 17.03.2024
Адрес: Sled V istorii
Пол: Мужской 
Сообщений: 529
|
 |
Цитата: |
 |
|
|
|
|
|
|
Если игры выходили на сборниках и запускались, ты можешь банально сравнить оригинальный EXE с извлеченным из сборника, чтобы найти хотя бы местоположение таблицы. А потом посмотришь, как оно устроено. Вот пост, в котором я нашел LBA у игры Bugs Bunny - Lost in Time - тоже LBA-зависимой. Не смотрел пока, как с другими играми, но в случае с этой получается, что в EXE-шнике были прописаны значения в формате Little Endian (это когда пары байтов перевернуты - на картинке видно) в шестнадцатеричном (Hex) формате, которые, при конвертации в десятичный (Dec) показывают значение, совпадающее со списком LBA и файлов, на которые они указывают, который справа на картинке извлечен через IsoBuster. В UltraISO также можно глянуть столбик LBA. А утилитой HexCmp2 можно сравнить два файла и выполнить поиск местоположения различающихся данных.
Весь смысл в том, чтобы:- Найти участок в файле с LBA путем сравнения с другим EXE из сборника.
- Узнать десятичное значение каждого адреса
- Найти такие же адреса в столбике LBA в UltraISO или IsoBuster и посмотреть, на какой файл в столбике "Имя файла" они указывают.
- Самостоятельно составить в Блокноте или Excel таблицу вида "| LBA-адрес | Имя файла |", прописав в первом соответственно LBA, а во втором имя файла, сверяясь с UltraISO или IsoBuster. Это нужно для того, чтобы понять последовательность файлов (то есть, игра, дергая, скажем, за первый LBA, ожидает получить файл, на который этот адрес ссылался в оригинальном образе, а если там окажется другой файл, это будет сродни импорту картинки поверх EXE-файла, то есть, игра получит не те данные, которые ожидает, поэтому нам нужен этот список). Главное его случайно не отсортировать - последовательность адресов должна быть именно такой, как в оригинальном EXE.
- Собрать новый образ с другой игрой, скажем, утилитой ViToTiV'а.
- Открыть новоиспеченный образ в IsoBuster или UltraISO и узнать новые LBA-адреса.
- Создаем в нашем списке еще один столбик с новыми LBA и повторяем пункт 3, только на этот раз копируем LBA-адреса из нового образа. Обязательно также сверяемся с именем файла, к которому этот LBA относится.
- Когда список готов, надо извлечь EXE из нового образа, перейти к оффсету, где расположены LBA, и прописать в те места, где были старые LBA, новые LBA из последнего столбика в том же порядке в шестнадцатеричном формате. HxD для этого подходит очень хорошо: можно просто выделить нужное количество байт и в поле UInt32 прописать десятичное значение, убедившись что внизу справа выбрано "Little Endian" - Hex-редактор сам пропишет значение в шестнадцатеричном формате.
- Последнее: сохраняем новые значения в 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 | Имя файла | 24 | FILE1.DAT | 5680 | FILE3.DAT | 233 | FILE2.DAT |
И мы понимаем, что, исходя из последовательности декодированных в Dec адресов и сопоставленных с ними файлов, у нас последовательность идет: 1 файл, 3 файл, 2 файл (а без этого списка мы бы этого не узнали)
Потом, допустим, мы пересобрали образ, и в нем теперь LBA совсем другие:
FILE1.DAT (LBA 48)
FILE2.DAT (LBA 512)
FILE3.DAT (LBA 4668)
Создаем новый столбик в Excel и пишем в него новые LBA:
LBA | Имя файла | Новые LBA | 24 | FILE1.DAT | 48 | 5680 | FILE3.DAT | 4668 | 233 | FILE2.DAT | 512 |
Теперь смотри: те LBA, что помечены красным - это те, которые находятся в оригинальном EXE, а те которые синим - в новоиспеченном образе. Игра не загружается, потому что пытается искать файлы по красным значениям, а надо, чтобы искала по синим. И вот эти синие значения в той же последовательности надо прописать в EXE-файле, который впоследствии надо будет импортировать в новый образ образ через CDmage.
Для этого идем в HxD, выделяем 4-байтный блок со старым адресом, который в строке "UInt32" декодируется как "24" и меняем его на "48", согласно нашему списку. Следом находим и выделяем значение, которое декодируется как "5680" и меняем его на "4668" (это все условные цифры чисто для примера, чтобы понятна была логика).
Потом сохраняем EXE и импортируем в новый образ. Таким образом, значения в EXE будут совпадать с реальными адресами в образе и игра будет запускаться.
P. S. Это я все писал чисто на примере Bugs Bunny - Lost in Time. В других играх может быть все по-другому.
|
|
 |
|
 |
|
 Вот если бы так все отвечали, вместо того, чтобы воду лить )
|