Автоматические распаковщики инсталляторов. Декомпилируем инсталляторы InnoSetup Как пользоватся программой dragon unpacker

У многих из вас, без сомнения, возникали моменты, когда после знакомства с очередной игрушкой появлялась мысль: "А как бы взять и музон (звуки, рисунки) из нее вытащить?", а возможности съема скриншотов явно было мало. Пиратские диски типа "Вся музыка из Need for Speed: Underground" наводила размышление о возможности подобного мероприятия.

Немного теории

Логично, что если в игре есть музыка, то она где-то уже лежит на вашем жестком диске физически, а, скорее всего - в папке уставленной игрушки. Понятно, что производители игр, а в особенности издатели, не заинтересованы в доступности оригинального саундтрека игры и прочих элементов оформления. Поэтому они упаковывают все ресурсы игры в особые файлы, называемые файлами ресурсов. Раньше, еще совсем в недалеком прошлом, достаточно было перетянуть такой файл в любой продвинутый архиватор типа WinRar или WinZip, и увидеть все как на ладони, так как файлы ресурсов фактически представляли собой обычные архивы. Теперь же все усложнилось, так как производители, обеспокоенные растущим пиратством, стали шифровать ресурсы игр. Но идея осталась неизменной: файл ресурсов - это архив, где лежат файлы, а иногда и папки с вложенными файлами. Разве что ныне добавилось шифрование по какому-либо стандарту, а это значит, что обычным архиватором файл ресурсов не возьмешь.

Часть 1. Открытие для страждущих

Но все возможно в этом мире, и естественно, существует уже такая прога, с помощью которой можно вскрыть и разобрать любимую игру по косточкам. Имя ей - DragonUnPacker, автор - француз с ником Elbereth. Скачать ее можно посылке http://www.dragonunpacker.com/ .

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

Интерфейс
Внешний вид проги прост, как булка хлеба и по замыслу напоминает Проводник Windows. С левой стороны окна находится список ныне открытых файлов. Каждый файл можно развертывать, также, как и папки в Проводнике. С правой стороны расположен список файлов, упакованных в открытом и выделенном файле ресурсов игры. Все остальное понятно на уровне интуиции любому, кто более-менее знаком с компьютером:)))

Возможности
Прога способна, как гласит ReadMe, "показывать, что находится в ресурсных файлах игр", причем гарантированно поддерживаются более 100 различных форматов файлов типа *.big, *.bin, *.utx, *.umx, *.pak и т.д.

Процесс взлома
Все просто: жмем "File-Open" и выбираем нужный нам файлик. Если прога его поняла, то она сразу же показывает его содержимое. Для "выуживания" нужного файла просто кликаем правой кнопкой на названии файла, выбираем в меню "Extract to-Without conversion" и сохраняем куда хотим. Предварительно любой файл можно прослушать двойным щелчком в окне программы - он откроется в том редакторе или плеере, который стоит у вас по умолчанию в системе.

Ну, а если прога его НЕ поняла?

Часть 2. Если прога его не поняла...

Тут, собственно, начинается самая интересная часть работы с программой. Если DragonUnPacker не распознал ваш формат автоматически, то он запускает свой плагин HyperRipper. Вручную это можно сделать так:"File-HyperRipper". Плагин призван, как уже было сказано, определять ресурсы в тех файлах, формат которых еще не известен проге. Сам процесс протекает следующим образом. На вкладке Search выбираем необходимый нам файл и указываем, нужно ли сохранять информацию о нем (галочка Create HyperRipper file). Сохранять информацию о результатах поиска имеет смысл в том случае, если вы собираетесь обращаться к этому файлу еще не один раз, поскольку процесс поиска занимает весьма много времени.

Далее, на вкладке Formats, определяем, какие форматы файлов нужно искать. Как правило, производители игр группируют однотипные ресурсы в одном файле(музыку, например). Что именно искать, можно понять из названия самого файла ресурсов (Music.big или Movies.bak). если же вы все-таки не уверены, выберите вариант "All".

