Пример программы, содержащей запутанный код
Определение, заданное формулой (2), является менее строгим,
чем (1) и ограничивает лишь универсальность преобразований
OptAlg
,
что наиболее соответствует практической задаче обфускации коммер-
ческих приложений.
Рассмотрим замкнутую систему, изображенную на рисунке:
О
(
М
)
—
подпрограмма, к которой были применены запутывающие преобразо-
вания;
А
— подпрограмма, вызывающая подпрограмму
О
(
М
)
; входные
данные — вектор
X
размерностью
p
; выходные данные — вектор
Y
размерностью
q
.
Дадим определение функционального свойства подпрограммы.
Определение 3.
∀
p
1
, p
2
∈
П
(
f
p
1
=
f
p
2
⇒
(
p
1
∈
π
⇔
p
2
∈
π
))
,
(3)
где
π
⊆
П
— функциональное свойство подпрограммы;
П
— мно-
жество всех подпрограмм, удовлетворяющих условию эффективности
(выполняющихся за полиномиальное время);
p
1
, p
2
— подпрограммы,
принадлежащие множеству
П
;
f
p
1
, f
p
2
— функции, вычисляемые со-
ответственно подпрограммами
p
1
, p
2
.
Введем левостороннюю операцию “*”, называемую умножением
функциональных свойств и фактически являющуюся последователь-
ным выполнением инструкций с этими функциональными свойствами.
Эта операция будет иметь следующие свойства.
Свойство 1.
π
1
∗
π
2
=
π
2
∗
π
1
.
Свойство 2.
Существование единичного элемента.
Единичным элементом
е
на множестве функциональных свойств
П
будет являться функциональное свойство такое, что
π
∗
e
=
e
∗
π
=
π.
Свойство 3.
Ассоциативность.
(
π
1
∗
π
2
)
∗
π
3
=
π
1
∗
(
π
2
∗
π
3
)
.
Следует особо оговорить смысл функциональных свойств. Далее
под функцией будем понимать некоторый алгоритм, который получа-
ет на вход некоторое число векторов, называемых векторами входных
ISSN 0236-3933. Вестник МГТУ им. Н.Э. Баумана. Сер. “Приборостроение”. 2009. № 2 95