Информационная безопасность


Обфускация данных - часть 2


Такие строки также желательно предать обфускации, это можно сделать, просто записывая каждый символ строки, используя его ASCII код, например символ "A" можно записать как 16-ричное число "0х41", но такой метод банален. Наиболее эффективный метод, это когда в код программы в процессе осуществления обфусации добавляется функция, генерирующая требуемую строку в соответствии с переданными ей аргументами, после этого строки в этом коде удаляются, и на их место записывается вызов этой функции с соответствующими аргументами. Например, фрагмент кода (написанный на PERL): print "LOL\n" ; $var = "101" ; после обфускации, будет похож на что-то вроде: sub string { my ($i) = @_ ; my $k = 0 ; $str = "" ; while (1) { l1: if ($i == 1) {$str .= "L";$k = 0;goto l7;} l2: if ($i == 4) {$str .= "S";$k = 0;goto l7;} l3: if ($i == 3) {$str .= "1";$k = -1;goto l7;} l4: if ($i == 4) {$str .= "m";$k = 3;goto l7;} l5: return $str; l6: if ($k == 0) {$str .= "1";$k += 2;goto l5;} else {$str .= "L";$k -= 1;goto l5;} l7: if ($k < 1) {$str .= "0";$k++;goto l6;} } } ...

print string(1)."\n" ; $var = string(3) ;

Также к статическим данным относятся числовые константы, которые могут быть также трансформированы, например число 1 можно представить как: (a + 1 - b), где a = b;

  • разделение переменных. Переменные фиксированного диапазона могут быть разделены на две и более переменных. Для этого переменную "V" имеющую тип "x" разделяют на "k" переменных "v1,...,vk" типа "y" то есть "V == v1,...,vk". Потом создается набор функций позволяющих извлекать переменную типа "x" из переменных типа "y" и записывать переменную типа "x" в переменные типа "y". В качестве примера разделения переменных, можно рассмотреть способ представления одной переменной "B" логического типа (boolean) двумя переменными "b1, b2" типа короткого целого (short), значение которых будет интерпретироваться таким образом:




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



    Книжный магазин