Как расшифровать файлы игры

Обновлено: 06.07.2024

Есть игра BottleBuster
На Ogre3D написана.
Используется какой то формат архивов gar.
Таблица файлом в открытом виде лежит, а вот данные зашифрованы.
Распаковал файлы, получил кучку зашифрованных файлов.
Как можно попытаться расшифровать данные?
Вроде для шифрования используется один и тот-же алгоритм. Во всяком сулчае у ogg файлов одинаковый заголовок, вместо
4F 67 67(Ogg) стало B9 6D BB

В ZIP
50 4B(PK) стало CD 62

Как понять что за алгоритм и какой ключ?

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

@!!ex
Так вы батенька цифровой марадер! Ты не на тот форум зашел.

en emot
>Вообще шифровать, а потом сжимать имхо не правильно, сначала сжимать, а уже
>потом шифрование, потому как шифрование не влияет на размер, зато разрушает
>избыточный потенциал данных и сжатие не такое эффективное.

А там вроде шифрование поверх сжатия.

@!!ex
Ясно, нужно локализовать звуковые ресурсы. Так почему бы вам не обратиться непосредственно к разработчикам и
если у вас все официально, то в их же интересах предоставить вам все данные для локализации в открытом виде.

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

@!!ex
Посмотри личку

НЕ подходит к сожалению. :(
Дело в том, что это не стандартное архивное шифрование.
Это просто набор зашифрованный.
Тоесть есть взяли файл(в данном случае OgreCore.zip) и его сами зашифровали.

если код большой то без него не расшифруешь даже если алгоритм шифрования знать)

Вобщем это надо искать сам код дизассемблером каким нить.

OgreCore_crypt.zip - размер 95331
OgreCore_original.zip - размер 95346

Самый быстрый способ будет, взять WinIce/Ida Pro и расшифровать данные с помощью методов Reverse engineering

oistalker
Или OllyDbg.

Но если программный продукт делали с умом (например с применением сетей Петри, во избежание однозначных переходов), то реверснуть так просто не получиться, в этом нужно реально разбираться, методично искать дыры, @!!ex вам это надо? Лучше учится не взламывать чужое ПО, а учиться эффективнее защищать свое.

oistalker
>@!!ex
>OgreCore_crypt.zip - размер 95331
>OgreCore_original.zip - размер 95346
>Самый быстрый способ будет, взять WinIce/Ida Pro и расшифровать данные с
>помощью методов Reverse engineering
Чем и занимаюсь. То что размер разный я тоже заметил, видимо в СДК другая сборка. :(

en emot
>oistalker
>Или OllyDbg.
Собственно работаю со связкой IDA Pro+Hex Rays+ OllyDbg
>Но если программный продукт делали с умом (например с применением сетей Петри,
>во избежание однозначных переходов), то реверснуть так просто не получиться,
Вы в воих играх используете такие алгоритмы? Зачем?
>в этом нужно реально разбираться, методично искать дыры, @!!ex вам это надо?
Что значит надо/не надо? Это моя работы в данный момент.
>Лучше учится не взламывать чужое ПО, а учиться эффективнее защищать свое.
Зачем? Я вообще за ОпенСорс, стараюсь достойные прокты свои открывать.
Я не вижу смысла шифровать ресурсы игр и никогда не шифрую.

>>Но если программный продукт делали с умом (например с применением сетей Петри,
>>во избежание однозначных переходов), то реверснуть так просто не получиться,
>Вы в воих играх используете такие алгоритмы? Зачем?

Этот механизм используется только в критических по безопасности секциях (напр. проверка ключа), в самой игре - нет.

> Что значит надо/не надо? Это моя работы в данный момент
Вы специалист по информационной безопасности? Думаю, что нет. На вашем бы месте я намекнул бы своему начальству, что нужен спец. из данной области со стороны.

> Зачем? Я вообще за ОпенСорс, стараюсь достойные прокты свои открывать.
Если там известные давно всем вещи, то смысла действительно нету, но если там используются совершенно инновационные алгоритмы, на разработку которых было потрачено не один месяц, а может и лет, то я сомневаюсь, что вам бы не захотелось это спрятать по-надежнее.

en emot
>> Что значит надо/не надо? Это моя работы в данный момент
>Вы специалист по информационной безопасности? Думаю, что нет. На вашем бы месте
>я намекнул бы своему начальству, что нужен спец. из данной области со стороны.
Смысла нет объяснять, но практически получается что приходится работать специалистом по безопасности. :) Опыта только мало.
>> Зачем? Я вообще за ОпенСорс, стараюсь достойные прокты свои открывать.
>Если там известные давно всем вещи, то смысла действительно нету, но если там
>используются совершенно инновационные алгоритмы, на разработку которых было
>потрачено не один месяц, а может и лет, то я сомневаюсь, что вам бы не
>захотелось это спрятать по-надежнее.
Зачем??
id открыват свои игры через пароу лет после ваыхода игры, Crytek пишет статьи о том как и что они делали.
Зачем скрывать. Скрывая ничего не получишь. А открыв - получишь через некоторое время новые технологии, которые будут лучше первоначальной, и сам же потом ее смождешь использовать. Да, открывать ДО выхода игры глупо, после выхода - не вижу причин в том, чтобы не открыть.