И последнее: вкладка Advanced. Здесь необходимо выставить размеры буферов памяти. Рекомендуемые мной параметры таковы:
Buffer memory - 256 bytes
Memory Rollback - default rollback.
Я не буду объяснять, почему именно так, кому интересно - читайте readme - там все подробно изложено. Параметры подобраны мной самим просто из личного опыта. Теперь осталось только нажать "Search" на одноименной вкладке и ждать. Ибо процесс "расшаривания" может длиться от нескольких секунд до нескольких часов. Самое обидное в этом то, что ничего может и не быть найдено вовсе - ну не поняла прога файл, не поняла...

Часть 3. Что делать?

Пробуйте, и воздастся вам! Одним словом, я, равно как и автор вышеописанного софта, не могу гарантировать абсолютное распознавание любого файла любой игры. Остается только практиковаться во взломе - раз на раз не выходит. Мне самому, в частности, удалось с помощью сей замечательной проги вскрыть BloodRayne и BloodRayne 2, SplinterCell и UnrealTounament 2004, а вот NFS: Most Wanted, увы, не поддался... Хотя музыку из любимого мной MaxPayne 2 я все-таки вынул. Удачи, друзья мои! Удачного вам поиска.

Информация была взята с сайта www . chemax . ru

В данной статье мы подробно рассмотрим как осуществить полную декомпиляцию программ установки, созданных при помощи популярного средства — InnoSetup. На выходе мы получим всё содержимое архива, а также полный исходный код установщика.

Введение

В качестве примера мы будем осуществлять декомпиляцию нашего проекта , распространяющегося по лицензии GNU GPL v3, программа установки (далее «инсталлятор») которого собрана при помощи InnoSetup.

Загрузка компонентов

Для начала нам потребуется утилита версии 0.40 (поддерживает все версии InnoSetup до 5.5.4 включительно). Загрузить её можно . Распакуйте архив в любой каталог, например, C:\iunp\ .

Также для разбора секции code , которая компилируется в бинарный файл, нам потребуется дизассемблер ROPS , который можно взять . Распаковать его следует в тот же каталог.

Теперь скачаем SRC Repair последней версии по .

Краткая справка по декомпилятору

Innounp.exe [команды] [параметры] <имя_установщика.exe> [@список_файлов] [маска]

В квадратных скобках указываются необязательные параметры. Единственным обязательным является имя файла инсталлятора, который мы будем декомпилировать.

Список допустимых команд утилиты innounp:

  • -v — вывести список файлов архива (с размерами и датами создания/изменения);
  • -x — распаковать файлы из архива в текущий каталог (допускается указать параметр -d для указания другого каталога назначения);
  • -e — распаковать файлы в текущий каталог без соблюдения внутренней структуры каталогов;
  • -t — запустить проверку целостности архива.

Список допустимых параметров утилиты innounp:

  • -b — включает неинтерактивный режим. Рекомендуется для использования в скриптах;
  • -q — подавляет вывод на экран прогресса извлечения файлов из архива;
  • -m — осуществить глубокую декомпиляцию (при этом будут собраны деинсталляторы, а также извлечён бинарный файл секции code);
  • -pPASS — задаёт пароль для архива (если он был им защищён);
  • -dDIR — указывает каталог, в который будет распаковано содержимое архива (допускаются как абсолютные, так и относительные пути);
  • -fFILE — то же, что и -p, но пароль считывается из указанного текстового файла;
  • -a — включает обработку дублирующихся файлов внутри архива;
  • -y — отвечает на все вопросы программы утвердительно (разрешение на перезапись файлов и т.д.).

Декомпиляция примера

  1. Откроем командную строку Windows (Пуск Выполнить cmd.exe ).
  2. Перейдём в каталог, в который установили Unpacker (C:\iunp\ ): cd /D "C:\iunp\"
  3. Скопируем в этот же каталог установщик, который будем декомпилировать (в нашем случае это SRC Repair).
  4. Выполним в консоли команду: innounp.exe -x -m -dout srcrepair_180_final.exe
  5. В случае успеха в каталоге C:\iunp\out\ мы найдём всё содержимое установщика, а также файл с расширением *.iss , который является полным исходным кодом модуля установки (включая комментарии).
  6. Если в скрипте установки были вставки кода, то в каталоге C:\iunp\out\embedded\ будет находиться бинарный файл CompiledCode.bin , который содержит его в скомпилированном виде.

