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


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


В результате код до обфускации (язык Си):

short X = 12, Y = 4 ; X += 5 ;

трансформируется в:

int Z = 262156 ; Z += 5 ;

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

    @A = qw{a b c d e f} ; $i = 3 ; $A[$i] = ... ;

    можно заменить на:

    @A1 = qw{2 4 0} ; @A2 = qw{1 3 5} ; $i = 3 ; if (($i % 2) == 0) { $A1[$i / 2] = ... ; } else { $A2[$i / 2] = ... ; }

    Под сворачиванием массива понимается создание из одномерного массива, двумерного. Например, одномерный массив "A" из предыдущего примера, имеющий размер 5 можно заменить двумерным массивом "B" размером 2, после чего код (язык С++):

    int A[] = {1, 2, 3, 4, 5, 6} ; for (int i = 0 ; i < 6 ; i++) { A[i] = A[i] + 1 ; printf("%d\n", A[i]) ; }

    можно изменить на:

    int A[2][3] = {{1,2,3}, {4,5,6}} ; for (int i = 0 ; i < 2 ; i++) { for (int ii = 0 ; ii < 3 ; ii++) { A[i][ii] = A[i][ii] + 1 ; printf("%d\n", A[i][ii]) ; } }

  • изменение иерархий наследования классов, осуществляется путем усложнения иерархии наследования при помощи создания дополнительных классов или использования ложного разделения классов.

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




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



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