> Да, открывать ДО выхода игры глупо, после выхода - не вижу причин в том, чтобы не открыть.

Подробнее о том, как расшифровать файлы бесплатно и не платить выкуп программам-вымогателям, используя утилиты Avast по удалению вирусов-шифровальщиков.

Программы-вымогатели становятся «флагманом» вредоносного ПО. За последний год мы зафиксировали рост числа атак шифрователей более чем в два раза (на 105%). Подобные вирусы блокируют доступ к файлам на компьютере, кодируя их и вымогая выкуп за предоставление кода для расшифровки.

Как расшифровать файлы бесплатно? Мы рады объявить о выпуске четырех инструментов для удаления программ-вымогателей и дешифровки файлов: Alcatraz Locker, CrySiS, Globe и NoobCrypt. Все дешифраторы для файлов доступны на нашей странице и являются бесплатными.

Там же представлено подробное описание каждого вида программ-вымогателей. Наши инструменты смогут помочь вам удалить вирус-шифровальщик и разблокировать файлы. Утилиты постоянно обновляются по мере развития перечисленных видов угроз.

С момента выпуска первого пакета из семи инструментов Avast для дешифровки нам было приятно получить множество отзывов с благодарностями и рассказами о том, как наши утилиты спасли чьи-то ценные данные или даже бизнес. Надеемся, новые программы для дешифровки помогут еще большему количеству пользователей.

Ниже приведено краткое описание четырех новых видов программ-вымогателей, для удаления которых были разработаны новые бесплатные утилиты.

Alcatraz

Вирус-шифрователь (программа-вымогатель) Alcatraz

В отличие от большинства видов шифрователей, программа Alcatraz не имеет заданного списка расширений файлов, на которые она нацелена. Иными словами, программа шифрует все, что может. Чтобы предотвратить нанесение ущерба операционной системе, Alcatraz Locker шифрует только файлы в каталоге %PROFILES% (обычно C:\Users).

Вымогатель шифрует файлы, используя встроенные функции Windows (API-интерфейс шифрования):

Вирус-шифрователь (программа-вымогатель) Alcatraz

  1. Создается 256-битовый массив, заполняемый шестнадцатеричным значением 0x36.
  2. К первым 160 битам этого массива с начальным 160-битовым хэшем SHA1 применяется функция XOR.
  3. Рассчитывается SHA1 массива, к которому была применена функция XOR (назовем это Hash1).
  4. Создается 256-битовый массив, заполняемый шестнадцатеричным значением 0x5C.
  5. К первым 160 битам этого массива с начальным 160-битовым хэшем SHA1 применяется функция XOR.
  6. Рассчитывается SHA1 массива, к которому была применена функция XOR (назовем это Hash2).
  7. 160 битов Hash1 и 96 битов Hash2 объединяются.

