Описание: Перевод Shining Force CD |
Поиск в теме | Версия для печати |
Марат |
Отправлено: 27 Декабря, 2018 - 15:24:46
|
Chief-Net
Покинул форум
Сообщений всего: 2183
Дата рег-ции: Окт. 2014
Откуда: Казахстан
|
Попробую расписать. Начну с описания заголовка архива, так как именно по заголовку ищутся архивы.
Данные сжимаются биграмным методом хаффмана, о нем я писал выше.
В заголовке нет никаких ключевых слов, по которым можно отыскать архив.
Вначале сразу идёт таблица смещений на деревья хаффмана размером 255 * 2 байта. Каждое смещение размером 2 байта и вычисляется относительно конца таблицы. На каждый символ строится своё дерево хаффмана. После таблицы идут сами деревья хаффмана в битовом представлении. Всего 255 деревьев. Так как деревья имеют разный размер, то вычислить, где кончается блок с деревьями не представляется возможным. После блоков с деревьями идет сам сжатый текст. Перед каждым сообщением(блоком текста) идёт его размер в байтах.
На скриншоте выделил таблицу смещений деревьев хаффмана. Именно по ней я искал архивы.
В основном начало текста в архивах повторяется, за редким исключением. Поэтому многие архивы находятся по такой последовательности Если немного потренироваться, то можно и остальные архивы находить. Бывают и такие CODE:0001003DFFFF004D004F В общем, разные бывают. Но вариантов не так много.
Но найти архив это ещё пол беды. Далее надо определить адрес начала сжатого текстового блока. Для этого из таблицы смещений берем последний поинтер и к адресу начала блока деревьев хаффмана прибавляем поинтер. На скриншоте это поинтер $0492. Прибавляем его к адресу $22EC9A. И получаем $22F12C. Это у нас адрес дерева символа $FE. Сразу за этим деревом начинается блок со сжатым текстом. Дерево обычно не занимает много байт и визуально можно определить начало сжатого текста.
На скриншоте $0E размер сжатого текстовго блока. сразу за размером идут 14 байт сжатого блока, потом опять размер блока $0F и пятнадцать байт сжатый блок, $10 и шестнадцать байт сжатого блока и т.д. После того как адреса определены, нужно их подставить в программу распаковщика
Количество строк пишем на вскидку. После распаковки нужно будет посчитать сколько строк в действительности имеется и заново распаковать архив.
В общем, как-то так. Я вроде нашёл адреса всех архивов.
Проблема дальше будет только в том, чтобы найти поинтеры архивов, чтобы потом их исправить на свои. Без дебага это будет трудно.
|
|
|
|
Поиск в теме | Версия для печати |
Страниц (2): [1] 2 » |
Сейчас эту тему просматривают: 13 (гостей: 13, зарегистрированных: 0) |
« Переводы » |
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
|
|
|