Читайте также: |
|
Рассмотренные выше приемы противодействия отладке и дизассемблированию имеют один серьезный недостаток – они привязываются либо к особенностям процессора, либо к особенностям отладчиков (дизассемблеров). Квалифицированные злоумышленники рано или поздно их обойдут.
Наиболее предпочтительным способом защиты программного обеспечения от отладки и дизассемблирования является способ, основанный на шифровании кода программы на некотором секретном ключе. При этом предъявляется требование того, чтобы секретность ключа не могла быть нарушена путем исследования кода программы и дискового пространства ПК. Таким образом, ключ не должен фигурировать ни в коде программы, а также не должен храниться ни в файле, ни в реестре, где он может быть обнаружен путем исследования работы программы различными средствами мониторинга.
Допустим, например, что секретный ключ расшифровывает рабочий код программы, а берется, из электронного ключа, либо представляет собой вводимую пользователем последовательность. В данном случае взлом становится очень трудоемким, а иногда и невозможным в приемлемые сроки. Затягивание времени взлома позволит все это время поддерживать объемы продаж.
Выделяют два способа шифрования кода программы – статическое и динамическое.
В первом случае модуль дешифровки отрабатывает только один раз, после чего исходный код будет полностью восстановлен. Такой подход имеет простую реализацию, но крайне неэффективен. Злоумышленник может снять дамб памяти в момент окончания работы модуля дешифровки. Это трудно сделать при динамической дешифровке, когда ни в какой момент времени код не будет расшифрован полностью. При вызове процедуры он расшифровывается, а при выходе – зашифровывается вновь.
Реализация простейшей процедуры шифрования/дешифрования кода программы может выглядеть следующим образом:
LEA SI, beginCrypt; | начало зашифрованного блока | |
Repeat: | Xor byte ptr [SI], 077h | |
INC SI | ||
CMP SI, offset endCrypt | ||
JNA Repeat | ||
beginCrypt | ||
… | ||
endCrypt |
При анализе зашифрованных блоков программы дизассемблер выдаст неверные результаты.
При динамической расшифровке не следует зашифрованные процедуры располагать следом одну за другой или передавать параметры в процедуры шифрования и дешифрования единообразно, иначе злоумышленник может достаточно быстро дешифровать данные процедуры с помощью специально написанных скриптов в дизассемблере IDA PRO, либо аналогичных ему. Рекомендуется располагать между зашифрованными процедурами случайное число незначащих байтов.
При атаке на шифр считается, что криптоалгоритм известен злоумышленнику с точностью до реализации и требуется найти только его ключ.
Дата добавления: 2015-07-08; просмотров: 368 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Базовые методы противодействия дизассемблированию программного обеспечения | | | ИНТЕРАКТИВНЫЙ ДИЗАССЕМБЛЕР IDA PRO |