 |
Цитата: |
 |
|
|
|
|
|
|
cvgs, а подробно сможешь рассказать новичку на примере одной игры, что с распакованным LBA образом делать, чтобы игра в сборнике работала? Я про LBA зависимые игры Barbie explorer, Dino crisis, Disney's Atlantis: The lost empire, Rainbow six: Rogue spear, Rainbow six: Lone wolf, Xena: Warrior princess.
|
|
 |
|
 |
|
Если игры выходили на сборниках и запускались, ты можешь банально сравнить оригинальный
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. В других играх может быть все по-другому.