Исследование InstallShield 6+ – обзор методик — Архив WASM.RU
Рецензенты:
Dmit
- Введение - обзор утилит и доступной информации
- MSI – ресурсы
- IS – ресурсы
- MS CAB/IS CAB/самораспаковывающиеся файлы
- Методики взлома MSI-программ
- COM-интерфейс – радость для кракера?
- Подходы к IS-программам
- Поиск строки в памяти
- Интерпретаторы
- Компиляторы
- Практические примеры
- Заключение
- Благодарности
Статья предназначена только для образовательных целей. Используйте прилагаемые утилиты только для своих собственных программ. Авторы не несут никакой ответственности за возможное незаконное использование материала данной статьи.
В этой статье мы хотим продемонстрировать различные подходы к исследованию программ, использующих технологию Install Shield (в дальнейшем – IS). IS используется при инсталляции практически любого серьезного программного продукта – дистрибутивы Adobe, Microsoft, Intel, Compuware и т.д., и т.п. Подход, предлагаемый в этой статье – декомпиляция сценария инсталляции – трудно назвать новым. В сети уже существуют утилиты и даны некоторые описания, однако, их сложно назвать современными. Все они безнадежно устарели. В представленной на ваше рассмотрение статье мы попробуем восполнить это упущение.
Статья не рассчитана на новичков. Мы предполагаем, что вы умеете пользоваться стандартным джентльменским набором: дизассемблер + отладчик, знаете ассемблер и C++, кроме того, слышали о технологии COM (Component Object Model). Если с COM вы не дружите совсем, не волнуйтесь, линков на литературу будет достаточно. Обещаем также, что вам придется разобраться с MSI.
Введение - обзор утилит и доступной информации Перед тем, как приниматься крушить все и вся, необходимо очень четко представлять себе теоретическую базу. Что такое «инсталляция» программы и какие технологии могут быть задействованы при этом? Технологий оных великое множество, мы не имеем возможности рассмотреть их все, а сфокусируем свое внимание лишь на двух – MSI (Microsoft Installer) и IS (InstallShield).
MSI – ресурсы В качестве обзорной статьи по MSI прекрасно подойдет обзор Gary Chirhart http://www.wise.com/filelib/MSIwhitepaper.pdf.
Мы предполагаем, что вы прочитали эту статью и уже знаете, что такое MSI-файл, столь часто используемый при инсталляции программы. Также, вам уже должно быть известно, что MSI-файл предоставляет возможность доступа к своим данным при помощи SQL-запросов в сочетании с MSI API- функциями. Дополнительно о структуре MSI-файла можно почитать на RSDN.ru: http://www.rsdn.ru/article/install/wininstaller.xml?print
В качестве справочника по MSI API-функциям, разумеется, нужно использовать MSDN.
Нас с вами заинтересует раздел CustomActions в MSI-файле. Почитать о том, что это такое и с чем это едят можно здесь: http://www.codeproject.com/tips/msicustomaction.asp
Самой знаменитой утилитой для работы с MSI, вероятно, является MS ORCA, входящая в состав Platform SDK. Поскольку не все имеют возможность качать 200-мегабайтный минимум из-за одной- единственной утилиты, мы продублировали ее на wasm.ru. Дополнительно стоит ознакомиться со статьей http://www.codeproject.com/file/msiconsole.asp. (обязательно скачайте файлы - для этого требуется регистрация, но она бесплатна)
Есть также продукт под названием AdminStudio от IS Corp. На момент написания статьи текущей версией была 5.5. По своим функциональным возможностям примерно равен ORCA, только занимает не 2 мегабайта как ORCA, а 200. Да, есть еще и Wise for MSI и возможности утилиты достаточно велики. Правда, и размер, опять же, не мал…
У ORCA, однако, есть большой недостаток. В ходе чтения вы увидите, что иногда бывает необходимо извлечь файл, чтобы поправить пару байт или выдрать кусок кода для кейгена. ORCA не позволяет извлекать файлы из MSI-дистрибутива. AdminStudio тоже. WinRAR способен открывать большинство MSI-дистрибутивов, однако не все. Поэтому мы написали собственную утилиту-экстрактор. Вы увидите ее действие по ходу чтения.
IS – ресурсы InstallShield – это надстройка над MSI-движком. Невероятно распространенная технология. Практически любая серьезная контора предлагает свои дистрибутивы в виде IS-обертки.
Невероятно важно четко себе представлять архитектуру IS. Вот очень хороший отрывок из книги: http://www.installsite.biz/en/products/isd_book_ch4.pdf
Мы не станем умолять вас прочесть ее. Скажем просто – если не прочтете, во всей остальной части статьи вам делать уже нечего. А в статье в виде симпатичных диаграммок показано взаимодействие MSI и IS-компонентов. Что такое IDriver.exe? А ISRT.dll? А для чего задействованы файлы, что лежат у вас в директории \Common Files\InstallShield\Driver? А что такое setup.inx и для чего он нужен? Что вообще такое «файл сценария»?
Итак, IS в процессе инсталляции обрабатывает т.н. файл сценария. Файл сценария содержит указания файлам (каким файлам?) IS о том, что делать с дистрибутивом. Куда какие файлы положить, какие значения в реестре прописать, какие сервисы запустить, и наконец, а не спросить ли у пользователя пароль? Разумеется, спектр возможностей setup.inx гораздо шире, однако, в первом приближении сойдет. А теперь вдумайтесь в смысл. Setup.inx говорит, что надо делать, а файлы IS выполняют эти действия, т.е. являются интерпретаторами. Значит, поняв принцип кодировки информации в IS можно сделать с инсталляцией что угодно! Программа просит пароль? Мы поправим inx-файл и программа покорно забудет о пароле!
В ранних версиях IS файл сценария имел расширение ins, в IS 6+ он стал inx. Форматы ins и inx были абсолютно недокументированны – еще бы, ведь зная формат файла и принцип кодирования информации в этом файле, вовсе нетрудно подправить его так, чтобы IS-интерпретатор посчитал, к примеру, любой введенный пароль правильным. В случае ins-файла первым Прометеем стал NaTzGuL, написав пару отличных статей и шикарную утилиту в придачу. А какой выбор был до этого? Часами сидеть в Soft-Ice, пытаясь понять, как же интерпретатор оперирует со строкой пароля и что ему надо. Теперь же стало возможным просто поменять условие в ins-файле (ведь декомпилированный файл имеет С-подобный синтаксис) и все. Вуаля. В случае inx-файла появились две утилиты - Installshield 6/7 script decompiler by sn00pee и Install Shield script decompiler 1.00 beta 15 by NEKOSUKI. Обе доступны с wasm.ru, вот только inx-файлы версий 8+ они уже не понимают (ну-у, скажем так, почти не понимают), а других утилит в сети и нет…
Формат inx-файла тоже неизвестен, документацию и принципы разбора тоже никто описать не озаботился. Авторы, естественно, свои утилиты более не поддерживают – бесплатно, кому оно нужно? Сменились интересы, жизнь скрутила, да мало ли что… Исходники утилит тоже закрыты.
Словом, как видите с ресурсами по IS дело обстоит плоховато. Но есть и пара светлых моментов. Самый главный светлый момент принадлежит некоему zeezee: http://www.woodmann.com/fravia/zee_inst.htm
И эта статья стоит очень многого. Она невероятно полезна и ее стоит прочесть также как и «The InstallShield Developer Run-Time Architecture». Мы собираемся значительно расширить работу zeezee и рассмотреть современные IS компиляторы и интерпретаторы, ведь с момента написания его статьи многое изменилось. Для этого нам потребуются знания о COM и о теории компиляции программ. Первые потребуются потому, что интерпретаторы IS – это COM-сервера, а вторые потому, что компилятор от IS – это, ну, компилятор
Компилятор входит в состав InstallShield DevStudio. Пакет монструозен не меньше, чем AdminStudio, но с точки зрения кракера тоже очень интересен. Последней версией на момент написания статьи была 9.0 SP1. Дополнительную информацию можно найти на сайте http://www.installsite.org
Возможно, вас заинтересует вопрос, а можно ли использовать файл сценария (setup.inx) из чистого MSI-пакета. Ответ – да, можно. Здесь нужно понимать, что MSI ничего не знает об IS и знать не желает – он лежит уровнем ниже. IS опирается на MSI, а не наоборот. IS использует специальную dll – ISScriptBridge.dll для обмена информацией с IS-файлами через RPC. Более подробно мы рассмотрим это в практических примерах.
MS CAB/IS CAB/самораспаковывающиеся файлы Часто MSI-дистрибутивы хранят данные в MS CAB-файлах. Все пакеты от MS устроены именно так. MS CAB файл можно узнать по сигнатуре MSCF в самом начале файла. Утилиты от MS и WinRAR прекрасно умеют открывать такие файлы. Кроме того, формат MS CAB документирован в MSDN.
Иногда можно встретить самораспаковывающиеся exe-файлы, содержащие внутри себя здоровенный MS CAB-файл. В этом случае PE-пришлепки (самого обычного исполняемого PE-файла) входит распаковать этот файл куда-нибудь, спросит у пользователя пароль, если необходимо и т.д., и т.п. Такие файлы тоже просто распаковать WinRAR. Примерами являются инсталляционный файл от Adobe Acrobat 6.0 или дистрибутив VTune 7.1. Выглядит это так:
000485a0h: 01 98 4D 53 43 46 00 00 00 00 CF 4E EE 00 00 00 ; . © Volodya, Flankerx
Исследование InstallShield 6+ – обзор методик
Дата публикации 5 апр 2004