Автоматическая защита Guardant — часть 1

Для начала краткое введение. Утилита автозащиты Guardant — это инструмент, который позволит, не имея ровным счетом никаких знаний и навыков, быстро, в течение нескольких минут, «привязать» некоторую программу к электронному ключу Guardant, защищая ее тем самым от компьютерного пиратства. Думаю, для введения этого достаточно.

Обо всех возможностях автозащиты Guardant можно достаточно подробно узнать из нашей документации и от людей, непосредственно занимающихся распространением продукта. Мне, как разработчику, рассказывать об этом не интересно, поэтому делать этого я не буду. В данном цикле статей я расскажу о качествах, связанных, прежде всего, с защищенностью программы, «накрытой» нашей автозащитой.

Итак, сначала разберемся, как устроены подобного рода утилиты.

Большинство из них использует технологию «конверт», которая заключается в том, что код и данные защищаемого приложения шифруются при помощи электронного ключа. В тело приложения внедряется startup-код, который мы называем «маленькой вакциной». «Маленькая вакцина» — это позиционно-независимый код, который выполняет ряд функций, в числе которых общение с внешним модулем grdvkc32.dll — «большой вакциной». Роль «большой вакцины» — обращение к электронному ключу + еще несколько секретных вещей

Тут возникает вопрос: а почему бы не внедрить все в exe-файл защищаемого приложения? Зачем вообще нужен какой-то внешний модуль? Ага, наверное ленивые программисты Guardant-а просто не в состоянии это сделать! Уверяю вас, уважаемые читатели, что это не так. И сделано так, как сделано, было совершенно не случайно, а с целью упрощения и удешевления поддержки защищенного продукта.

Представим такую ситуацию: некий клиент компании «Актив» защитил свои приложения с помощью автозащиты и распространил их среди своих пользователей. Вдруг, при выпуске новой ОС от всеми нами горячо любимой компании Microsoft, защищенные приложения отказываются работать. Такое действительно может случиться, т.к. для повышения защищенности необходимо применять некоторые плохо документированные возможности ОС. Так вот, что же делать нашему клиенту?

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

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

Практически любая Windows-программа, которая делает что-то полезное, не может обходиться только теми функциями, которые написал программист. Как правило, используются уже готовые функции различных внешних API. Получается, что программа должна импортировать функции из внешних динамических библиотек (как системных dll, так и любых других) в достаточно большом количестве.

Итак, если посмотреть у нас в документации, можно найти опцию автозащиты под названием /IMPORT_HOOK. Как видно из названия, она что-то делает с функциями, которые нормальное приложение импортирует. Если применить эту опцию, то все функции из таблицы импортов (есть такая в исполняемых файлах Windows) будут указывать на некоторую программную «заглушку». Эта заглушка необходима для корректной работы механизма опроса электронного ключа. Таким образом, сняв дамп, аналитик получает неработоспособное приложение, в котором необходимо восстановить эту самую таблицу импортов.

Можно попытаться восстановить таблицу импортов при помощи автоматических средств, но нам пока не известно о наличии утилит, которые могли бы это делать корректно для нашей автозащиты в автоматическом режиме. Одна из самых мощных и популярных утилит автоматической распаковки (не пишу ее название, чтобы не делать ей рекламу, кому надо — знают ), позволяющая снять около 200 конвертов от различных производителей, этого делать не умеет. Это означает, что с большой вероятностью аналитику придется делать это вручную, что увеличит время и стоимость взлома, а, следовательно, сделает этот самый взлом неэффективным.

На сегодня хватит.
С уважением, SDA.

Вернуться в ленту


Комментарии к статье

07-02-2009 17:40:39 # Комментировал backdoorman Было бы очень не лишним разбавить этот текст иллюстрациями(картинками) описываемых механизмов ;), так оно будет лучше восприниматься.
По поводу не возможности автоматизации правки импортов это вы погорячились, ибо один раз раскопав и осознав алго вашего перенаправления, можно написать тулзу на том же IDC, которая все это будет править автоматом. В общем из статьи не очевидно, либо у вас мега полиморфный алго, который не так то просто понять, либо вы имели ввиду распространенные тузлы для восстановления импортов (не буду называть какие), просьба прояснить этот момент O_o
06-03-2009 15:56:32 Ответил SDA Насчет иллюстраций подумаю. Я не имею большого практического опыта в написании подобного рода статей и буду рад услышать любые комментарии. Насчет IDC скрипта не уверен, что все так просто, хотя бы потому, что если бы все было просто, скрипт бы уже был. Благо механизм защиты импортов существует у нас уже достаточно долго. Мы его постоянно модернизируем и стараемся как можно более усложнить задачу автоматического восстановления таблицы импорта. В любом случае, если у Вас имеется скрипт IDC, позволяющий восстановить таблицу импорта после применения нашей автозащиты, то мы с удовольствием его бы проанализировали, чтобы впоследствии еще улучшить нашу автозащиту.
05-03-2009 00:40:35 # Комментировал Юрий "Если бы все было встроено в защищаемый модуль, то у него возникла бы необходимость защитить свое приложение заново и распространить его <...> пользователям. В нашем же случае конечным пользователям достаточно будет скачать у нас большую вакцину" - для пользователей это практически одно и то же. Они обращаются к производителю ПО и скачивают файл по указанной им ссылке. К тому же вакцины от других версий часто не подходят.

А IMPORT_HOOK существенно замедляет работу программы (C++/MFC). Приходится там процент и длину ставить минимальными, или вообще не использовать.
06-03-2009 15:27:19 Ответил SDA Юрий, спасибо за вопросы.
1. Относительно /IMPORT_HOOK. Мы стараемся обеспечивать максимально удобное соотношение защищенность-возможность использования. Поэтому и были введены такие параметры, как процент и длина защищаемых импортируемых функций. Для каждого приложения они, разумеется, свои. Можно не использовать эту опцию или использовать другие конверты, где механизмы защиты импортов более просты. Но не стоит забывать, что в данном случае риск автоматической деактивации такой защиты может существенно возрасти. Немного приоткрою завесу и скажу, что в данный момент мы ведем активную работу над новой утилитой автозащиты, в которой учтено это и много других замечаний, поступивших от наших клиентов.

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

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

Адрес офиса: город Москва, Брошевский переулок, дом 6, строение 1
Многоканальный телефон:
+7 (495) 925-77-90

1994-2016 © Компания «Актив».

Авторизация в системе

Логин:
Пароль:

больше не спрашивать
 
Зарегистрироваться · Вспомнить пароль