Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции / Лекция 15.ppt
Скачиваний:
115
Добавлен:
28.06.2014
Размер:
851.97 Кб
Скачать

Запутывание структур

данных

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

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

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

Изменение потока выполнения программы

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

2.Вынесение проверки в обработку сообщений типа WM_PAINT (подмена кодов сообщений может выполняться непосредственно в цикле обработки сообщений).

Виды обфускации

на уровне исходного кода;

на уровне машинного кода;

на уровне промежуточного кода (например, на уровне байт-кода программ на языке Java).

уровне исходного кода на

языке C++

int nCount = 100;

float fTaxRate = 0.2, orig_price[1000], tax[1000], price [1000];

for (int i=0; i< nCount; i++)

{

tax[i] = orig_price[i] * fTaxRate; price[i] = orig_price[i] + tax[i];

}

• Код после обфускации: float b[1000], c[1000], d[1000];

for(int a=0;a<100;a++){b[a]=c[a]*0.2;d[a]=c[a] +b[a];}

Достоинства программ-

обфускаторов

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

Недостатки обфускаторов

код программы после ее обфускации может стать более зависимым от программно- аппаратной платформы или компилятора;

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

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

Недостатки обфускаторов

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

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

Соседние файлы в папке Лекции