Главная > HOWTO > Декомпилируем инсталляторы InnoSetup

Декомпилируем инсталляторы InnoSetup

В данной статье мы подробно рассмотрим как осуществить полную декомпиляцию программ установки, созданных при помощи популярного средства — 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 — отвечает на все вопросы программы утвердительно (разрешение на перезапись файлов и т.д.).

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

  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, включая её полные исходные коды.

Категории:HOWTO Метки:, , , , ,
  1. HemulGM
    29 апреля 2015 в 18:54 | #1

    Хорошая статья. Без лишних слов. Прочитал, понял и в течении двух минут закрепил на практике. Благодарю. (Хотя, кажется мне я поздновато её прочёл.)

  2. Евгений
    20 марта 2016 в 00:28 | #2

    Проканает только на старых версиях инно.
    На 5.0+ стандартный криптор и почти все используют сторонние dll по дефолту.

  3. 21 марта 2016 в 03:28 | #3

    @Евгений
    Inno Unpacker прекрасно распаковывает даже установщики, собранные новейшей версией InnoSetup — 5.5.8.

  4. Александр
    15 июля 2016 в 21:07 | #4

    Хоть и статья 2014 но у меня вопрос как это дело после разбора собрать? У меня после дизассемблирования файла CompiledCode.bin инно не хочет принимать код выкидывает ошибку хоть я не очень понимаю куда его вставлять (вставлял туда и где весь другой код) но установщик был собран на старой версии 4.2.6 а на ней я вообще не понимаю как это дело все собрать так что пытался на 5.5.9. Просто хотел разобрать/собрать но не получилось 🙁

  5. 16 июля 2016 в 18:45 | #5

    @Александр
    CompiledCode.bin разбирается в псевдокод, его нельзя скомпилировать заново.

  6. Александр
    18 июля 2016 в 18:25 | #6

    То есть для обычного пользователя это не реально? 🙁 А что нужно сделать с ним что бы скомпилировать заново? Или это делается так что бы посмотреть что и как?

  7. 24 июля 2016 в 18:04 | #7

    @Александр
    Нет, собрать такой дизассемблированный CompiledCode.bin из псевдокода не представляется возможным.

  8. Dmitry
    25 октября 2016 в 16:26 | #8

    А не проще открыть инсталятор через 7-Zip?
    т.е. для вас сообщаю что некоторые exe файлы можно открывать через zip архиваторы. (Насчет рара не знаю не пробовал) Через 7-Zip можно и получит исходный код программы НО иногда.
    Не знаю точно но я находил исходный код установщика внутри него!
    А так же можно изменять инфу о приложении по скольку это все хранится (по крайней мере у меня) в отдельных файликах.
    И предупреждение. Некоторые разработчики знают о такой функции архиваторов и потому как они на exe файл как на архив ставят пароль. Просто так предупредил об этом.
    Ну, может кому то понадобится…

  9. 25 октября 2016 в 17:16 | #9

    Dmitry :

    А не проще открыть инсталятор через 7-Zip?

    Далеко не все форматы установочных пакетов InnoSetup можно открыть в 7-Zip. Можете попробовать например описанный в статье пример с SRC Repair. Открыть его в 7-Zip даже последней версии невозможно.

    Dmitry :

    т.е. для вас сообщаю что некоторые exe файлы можно открывать через zip архиваторы. (Насчет рара не знаю не пробовал)

    Разумеется если это по сути SFX-архивы.

    Dmitry :

    А так же можно изменять инфу о приложении по скольку это все хранится (по крайней мере у меня) в отдельных файликах.

    Это хранится в ресурсе. Конечно же можно изменять при помощи редактора ресурсов.

    Dmitry :

    И предупреждение. Некоторые разработчики знают о такой функции архиваторов и потому как они на exe файл как на архив ставят пароль. Просто так предупредил об этом.

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

Представьтесь, пожалуйста! Если ваш комментарий предполагает ответ, мы ответим на него в ближайшее время. Адрес электронной почты должен быть действительным.


Внимание! Запрещено публиковать любые ссылки в тексте комментария, иначе он сразу же будет помечен как нежелательный и не будет опубликован на сайте.