Дизассемблирование файла CompiledCode.bin

  1. Снова откроем командную строку Windows.
  2. Перейдём в каталог, в который распаковали ROPS (C:\iunp\ ): cd /D "C:\iunp\"
  3. Выполним в консоли команду: disasm.exe out\embedded\CompiledCode.bin out.asm
  4. В файле C:\iunp\out.asm мы найдём дизассемблированный код.

Заключение

Таким образом, мы получили полное содержимое программы установки, собранной при помощи InnoSetup, включая её полные исходные коды.

Изменения в версии 5.7.0

i Updated licence to MPL 2.0 (from MPL 1.1).
! Added extra check in the extraction routine to avoid going past the end of
file.
! Fixed many memory leaks (thanks to FastMM!).
! Fixed create list feature (macros can be upper-case or lower-case).
* Changed macros in the DUP4 HTML template (v1.2) for lists to upper-case
anyway to be consistent.
* Re-factored the TDrivers class to stop using pointers replaced by dynamic
arrays. Will be easier to maintain and less prone to errors.
Also introduced DUDI v6 that uses a callback function every time an entry
needs to be added. This is completely different than DUDI v5 were the core
program calls the plug-in function for all found entries.
Both the old DUDI v1-v5 & v6 methods are supported by Dragon UnPACKer
5.7.0+.
New directory cache should be as fast (if not faster) than the old one.
Note: Only main & ZIP driver were adapted to DUDI v6.
+ Added FastCode & FastMove.
http://fastcode.sourceforge.net/
! Fixed support for multiple convert plug-ins during preview.
* Re-factored how TDrivers & TPlugins were global variables, now properties
of the main form. Both don"t access directly main form components any more
and go through a wrapper command class.
* Completely revamped the logging features.
There might still be some places were it misbehaves.
+ Revamped the old "Look" functionality to a much easier to maintain and
modify "Theme" (files in a folder for the moment).
Not really nice with Delphi 7 but should pave the way to Lazarus.
+ Added chained conversion from plug-ins to internal Vampyre Imaging Library.
This allows for the plug-ins to just convert to .DDS for example and the
chaining will also propose BMP, PNG and TGA with no additional work from
the plug-in.
+ Added direct internal Vampyre Imaging Library convertion of compatible
files. For ex: .DDS to .BMP/.PNG/.TGA.
! Fixed the SetPercent callback function that was refreshing the component
on every call, now it will refresh only if the value changed...
This resulted in tremendous speed up for the loading of some formats, for
ex: POD5 loading in previous version: ~17sec now: ~7sec.
i HyperRipper v5.6b:
! Fixed the sanity check on the BIK searching algorithm.
Should avoid some false-positives.
! Fixed the memory leak for not freeing the TBufferedFS component:
Switched back to using THandleStream instead of TBufferedFS.
Free THandleStream but keep handle open and pass it to TDrivers.
* Elbereth"s ZIP Driver plug-in v2.0.0 Beta 1:

UnPACKer versions.
* Changed to use Abbrevia instead of Info-Zip UnZip32.dll.
* Elbereth"s Main Driver plug-in v3.0.1 Beta 4:
* Updated to new DUDI v6. This means as of this version the plug-in
requires Dragon UnPACKer v5.7.0 or more. It won"t work with older Dragon
UnPACKer versions.
+ Added support for Aliens vs. Predator (2010) .ASR file format.
Actually support for both uncompressed & compressed Asura files.
Almost all files in the game use those formats (.EN/.GUI/etc..).
If you have smart format activated (which you should) it will load them
automatically.
Please note the compressed Asura files are slow to load & to extract from
but there is nothing I can do (the format is not foreseen for random read
access).
+ Added support for Star Wars Starfighter .PAK file format.
Feature request #89 by James Krayenhagen.
+ Added support for The 7th Guest .GJD file format.
(This never worked in drv_11th...)
+ Added support for The 11th Hour .GJD file format.
(No activation needed)
* Added sanity checks to Terminal Velocity .POD format.
- Removed Elbereth"s The 11th Hour Driver plug-in.
Not needed anymore, features merged in drv_default v3.0.1 Beta 3.
* Duppi v3.4.0:
i Updated to work with Indy 9 instead of Curl.
This means a full Delphi implementation with no need for DLLs.
It is also compatible with Lazarus (Indy 9 & 10 were ported to Lazarus).
i Now compiled with FastMM4, FastCode & FastMove.
+ Default Conversion plug-in v2.2.1:
+ Added Ghostbusters: The Video Game .TEX to .DDS
Based on Ghostbusters texture converter C++ code by Jonathan Wilson
Published in 2010.
i Thanks Paul (from spookcentral.tk/) for the

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