Получившийся объединенный хэш используется в качестве исходного ключа для AES256.

После выполнения шифрования AES-256 программа-вымогатель также кодирует уже зашифрованный файл с помощью позиционной системы счисления с основанием 64 (BASE64), в результате чего зашифрованный файл приводится к типичной модели:

Вирус-шифрователь (программа-вымогатель) Alcatraz

CrySiS

Программа CrySiS (известная также как JohnyCryptor и Virus-Encode) известна с сентября 2015 года. Использует сильные алгоритмы шифрования AES и RSA. Также особенность заключается в том, что она содержит список файловых расширений, которые не подвергаются блокировке.

Хотя идентификационный номер и адрес электронной почты меняются довольно часто, есть только три различных имени расширений, которые, используются до сих пор:

.xtbl, .lock и .CrySiS.

В результате имена зашифрованных файлов могут выглядеть так:

Каждый подобный элемент содержит все данные, которые необходимы для его расшифровки. Файлы размером менее 262 144 байта зашифровываются полностью, а в окончании находится код, содержащий зашифрованный ключ AES вместе с остальными данными, такими как исходное имя файла, что позволяет выполнить полную расшифровку. Стоит отметить, что файлы, размер которых превышает 262 144 байта, шифруются лишь частично, однако и в этом случае использовать их не удастся. Такой способ работы вымогателя приводит к тому, что крупные файлы после шифрования еще больше увеличиваются в размере.

Вирус-шифрователь (программа-вымогатель) CrySis

Вирус-шифрователь (программа-вымогатель) CrySis

Globe

Данная программа, существующая примерно с августа 2016 года, написана на языке Delphi и обычно упакована UPX. Некоторые варианты также упакованы при помощи установщика Nullsoft:

  • bc4c0b2f6118d36f4d476db16dbd6bcc0e393f2ad08429d16efe51f3d2870d58
  • fdc8de22653ebcf4cb8f5495b103e04079b0270efa86f713715f0a81f1b2e9b0

Вирус-шифрователь (программа-вымогатель) Globe

В распакованном бинарном виде программа представляет собой глобальный интерфейс «настройки», в которой автор вымогателя может вносить некоторые изменения в ее характеристики:

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

Примечательно, что программа-вымогатель имеет режим отладки, который может быть включен при помощи следующей настройки реестра:

Вирус-шифрователь (программа-вымогатель) CrySis

Вирус блокирует файлы при помощи алгоритмов RC4 или BlowFish. Когда программа-вымогатель настроена на шифрование имен файлов, она выполняет его при помощи того же алгоритма, который использовался в отношении самого файла. Затем название шифруется при помощи собственной реализации кодирования Base64.

Вот несколько примеров созданных расширений, которые могут быть расшифрованы при помощи утилиты Avast:

Как правило, данная программа-вымогатель создает файлы с именем «Read Me Please.hta» или «How to restore files.hta», которое отображается после входа пользователя в систему.

Вирус-шифрователь (программа-вымогатель) CrySis

Не платите вымогателям! Используйте дешифратор для файлов Globe.

NoobCrypt

Вирус-шифрователь (программа-вымогатель) NoobCrypt

Вирус-шифрователь (программа-вымогатель) NoobCrypt

Чтобы расшифровать файлы, программа NoobCrypt предлагает «код разблокировки», который необходимо купить. В Twitter мной были опубликованы бесплатные ключи для удаления всех известных версий программы NoobCrypt (примеры: 1, 2, 3). Однако определять, какой из них следует использовать, приходилось вручную. Благодаря нашему инструменту для дешифровки вам уже не придется гадать, какой код нужно применить.

Вскоре после публикации кодов, исследователь программ-вымогателей с сетевым именем xXToffeeXx сообщил нам о создании новой версии NoobCrypt, которая рекламировалась во множестве магазинов в сетях Darknet. Стоимость этой версии, находящейся в продаже, составляет $300.

Вирус-шифрователь (программа-вымогатель) NoobCrypt

