Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




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

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

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

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

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

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

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

 

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

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

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

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

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




Поделиться с друзьями:


Дата добавления: 2014-01-11; Просмотров: 699; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.