Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Шифрование кода программы как универсальный метод противодействия отладке и дизассемблированию

Читайте также:
  1. CALL — Вызов подпрограммы
  2. I. Определение и проблемы метода
  3. I. ОПРЕДЕЛЕНИЕ И ПРОБЛЕМЫ МЕТОДА
  4. I. ОРГАНИЗАЦИОННО-МЕТОДИЧЕСКИЙ РАЗДЕЛ
  5. I. ФИЛОСОФСКО-ТЕОРЕТИЧЕСКИЕ ОСНОВЫ ПРОГРАММЫ
  6. I. Экспертные оценочные методы
  7. II МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ ПО ПОДГОТОВКЕ К ПРАКТИЧЕСКОМУ ЗАНЯТИЮ

Рассмотренные выше приемы противодействия отладке и дизассемблированию имеют один серьезный недостаток – они привязываются либо к особенностям процессора, либо к особенностям отладчиков (дизассемблеров). Квалифицированные злоумышленники рано или поздно их обойдут.

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

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

Выделяют два способа шифрования кода программы – статическое и динамическое.

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

Реализация простейшей процедуры шифрования/дешифрования кода программы может выглядеть следующим образом:

  LEA SI, beginCrypt; начало зашифрованного блока
Repeat: Xor byte ptr [SI], 077h  
  INC SI  
  CMP SI, offset endCrypt  
  JNA Repeat  
beginCrypt    
   
endCrypt    

При анализе зашифрованных блоков программы дизассемблер выдаст неверные результаты.

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

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

 


Дата добавления: 2015-07-08; просмотров: 198 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Базовые методы противодействия дизассемблированию программного обеспечения| ИНТЕРАКТИВНЫЙ ДИЗАССЕМБЛЕР IDA PRO

mybiblioteka.su - 2015-2018 год. (0.004 сек.)