Вирус-шифрователь (программа-вымогатель) NoobCrypt

Автор даже подготовил демонстрационное видео, демонстрирующее функции, которые представлены как новые, в том числе использование «шифрования военного уровня» и «невозможность обнаружения антивирусами (кроме AVG)», что является обманом: многие антивирусы способны обнаружить эту программу.

Как видно на снимке внизу, автор даже упоминает мое имя на экране с инструкциями по выплате денег и за что-то меня благодарит. Возможно, за то, что я дал этому набору некачественного кода соответствующее название (теперь оно используется официально).

Вирус-шифрователь (программа-вымогатель) NoobCrypt

Сегодня мы представляем инструмент для дешифровки NoobCrypt, подходящий для всех его известных версий. Процесс разблокировки теперь выглядит намного проще, чем подбор нужного кода. Теперь вам не нужно платить деньги за предоставление ключа. И тем более полагаться на расшифровку своих файлов программе-вымогателю.

Ознакомьтесь с описанием программы NoobCrypt и инструментом для дешифровки на нашем сайте.

Как не стать жертвой программы-вымогателя

Прежде всего убедитесь, что на всех ваших устройствах установлен антивирус, например Avast (даже смартфоны могут быть заражены программой-вымогателем). Антивирус сможет заблокировать программы-вымогатели еще до того, как они причинят ущерб.

Необходимо также выполнять регулярное и правильное резервное копирование своих данных. Храните резервные копии данных удаленно, иначе они могут также быть заблокированы вредоносным ПО.

Если вам не повезло и вы стали жертвой программ-вымогателей, попробуйте наши инструменты для дешифровки и проверьте, сможем ли мы помочь вам вернуть свои файлы!

Выражаю благодарность своим коллегам, Ладиславу Зезуле (Ladislav Zezula ) и Петру Щепански (Piotr Szczepanski), за подготовку дешифраторов, а также Яромиру Горейши (aromír Hořejší) за его анализ программы Alcatraz Locker.

Автор материала: Михаил Бесчетнов aka Terminus

В статье, в качестве примера, описывается процесс распаковки архива формата DAT из игры Imperium Galactica II

Предположим, что вам захотелось добыть графику из некой игрушки. Предположим также, что ваш выбор пал на Imperium Galactica II. Те же правила подойдут практически к любой игре.

Начнем с поиска самих ресурсов. В принципе, видов хранения информации в играх немерено. Однако вначале следует взглянуть, не лежат ли спрайты/картинки/звуки в привычном для нас формате (bmp,jpg,wav и пр.). Если вы нашли что-то подобное, значит вам крупно повезло. Если нет — можете продолжать читать дальше.

Разные производители по разному и ресурсы прячут. В одном случае можно найти текстуры, размещенные по отдельным файлам, в другом их запаковывают в архивы, точнее — в псевдоархивы, т.к. в них довольно редко применяются алгоритны сжатия и в полном смысле этого слова архивами они не являются. Значит, ищем файлы, которые выделяются своим размером на фоне остальных. Впрочем, архивы могут быть и сравнительно небольшими, как в нашем случае с IG2. Здесь в каждом архиве содержится иногда по одному, а иногда и по сотне файлов. Вот этот случай мы и рассмотрим.

При расшифровке любого формата вероятность успешного результата резко возрастает, если разбирать одновременно несколько образцов этого формата. В нашем случае используется два архива: sounds_colony_speech_self-destruct.dat и textures_colony_lens.dat.

