В данной статье мы подробно рассмотрим как осуществить полную декомпиляцию программ установки, созданных при помощи популярного средства – InnoSetup. На выходе мы получим всё содержимое архива, а также полный исходный код установщика.
Введение
В качестве примера мы будем осуществлять декомпиляцию нашего проекта SRC Repair, распространяющегося по лицензии GNU GPL v3, программа установки (далее “инсталлятор”) которого собрана при помощи InnoSetup.
Загрузка компонентов
Для начала нам потребуется утилита Inno Setup Unpacker версии 0.40 (поддерживает все версии InnoSetup до 5.5.4 включительно). Загрузить её можно здесь. Распакуйте архив в любой каталог, например, C:\iunp\.
Также для разбора секции code, которая компилируется в бинарный файл, нам потребуется дизассемблер ROPS, который можно взять здесь. Распаковать его следует в тот же каталог.
Теперь скачаем SRC Repair последней версии по прямой ссылке.
Краткая справка по декомпилятору
Т.к. утилита InnoSetup Unpacker (далее просто “Unpacker”) работает из командной строки, рассмотрим основные ключи:
innounp.exe [команды] [параметры] <имя_установщика.exe> [@список_файлов] [маска]
В квадратных скобках указываются необязательные параметры. Единственным обязательным является имя файла инсталлятора, который мы будем декомпилировать.
Список допустимых команд утилиты innounp:
- -v – вывести список файлов архива (с размерами и датами создания/изменения);
- -x – распаковать файлы из архива в текущий каталог (допускается указать параметр -d для указания другого каталога назначения);
- -e – распаковать файлы в текущий каталог без соблюдения внутренней структуры каталогов;
- -t – запустить проверку целостности архива.
Список допустимых параметров утилиты innounp:
- -b – включает неинтерактивный режим. Рекомендуется для использования в скриптах;
- -q – подавляет вывод на экран прогресса извлечения файлов из архива;
- -m – осуществить глубокую декомпиляцию (при этом будут собраны деинсталляторы, а также извлечён бинарный файл секции code);
- -pPASS – задаёт пароль для архива (если он был им защищён);
- -dDIR – указывает каталог, в который будет распаковано содержимое архива (допускаются как абсолютные, так и относительные пути);
- -fFILE – то же, что и -p, но пароль считывается из указанного текстового файла;
- -a – включает обработку дублирующихся файлов внутри архива;
- -y – отвечает на все вопросы программы утвердительно (разрешение на перезапись файлов и т.д.).
Декомпиляция примера
- Откроем командную строку Windows ( Пуск - Выполнить - cmd.exe).
- Перейдём в каталог, в который установили Unpacker ( **C:\iunp**):
cd /D "C:\iunp\"
- Скопируем в этот же каталог установщик, который будем декомпилировать (в нашем случае это SRC Repair).
- Выполним в консоли команду:
innounp.exe -x -m -dout srcrepair_180_final.exe
- В случае успеха в каталоге C:\iunp\out\ мы найдём всё содержимое установщика, а также файл с расширением *.iss, который является полным исходным кодом модуля установки (включая комментарии).
- Если в скрипте установки были вставки кода, то в каталоге C:\iunp\out\embedded\ будет находиться бинарный файл CompiledCode.bin, который содержит его в скомпилированном виде.
Дизассемблирование файла CompiledCode.bin
- Снова откроем командную строку Windows.
- Перейдём в каталог, в который распаковали ROPS (C:\iunp\):
cd /D "C:\iunp\"
- Выполним в консоли команду:
disasm.exe out\embedded\CompiledCode.bin out.asm
- В файле C:\iunp\out.asm мы найдём дизассемблированный код.
Заключение
Таким образом, мы получили полное содержимое программы установки, собранной при помощи InnoSetup, включая её полные исходные коды.