Методы защиты программ от исследования

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

• инструменты динамического исследования ПО;

• инструменты статического исследования ПО.

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

Как защитить программу от Взлома на C#

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

Два наиболее известных типа программ, предназначенных для исследования ПО, как раз и относятся к разным классам: это отладчик, эмулирующие отладчики (динамическое средство) и дизассемблер (средство статистического исследования). Если первый широко применяется пользователем для отладки собственных программ и задачи построения алгоритма для него вторичны и реализуются самим пользователем, то второй предназначен исключительно для их решения и формирует на выходе ассемблерный текст алгоритма.

Помимо этих двух основных инструментов исследования, можно использовать:

• «дискомпиляторы», программы, генерирующие из исполняемого кода программу на языке высокого уровня;

• «трассировщики», сначала запоминающие каждую инструкцию, проходящую через процессор, а затем переводящие набор инструкций в форму, удобную для статического исследования, автоматически выделяя циклы, подпрограммы и т.п.;

• «следящие системы», запоминающие и анализирующие трассу уже не инструкции, а других характеристик, например вызванных программой прерывания.

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

Защита от отладчиков.

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

Лекция 1: Классификация вредоносных программ. Методы защиты

Примером такого инструмента для РС-совместимых компьютеров является отладчик Softice фирмы NuMega. Для системы защиты ПО отладчики опасны тем, что позволяют проследить за ее работой, что может привести к взлому системы защиты. Поэтому в системах защиты ПО часто предусматривают защиту от отладчиков.

Исходя из обобщенной схемы системы защиты ПО, защиту от отладчиков следует отнести к подсистеме противодействия нейтрализации защиты. Общий принцип работы антиотладочной защиты таков. Блок регистрации характеристик среды получает характеристики программно-аппаратной среды, в которой работает ПО, и передает их в подсистему противодействия нейтрализации защиты.

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

Читайте также:
Автоматизированные бухгалтерские программы примеры

Регистрация отладчиков обычно осуществляется по специфическим особенностям программно-аппаратной среды, указывающих на наличие того или иного отладчика — «следам» отладчика. «Практически каждый отладчик имеет свои специфические особенности, знание и использование которых позволит разработчику значительно повысить надежность создаваемых средств защиты» [12]. Такие особенности специфичны для каждого из отладчиков, хотя в некоторых ОС существуют и штатные средства регистрации наличия в памяти отладчика, например, в Windows существует специальный программный интерфейс средств отладки.[12]

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

Защита от эмулирующих отладчиков.

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

Так же эмулируются все изменения состояния программно-аппаратной среды, которые вызвала бы отлаживаемое ПО, если бы исполнялось в реальности. Такой отладчик имеет гораздо более высокую степень контроля за действиями ПО из-за того, что виртуальная машина логически изолирована от реальной программно-аппаратной среды.

Примером такого инструмента является эмулирующий отладчик TRW. Таким образом, система защиты ПО теоретически не имеет возможности ни обнаружить такой отладчик, ни повлиять на каким-либо образом на него, например, выгрузив его.

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

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

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

Защита от дизассемблеров.

Читайте также:
Landi renzo omegas программа настройки

Дизассемблеры — это средства статического анализа исполняемого кода. Их применение угрожает системе защиты ПО тем, что с их помощью злоумышленник, изучив полученный дизассемблером листинг, может раскрыть алгоритм ее работы. Современные дизассемблеры снабжены широким диапазоном средств для полноценного изучения кода человеком в полуавтоматическом режиме.

Наиболее ярким представителем инструмента такого рода является дизассемблер IDA.[13] Некоторые способы защиты кода, рассмотренные ранее при анализе способов защиты кода от исследования, эффективно действуют против дизассемблеров. В первую очередь, это шифрование исполняемых модулей. Очевидно, что при шифровании исполняемого модуля у исследователя не будет возможности корректно дизассемблировать и проанализировать код и данные до тех пор, пока модуль не будет расшифрован.

Существуют также специфические средства защиты от дизассемблеров, использующие ошибки реализации в конкретных дизассемблерах. Это, например, применение в реализации защиты ПО недокументированных машинных команд, которые распознаются процессором при работе ПО, но могут не распознаваться некоторыми дизассемблерами и т.д.

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

Источник: studbooks.net

Методы защиты программ от исследования

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

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

Таким образом, защищаемая от исследования программа должна включать следующие компоненты:

• зашифрованную секретную часть;

Инициализатор должен обеспечивать выполнение следующих функций:

• сохранение параметров операционной среды функционирования (векторов прерываний, содержимого регистров процессора и т.д.);

• запрет всех внутренних и внешних прерываний, обработка которых не может быть запротоколирована в защищаемой программе;

• загрузка в оперативную память и дешифрование кода секретной части программы;

• передача управления секретной части программы.

Секретная часть программы предназначена для выполнения основных целевых функций программы и защищается шифрованием для предупреждения внесения в нее программной закладки.

Деструктор после выполнения секретной части программы должен выполнить следующие действия:

• обнуление секретного кода программы в оперативной памяти;

• восстановление параметров операционной системы (векторов прерываний, содержимого регистров процессора и т.д.), которые были установлены до запрета неконтролируемых прерываний;

• выполнение операций, которые невозможно было выполнить при запрете неконтролируемых прерываний;

• освобождение всех незадействованных ресурсов компьютера и завершение работы программы.

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

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

Читайте также:
Что означает внедрение программы

• периодический подсчет контрольной суммы области оперативной памяти, занимаемой защищаемым исходным кодом; сравнение текущей контрольной суммы с предварительно сформированной эталонной и принятие необходимых мер в случае несовпадения;

• проверку количества занимаемой защищаемой программой оперативной памяти; сравнение с объемом, к которому программа адаптирована, и принятие необходимых мер в случае несоответствия;

• контроль времени выполнения отдельных частей программы;

• блокировку клавиатуры на время отработки особо секретных алгоритмов.

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

Источник: mydocx.ru

Средства исследования программ

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

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

Средства исследования программ

Основными инструментами для исследования программ являются дисассемблеры и отладчики.

Дисассемблирование — это получение из исполняемого кода программы код на языке ассемблера.

Дисассемблер — программа, осуществляющая дисассемблирова­ние.

Интерактивный дисассемблер — программа, тесно взаимодействующая с пользователем в процессе дисассемблирования.

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

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

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

· шестнадцатеричные просмотрщики — редакторы;

· редакторы таблиц экспорта/импорта;

· так называемые файловые мониторы, позволяющие отслеживать операции работы с файлами;

· а также мониторы реестра, создающие протокол обращений к реестру

· и многие другие.

Например, с помощью файлового монитора (FileMonitor) взломщик может отследить работу защищенной программы с файлами и обнаружить ключ (пароль), хранящийся в некотором файле. Произведя анализ протокола обращений к реестру с помощью монитора реестра (RegMon), взломщик может обнаружить ключ (пароль), хранящийся в системной базе данных Registry.

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

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

Тем не менее отказываться от использования приемов и методов защиты от дисассемблирования кода программы и ее работы под отладчиком нельзя.

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

Считая защиту от дисассемблирования и отладки, рассчитанной на взломщика средней квалификации, назовем такую защиту затруднением анализа программ. Рассмотрим ее основные моменты.

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:

Источник: studopedia.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru