Print This Post Подбираем ключ к архивам Visionaire Studio

Суббота, 17. Ноябрь 2012
Раздел: Perl, автор:

В этой статье речь пойдет о подборе ключа к архивам, созданным с помощью Visionaire Studio, которые хранят в себе игровые ресурсы.
Visionaire Studio - это среда для упрощенного создания игр в жанре adventure, с её помощью были созданы такие игры, как, например: The Dark Eye: Chains of Satinav, A New Beginning, Deponia. В общем, практически весь репертуар продуктов студии Daedalic Entertainment. Самого процесса распаковки я касаться не буду, так как для этого уже существуют несколько утилит: (скрипт для QuickBMS, VISExt, Unpakke) и более-менее полное описание формата содержимого файла (краткое описание формата VIS*). Минусом всех этих утилит является необходимость собственноручно вбивать ключ, которым зашифрован VIS-файл (ключ шифрования для одной и той же игры может быть различным в зависимости от, например, локализации, а также ключи не сразу добавляются в утилиты при выходе новой игры), попробуем разобраться, как вычислить этот ключ программно.
Как видно из описания формата, в качестве шифрования применяется XOR, где ключом служит половина MD5-хэша, полученного от имени файла (не всегда), то есть ключ шифрования имеет формат [0-9a-f]{16}.
Теперь, для упрощения исследования, нам понадобятся несколько VIS-файлов с известными ключами. Ключи можно получить из вышеперечисленных утилит для распаковки, а файлы, например, из вышеуказанных игр (обычно искомый файл называется data.vis). Если качать игры целиком нет желания, то в качестве примера можно взять этот небольшой файл (выкладывался в качестве примера на XeNTaX). На его примере я объясню алгоритм восстановления ключа.

Скачаем QuickBMS и запустим его, указав путь к скрипту распаковки (visionaire.bms), путь к VIS-файлу (d9ef88157bcbcae0.vis) и добавив -a DUMP, чтобы сдампить расшифрованное содержимое первого "сегмента", который содержит в себе информацию о смещении, размере и типе каждого файла, который хранится внутри.
По сути, нас интересуют первые 48 байт созданного в результате вышеописанной операции файла visionaire_dump.dat. Почему? Потому что, если посмотреть скрипт visionaire.bms, то мы увидим, что в оригинальном VIS-файле (до расшифровки) первые 4 байта отведены под сигнатуру (VIS3), следующие 4 байта под размер "файла-индекса" (который мы будем рассматривать чуть ниже) и далее начинается содержимое, которое циклически ксорится на ключ.
Рассмотрим первые 48 байт из файла, полученного после расшифровки скриптом для QuickBMS:

48 44 52 00 - это сигнатура (HDR), которую можно пропустить, далее данные хранятся фрагментами по 16 байт в формате offset - zsize - size - type.

То есть 00 00 00 00 - offset, 00 2B 5B 00 - zsize, 00 2B 5B 00 - size, 00 00 08 00 - type.
Если взять какие-либо другие VIS-файлы и посмотреть результат расшифровки, то мы увидим, что первые 8 байт всегда выглядят одинаково, то есть получение первой половины ключа не составляет абсолютно никакой проблемы. Очевидно, что вторая половина ключа тоже легко находится, так как поле offset второго фрагмента эквивалентно полям zsize и size (они обычно равны) предыдущего, что логично. Соответственно вторая половина ключа также легко восстанавливается, так как у нас есть исходные данные и ожидаемый результат.

Теперь напишем простой скрипт, который автоматизирует восстановление ключа.

Скачать скрипт одним файлом: vis_keytool.pl

Вот и всё, в качестве проверки я попробовал получить ключ для нескольких файлов - всё отлично сработало, что подтвердила дальнейшая удачная распаковка ресурсов с помощью VISExt, например, этой картинки:

 Обсудить на форуме


Получать обновления на почту:     

Комментариев: 8 к “Подбираем ключ к архивам Visionaire Studio”

  1. Вот что всегда радует в ваших статьях/заметках - так это всякие интересные картинки вконце/вначале (сейчас вспомнилась картинка из заметки про стенанографию).

    [Ответить]

    KronuS:

    Блин, что б без ошибки написать коммент - не судьба. "СтеГанография".

    [Ответить]


  2. red :

    Не работет. Скачал файл XeNTaX, потом VISExt пытался картинки получить, везде пишет error read, ключ вводил..

    [Ответить]

    Kaimi:

    Картинка в посте не из этого файла. Найдите где-нибудь одну из упомянутых игр, скачайте и возьмите из неё vis-файлы.

    [Ответить]


  3. Zaplitblk :

    Распаковать удалось. Однако. Однако графические файлы не открываются. Не пойму в чем кроется загвоздка. Звуки все прослушиваются на ура а вот графика не работает. Прошу помоги, объясни в чем косяк кроется.

    [Ответить]

    Kaimi:

    Графические файлы могут быть дополнительно закодированы.
    http://forum.xentax.com/viewtopic.php?f=10&t=5467 раздел IV. Encryption

    [Ответить]

    Zaplitblk:

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

    [Ответить]

    Kaimi:

    Приведены же программы в начале поста. Тот же VISExt должен корректно извлекать.


Оставьте ваш комментарий