Итак, подопытные архивы отобраны. Теперь пришла пора найти содержащиеся в них файлы. В каждом архиве есть область, в которой описываются все файлы. Назовем эту область FAT (File Allocation Table). В каждом же архиве имеется и заголовок (Header), в котором может раполагаться смещение до FAT, идентификатор формата, количество файлов, Copyright и много еще чего. Как правило Header располагается в начале архива, реже — в конце, очень редко — его нет совсем, однако это уже тяжелый случай. Для начала попробуем найти FAT в одном из наших архивов. Зрительно он определяется довольно просто — это область, где группы байтов располагаются с некой переодичностью. Проще всего это увидеть , если сравнить Рисунок 1 с Рисунком 2 . В первом случае данные располагаются хаотично, и регулярность не улавливается. Кроме того, FAT отличается обилием нулей в своих полях, особенно в начале. Объясняется это тем, что смещение первых (а иногда и всех) файлов ограничивается значением 16’777’215 (или даже 65’536) т.е. помещается в трех (или двух) из четырех байт значения типа LongInt и один(или два) байт остается нулевым. Это очень заметно. Ничего этого в начале нашего первого архива нет. Так что искать там нечего.

Перейдем в конец нашего архива и к рисунку 2. Сразу бросаются в глаза имена файлов. Ну вот, найден FAT. Его расшифровка теперь — дело техники. Теперь надо найти информацию о смещении FAT и об общем количестве файлов. Ищем глазами начало FAT (на рисунке он за пределами видимости). Обнаруживаем, что начинается он по смещению $DC1A3. Но ведь нашей задачей стоит не разбор конкретного архива, а возможность с помощью отработаного метода разобрать любой архив DAT. Так что ищем универсальный способ определения адреса FAT. Адрес этот может отсчитываться как от начала, так от конца архива. Получаем два адреса: от начала — $DC1A3, от конца — $DCAB9(размер архива)-$DC1A3=$916. Попытаемся найти любой из этих адресов в конце архива. И находим значение $16 09 00 00 по адресу $DCAB5. Это последние 4 байта архива.

Теперь обратимся ко второму эксперементальному архиву и к Рисунку 3 . Как мы уже поняли, предположительно смещение FAT можно прочитать в последних четырех байтах архива. Чтобы окончательно подтвердить это предположение, посмотрим на последние четыре байта второго архива ( Рисунок 3 ). Там, по смещению $5BB2 читаем значение $106. Вычитаем это значение из общего размера архива и получаем $5AB0. Идем по этому смещению и куда попадаем? Да, на начало FAT второго архива. Значит, гипотеза подтвердилась.

Осталось только рассмотреть структуру записи об одном из файлов. Вот содержащиеся в записи поля (в скобках указана длина поля):

  1. Имя файла (длина произвольна).
  2. Смещение в архиве до него (4 байта).
  3. Хлам (4 байта).
  4. Размер данных (4 байта).
  5. Реальный размер файла (если использован алгоритм сжатия GZip) (4 байта).
  6. Хлам (4 байта).

Длина поля имени может быть во всех записях фиксированой или произвольной. Во втором случае либо перед полем указывается длина имени, либо (как в нашем случае) имя читается до первого нулевого символа. Остальные поля отгадываются эксперементально. Размер первого файла=Смещение второго-смещение первого. Само смещение можно отгадать. Это особенно легко, в случае если все файлы имеют один и тот-же тип, т.е. имеют общий идентификатор в заголовке. Например, во втором архиве рассмотрим запись о первом файле (смещение $5AB0), и о втором (смещение $5ACE). После имени первого файла, пропустив один нулевой символ, читаем $00 00 00 00. Будем считать, что это и есть смещение до первого файла. Идем по этому смещению, т.е. в начало архива и запоминаем хотя бы два первых байта — $78 9C. Теперь читаем те же четыре символа — $FF 48 00 00. Идем по этому смещению ($48FF) и видим те же два байта. Т.о. совпадают идентификаторы обоих файлов, следовательно поле, содержащее смещение файла определено верно. Таким же методом научного тыка определяются и остальные поля.