Самым мощным и удобным инструментом для автоматической распаковки инсталляторов является программа Universal Extractor . Она представляет собой оболочку для других распаковщиков, всего поддерживается несколько десятков различных форматов , в том числе таких популярных, как распаковка Inno Setup, InstallShield, Wise Installer и других. Поддерживается русский язык, интеграция в контекстное меню Проводника Windows, продвинутые пользователи могут сохранить и посмотреть лог работы внешних модулей распаковки. На момент написания статьи хостинг с дистрибутивами и исходниками Universal Extractor недоступен, поэтому выложу Universal Extractor здесь.

Теперь переходим к специализированным распаковщиками, ориентированным на конкретный тип инсталляторов. Наиболее мощный и популярный инструмент для создания инсталляторов - бесплатный Inno Setup , он обладает скриптовым языком, позволяющим делать практически неограниченные по опциям дистрибутивы.



, распаковщик инсталляторов Inno Setup версий от 2.0.8 до 5.3.11. Inno Setup Unpacker - консольная утилита, поэтому для удобства работы сделано несколько графических оболочек, например, (русскую версию можно найти на сайте MSILab) или InnoSetup And NSIS Unpacker Shell (требует 7zip и innounp).

InnoSetup.And.NSIS.Unpacker.Shell.1.4.zip (660,484 bytes)




Вспомогательная утилита InnoCry предназначена для обхода паролей на инсталляторах, созданных Inno Setup. Запускаете сперва инсталлятор, в котором требуется ввод пароля, параллельно запускаете InnoCry. Затем InnoCry несколькими способами пытается пропатчить в памяти исполняемый код инсталлятора, чтобы он не требовал ввода пароля. В последней версии также появилась опция активации заблокированных кнопок.

InnoCry.1.2.7.zip (238,909 bytes)




InnoExtractor сделан на базе архиватора 7zip. Позволяет просматривать и извлекать содержимое инсталляторов Inno Setup. Большой плюс в том, что InnoExtractor постоянно совершенствуется и поддерживает как старые, так и новейшие версии этого инсталлятора.

InnoExtractor.4.8.0.156.zip (1,693,514 bytes)




Для распаковки инсталляторов, созданных при помощи или сокращенно NSIS , удобнее всего пользоваться бесплатным архиватором 7zip . Он без труда открывает такие инсталляторы для просмотра и позволяет извлекать из них нужные файлы.

Консольная утилита для извлечения файлов из WISE-инсталляторов . Поддерживаются практически все версии Wise-инсталляторов, в комплекте есть версии распаковщика для DOS, Windows и Linux, а также документация на английском и немецком языках.

E_WISE.2002.03.29.zip (102,968 bytes)


E_WISE.2002.07.01.zip (24,686 bytes)




HWUN (Heuristic Wise UNpacker) также предназначен для распаковки инсталляторов WISE, но в отличие от предыдущей программы использует эвристические алгоритмы для поиска необходимых сигнатур и данных, так что есть большая вероятность, что он будет работать и с более новыми версиями инсталляторов.

HWUN.v0.50a.zip (22,912 bytes)


HWUN.v0.50b.zip (40,509 bytes)


- консольный распаковщик инсталляторов Setup Factory версии 5 и 6. Как признается сам автор, имеют место быть глюки и баги, так что пригодится больше для коллекции.

Setup.Factory.Unpacker.zip (27,161 bytes)




InstallShield (by one exe-file) Unpacker - автоматический консольный распаковщик двух из трех известных типов инсталляторов, созданных программой InstallShield . Это одиночный cab-файл, упакованный в msi-контейнер, а также набор из установочных файлов и cab-архива, также помещенный внутрь msi-файла (Microsoft Installer). Третий тип, использующий шифрование, этим распаковщиком не поддерживается.

InstallShield.Unpacker.0.99.zip (57,056 bytes)