Перейти к содержимому
Zone of Games Forum
H0R

.pak и .bin файлы из Re-Mission

Рекомендованные сообщения

Два файла, доминирующих в ресурсах игры, причём наиболее интересен именно Resource.PAK, поскольку в NavigationNetwork.BIN, по-видимому, содержится информация о вейпойнтах, расположении объектов и пр., но мало ли. Я пытался вскрыть оба в DragonUnPacker, MultiExCommander и ещё в некоторых, но они категорически отказались воспринимать файлы. Зато при просмотре в WinHex и даже WinRAR Viewer хорошо видны заголовки внутренних файлов, а в некоторых частях - и их содержимое (в основном .ini).

http://www.myfolder.ru/files/40929765

Есть предложения, как распаковывать/запаковывать?

Поделиться сообщением


Ссылка на сообщение

Разобрал структуру Resource.pak

Сначала идут блоки с информацией о файлах, размером 320 байт.

В данном случае этих блоков: 0x76 = 118

А потом сами данные файлов.

thumb.png

Распакованные файлы: Resource.pak_u.rar

------------- updated -------------

Написал скрипт для распаковки:

; ----------------------------------------------------------------------------; AutoIt Version: 3.3.8.1; Author: OLEGator (icq 221221576); Script Function: Extract files from *.pak container. Game Re-Mission; Script Date: 08.06.2014; ----------------------------------------------------------------------------$sScriptName = "Re-Mission pak extrctor v.0.1"$sPak_File = FileOpenDialog ($sScriptName, @ScriptDir, "Файлы контейнера (*.pak)|Все файлы(*.*)")If $sPak_File = "" Then Exit ; Если ничего не выбрали, выход.$hPak_File = FileOpen ($sPak_File, 16) ; открываем файл для чтения в бинарном режимеFileSetPos ($hPak_File, 4, 0) ; встаём на позицию чтения количества файлов$iFilesNum = _BinaryToInt32 (FileRead ($hPak_File, 4)) ; читаем количество файловFileSetPos ($hPak_File, 12, 0) ; встаём на позицию чтения блоков с данными о файлахFor $i=1 To $iFilesNum$bDataBlock = FileRead ($hPak_File, 320) ; читаем текущий блок в память$sFileName = Binary ("")$sFilePath = Binary ("")$iPathPos = ""For $j=1 To 320$bCurByte = BinaryMid ($bDataBlock, $j, 1)If $bCurByte <> Binary ("0x00") Then$sFileName &= $bCurByteElse$iPathPos = $j ; запоминаем позицию, 0x00ExitLoopEndIfNext$sFileName = BinaryToString ($sFileName, 1)For $j=$iPathPos+1 To 320$bCurByte = BinaryMid ($bDataBlock, $j, 1)If $bCurByte <> Binary ("0x00") Then$sFilePath &= $bCurByteElseExitLoopEndIfNext$sFilePath = BinaryToString ($sFilePath, 1)$iOffset = _BinaryToInt32(BinaryMid ($bDataBlock, 265, 4))$iFileSize = _BinaryToInt32(BinaryMid ($bDataBlock, 281, 4));MsgBox (0, "", "Полное имя: "&$sFileName&@CRLF&"Путь к файлу: "&$sFilePath&@CRLF&"Смещение: "&$iOffset&@CRLF&"Размер: "&$iFileSize)$iOldPos = FileGetPos ($hPak_File) ; запоминаем позициюFileSetPos ($hPak_File, $iOffset, 0) ; встаём на позицию файла$bCurFileData = FileRead ($hPak_File, $iFileSize)$hExtractedFile = FileOpen ($sPak_File & "_u\"& $sFilePath, 2+8+16) ; открываем файл для запииси в бинарном режимеFileWrite ($hExtractedFile, $bCurFileData)FileClose ($hExtractedFile)FileSetPos ($hPak_File, $iOldPos, 0); возвращаемся на старую позициюNextMsgBox (0, $sScriptName, "Готово!" &@CRLF&"Извлечённые файлы в: "& $sPak_File & "_u\")Func _BinaryToInt32($Binary)Return BitAND(Int(Binary($Binary)), 0xFFFFFFFF)EndFunc

 

Re-Mission_pak_extrctor_v.0.1.rar (зеркало)

Изменено пользователем OLEGator84

Поделиться сообщением


Ссылка на сообщение

Обрати внимание на файлы с расширением stt, там не все так просто, ты их не целиком достаешь.

Поделиться сообщением


Ссылка на сообщение

Ну я так понял, это и есть субтитры диалогов.

Точняк в HEX видны диалоги на других языках

Изменено пользователем OLEGator84

Поделиться сообщением


Ссылка на сообщение

Хотя так, наверное, даже лучше, проще обратно запаковать будет, только надо будет учесть что эти файлы разбиты на блоки и соответственно двинуть офсеты двух следующих блоков.

Поделиться сообщением


Ссылка на сообщение

Пофиксил.

Re-Mission_pak_extrctor_v.0.2.rar (зеркало)

Вставил вот такой фрагмент:

If StringRight ($sFilePath, 4) = ".STT" Then$iFileSize2 = _BinaryToInt32(BinaryMid ($bDataBlock, 289, 4))$iFileSize3 = _BinaryToInt32(BinaryMid ($bDataBlock, 293, 4))$bCurFileData &= Binary ("0x0D0A") & FileRead ($hPak_File, $iFileSize2)$bCurFileData &= Binary ("0x0D0A") & FileRead ($hPak_File, $iFileSize3)EndIf

 

Изменено пользователем OLEGator84

Поделиться сообщением


Ссылка на сообщение

OLEGator84, большое спасибо за работу.

Однако я заметил, что при распаковке идёт отсечение имени файла и пути к нему в зависимости от длины заголовка, что как раз видно в WinHex. Скажем, world_26.msh должен лежать внутри архива в папке LEVEL026 (как и прочие файлы), но она обрезается до 026 и создаётся совершенно новая папка.

Поделиться сообщением


Ссылка на сообщение

Действительно, должно быть именно так, но в файле записано иначе: world_26.msh[0x00]026\world_26.msh

Я не знаю почему так.

Изменено пользователем OLEGator84

Поделиться сообщением


Ссылка на сообщение

Прошу прощения, что меня так долго не было.

Теперь очевидный вопрос: как запаковать изменённые файлы назад? Если файл имеет другой размер, то изменяется его смещение, а значит и смещения следующих за ним файлов. Так ведь? Я попытался было внедрить свой фрагмент самостоятельно, но это спровоцировало ошибку и последующий вылет; очевидно, RM.exe проверяет состояние ресурсных файлов. Но как-то же мне нужно тестировать шрифты, тестировать перевод, тестировать всё!

Допустим, запаковать TUTINTRO1.vtt с заменой в изначальный Resource.pak. Естественно, без перерисованных шрифтов (я как раз активно работаю над ними) прочитать субтитры будет невозможно, но в французской версии хотя бы должна отображаться латиница с закорючками - свидетельство того, что содержимое Resource.pak читается правильно.

http://myfolder.ru/files/41439153

Поделиться сообщением


Ссылка на сообщение

Можно просто дописать данные нового файла в конец, поправить смещение и размер в структуре.

Поделиться сообщением


Ссылка на сообщение

По скриншоту чем-то zip напомнило... Там т.ж. описания ф-лов со смещениями дублируются в начальном блоке...

Поделиться сообщением


Ссылка на сообщение
чем-то zip напомнило...

Между прочим. Об этом следовало сказать сразу, но тем не менее: в коренной папке игры не спроста находится файл zlib1.dll.

Zlib же основан на аглоритме DEFLATE - как и zip. Можно ли сделать из этого какие-либо выводы?

Поделиться сообщением


Ссылка на сообщение

1) Большинство программистов любят кофе;

2) 90% программ используют zip как контейнер состовляющих внутренних форматов;

3) Перед тем как анализировать файлы стоит поглядеть на используемые программные модули: в простейшем случае dll используемые программой через PE;

4) Лень двигатель человека, а человек дрова для прогресса;

5) Если хочешь чтобы что-то сделали хорошо, сделай это сам;

6) Самый точный показатель умственных способностей, отражет также количество прочтенных человеком книг;

7) Местных анпакеров интересует больше какой файл нужен, а не где скачать все версии игры т.к. они работают только через набор стандартных утилит, которые не хотят показывать другим;

8) На форуме нет закрепленной темы посвещенной quick bms;

etc

Поделиться сообщением


Ссылка на сообщение

 

AwsomeEpicCool, не надо мне тут мораль читать и демагогию разводить. Я могу редактировать нужные файлы и в hex. Я же спрашивал, как можно было бы сделать проще этого.

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас



Zone of Games © 2003–2024 | Реклама на сайте.

×