Об одном методе маскировки программ


Разрушение структурности графа потока управления - часть 2


Возвращающие предикаты могут быть построены на основе хэш-функций. Пусть хэш-функция f отображает целочисленный тип в булевский. Введём переменную v, которую будем использовать как аргумент f. Таким образом, предикат P равен f(v). Установка

(a) Исходный граф. (b) Преобразованный граф
Рис. 3. Схема преобразования зацепления дуг

public interface ReturnPredicateFactory { public String getReturnPredicateKindName(); public String getReturnPredicateKindDescription(); public boolean mayGenerateJumps(); public ReturnPredicateGenerator newInstance (ObfuscationEnvironment env); } public interface ReturnPredicateGenerator { public ReturnPredicateFactory getFactory(); public MIFInstr emitType(MIFInstr p); public MIFInstr emitGlobalDecl(MIFInstr p); public MIFInstr emitLocalDecl(MIFInstr p); public MIFInstr emitSetFalse(MIFInstr p); public MIFInstr emitSetTrue(MIFInstr p); public MIFInstr emitTest(MIFInstr p, MIFElem e, MIFInstr d[]); public Set getDepends(); public MIFInstr emitInit(MIFInstr p); public MIFInstr emitFini(MIFInstr p); }

Рис. 4 Интерфейсы для возвращающих предикатов

значения P в true эквивалентна присваиванию переменной v любого значения x, на котором f(x) = true. Такие значения x могут браться из массива Ptrue, который индексируется произвольным выражением e. Тогда установка значения предиката P в true выполняется присваиванием v < - Ptrue[e]. Установка значения предиката P в false выполняется аналогично.Для построения возвращающих предикатов могут быть использованы динамические структуры данных, аналогично тому, как они использовались для построения счётчиков.

(a) Исходный граф. (b) Преобразованный граф
Рис 5. Схема построения "псевдоцикла"

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


Начало  Назад  Вперед