Напоследок хотелось бы уделить внимание еще кое чему. Иногда файлы в псевдоархивах сжаты совершенно настоящим архиватором GZip. Этот метод использован и в IG2, и в HOM&M III. Идентификатором формата GZip является последовательность $1F 8B 08 00 00 00 00 00 00 00. Однако в играх этот идентификатор по неизвестной мне причине заменяют на $78 9C. Что бы при распаковке псевдоархива сформировать полноценный архив GZip из того файла, что там хранится, например, правильно извлечь из второго архива файл flare.bmp ( Рисунок 3 ), нужно:

  1. Создать файл с именем Flare.bmp.
  2. Записать туда настоящий идентификатор GZip, т.е. $1F 8B 08 00 00 00 00 00 00 00.
  3. Копировать в созданый файл данные Flare.bmp из псевдоархива , начиная с третьего байта (чтобы отсечь ложный идентификатор GZip).
  4. В конце Flare.bmp вписать Реальный размер файла. Он включен в запись FAT.

Вот, собственно, и все. Надеюсь, эта статья что-то для вас прояснила. На самом деле, сколько типов архивов, столько и методов их распаковки, так что все варианты сразу описать невозможно.

Примечание от 11 ноября 2001г.

Маневр с «ложным заголовком» GZip справедлив в том, и только в том случае, когда вы используете библиотеку GZipLib или другие библиотеки того же класса. При использовании ZLib заголовок редактировать не надо.

Автор материала: Михаил Бесчетнов aka Terminus

В статье, в качестве примера, описывается процесс распаковки архива формата DAT из игры Imperium Galactica II

Предположим, что вам захотелось добыть графику из некой игрушки. Предположим также, что ваш выбор пал на Imperium Galactica II. Те же правила подойдут практически к любой игре.

Начнем с поиска самих ресурсов. В принципе, видов хранения информации в играх немерено. Однако вначале следует взглянуть, не лежат ли спрайты/картинки/звуки в привычном для нас формате (bmp,jpg,wav и пр.). Если вы нашли что-то подобное, значит вам крупно повезло. Если нет — можете продолжать читать дальше.

Разные производители по разному и ресурсы прячут. В одном случае можно найти текстуры, размещенные по отдельным файлам, в другом их запаковывают в архивы, точнее — в псевдоархивы, т.к. в них довольно редко применяются алгоритны сжатия и в полном смысле этого слова архивами они не являются. Значит, ищем файлы, которые выделяются своим размером на фоне остальных. Впрочем, архивы могут быть и сравнительно небольшими, как в нашем случае с IG2. Здесь в каждом архиве содержится иногда по одному, а иногда и по сотне файлов. Вот этот случай мы и рассмотрим.

При расшифровке любого формата вероятность успешного результата резко возрастает, если разбирать одновременно несколько образцов этого формата. В нашем случае используется два архива: sounds_colony_speech_self-destruct.dat и textures_colony_lens.dat.

Итак, подопытные архивы отобраны. Теперь пришла пора найти содержащиеся в них файлы. В каждом архиве есть область, в которой описываются все файлы. Назовем эту область FAT (File Allocation Table). В каждом же архиве имеется и заголовок (Header), в котором может раполагаться смещение до FAT, идентификатор формата, количество файлов, Copyright и много еще чего. Как правило Header располагается в начале архива, реже — в конце, очень редко — его нет совсем, однако это уже тяжелый случай. Для начала попробуем найти FAT в одном из наших архивов. Зрительно он определяется довольно просто — это область, где группы байтов располагаются с некой переодичностью. Проще всего это увидеть , если сравнить Рисунок 1 с Рисунком 2 . В первом случае данные располагаются хаотично, и регулярность не улавливается. Кроме того, FAT отличается обилием нулей в своих полях, особенно в начале. Объясняется это тем, что смещение первых (а иногда и всех) файлов ограничивается значением 16’777’215 (или даже 65’536) т.е. помещается в трех (или двух) из четырех байт значения типа LongInt и один(или два) байт остается нулевым. Это очень заметно. Ничего этого в начале нашего первого архива нет. Так что искать там нечего.

