Есть игра Archibald's Adventures в которой все ресурсы png, jpg, wav...хранятся в pdb файле. PDB - Palm OS файл базы или debug инфа с++, а что это за файл я так и не понял.
Пока достаю то что достается с помощью WinHex
На выходе получаю готовую картинку.
Кто то видел уже подобные файлы ?
Как можно извлечь одтуда ресурсы, если с png и jpg проблем нет в HEX можно и начало и конец увидеть, то как быть с WAV ?
Структура файла схожа с описанной в википедии, но не идентична. Со смещения 0x4С начинается таблица из 8-байтовых элементов, первые 4 байта которых являются оффсетами до ресурсов в big-endian. Судя по тому, что последний оффсет в таблице указывает на последний ресурс в файле, а элементы в таблице упорядочены по возрастанию, в этой таблице есть смещения до всех ресурсов. Размер же одного ресурса можно определить, вычтя его смещение из смещения следующего ресурса, и не важно, PNG это или WAV.
Пример:
Смещение до ресурса 1 = 0xA28
Размер ресурса 1 = 0x2EE8 (0x3910 - 0xA28)
Смещение до ресурса 2 = 0x3910
Размер ресурса 2 = 0x268 (0x3B78 - 0x3910)
Со смещения 0xCE8 начинается некая структура данных с заголовком длиной 0x74 (от 0xCE8 до 0xD5C), а за ней идёт таблица с элементами по 16 байт. Исходя из того, что в приведённом тобой списке насчитывается 402 названия файлов, а в этой таблице именно 402 элемента, можно предположить, что эта таблица связывает имя файла с ресурсом внутри .pdb.
Элемент таблицы можно грубо описать так:
Code:
struct {
word id_1
word id_2
dword unknown_1
dword unknown_2
dword unknown_3
}
id_1 всегда увеличивается на единицу, от 0 до 401.
id_2 ведёт себя хаотично; полагаю, может означать порядок загрузки изображения.
unknown_1 и unknown_2 для конкретного элемента одинаковы, на оффсеты не похожи, что означают - неясно.
unknown_3 сначала ведёт себя хаотично (0xB, 0x18, 0x21, 0x2B, 0x38, 0x45), потом начинает увеличиваться на 0x11 (0x53, 0x64, 0x75, 0x86 и т.д.).
В целом, это служебные данные, которые вряд ли нужны в данном случае для извлечения всей полезной информации.