Перейдем в конец нашего архива и к рисунку 2. Сразу бросаются в глаза имена файлов. Ну вот, найден FAT. Его расшифровка теперь — дело техники. Теперь надо найти информацию о смещении FAT и об общем количестве файлов. Ищем глазами начало FAT (на рисунке он за пределами видимости). Обнаруживаем, что начинается он по смещению $DC1A3. Но ведь нашей задачей стоит не разбор конкретного архива, а возможность с помощью отработаного метода разобрать любой архив DAT. Так что ищем универсальный способ определения адреса FAT. Адрес этот может отсчитываться как от начала, так от конца архива. Получаем два адреса: от начала — $DC1A3, от конца — $DCAB9(размер архива)-$DC1A3=$916. Попытаемся найти любой из этих адресов в конце архива. И находим значение $16 09 00 00 по адресу $DCAB5. Это последние 4 байта архива.

Теперь обратимся ко второму эксперементальному архиву и к Рисунку 3 . Как мы уже поняли, предположительно смещение FAT можно прочитать в последних четырех байтах архива. Чтобы окончательно подтвердить это предположение, посмотрим на последние четыре байта второго архива ( Рисунок 3 ). Там, по смещению $5BB2 читаем значение $106. Вычитаем это значение из общего размера архива и получаем $5AB0. Идем по этому смещению и куда попадаем? Да, на начало FAT второго архива. Значит, гипотеза подтвердилась.

Осталось только рассмотреть структуру записи об одном из файлов. Вот содержащиеся в записи поля (в скобках указана длина поля):

  1. Имя файла (длина произвольна).
  2. Смещение в архиве до него (4 байта).
  3. Хлам (4 байта).
  4. Размер данных (4 байта).
  5. Реальный размер файла (если использован алгоритм сжатия GZip) (4 байта).
  6. Хлам (4 байта).

Длина поля имени может быть во всех записях фиксированой или произвольной. Во втором случае либо перед полем указывается длина имени, либо (как в нашем случае) имя читается до первого нулевого символа. Остальные поля отгадываются эксперементально. Размер первого файла=Смещение второго-смещение первого. Само смещение можно отгадать. Это особенно легко, в случае если все файлы имеют один и тот-же тип, т.е. имеют общий идентификатор в заголовке. Например, во втором архиве рассмотрим запись о первом файле (смещение $5AB0), и о втором (смещение $5ACE). После имени первого файла, пропустив один нулевой символ, читаем $00 00 00 00. Будем считать, что это и есть смещение до первого файла. Идем по этому смещению, т.е. в начало архива и запоминаем хотя бы два первых байта — $78 9C. Теперь читаем те же четыре символа — $FF 48 00 00. Идем по этому смещению ($48FF) и видим те же два байта. Т.о. совпадают идентификаторы обоих файлов, следовательно поле, содержащее смещение файла определено верно. Таким же методом научного тыка определяются и остальные поля.

Напоследок хотелось бы уделить внимание еще кое чему. Иногда файлы в псевдоархивах сжаты совершенно настоящим архиватором GZip. Этот метод использован и в IG2, и в HOM&M III. Идентификатором формата GZip является последовательность $1F 8B 08 00 00 00 00 00 00 00. Однако в играх этот идентификатор по неизвестной мне причине заменяют на $78 9C. Что бы при распаковке псевдоархива сформировать полноценный архив GZip из того файла, что там хранится, например, правильно извлечь из второго архива файл flare.bmp ( Рисунок 3 ), нужно:

  1. Создать файл с именем Flare.bmp.
  2. Записать туда настоящий идентификатор GZip, т.е. $1F 8B 08 00 00 00 00 00 00 00.
  3. Копировать в созданый файл данные Flare.bmp из псевдоархива , начиная с третьего байта (чтобы отсечь ложный идентификатор GZip).
  4. В конце Flare.bmp вписать Реальный размер файла. Он включен в запись FAT.

Вот, собственно, и все. Надеюсь, эта статья что-то для вас прояснила. На самом деле, сколько типов архивов, столько и методов их распаковки, так что все варианты сразу описать невозможно.

Примечание от 11 ноября 2001г.

Маневр с «ложным заголовком» GZip справедлив в том, и только в том случае, когда вы используете библиотеку GZipLib или другие библиотеки того же класса. При использовании ZLib заголовок редактировать не надо.

Читайте также: