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


Обфускация управления - часть 6


sub func1 { # код func1 } sub func2 { # код func2 } ... можно получить:

... $V = $V*31337 / 13 ; # $V == 0 ... func12() ; ... $V += 7 ; # $V == 7 ... func12() ; ... sub func12 { if ($V) { # код func2 } else { # код func1 } } ...

  • клонирование, данный метод позволяет усложнить анализ контекста использования функций, и объектов используемых в коде исходной программы. Процесс клонирования функций состоит в выделении определенной функции "F", часто используемой в коде программы, после чего над кодом этой функции осуществляется трансформация, и создается ее клон "F`", который также будет добавлен в код исходной программы, при этом часть вызовов функции "F" в коде исходной программы, будет замещена на вызов функции "F`". В результате этого у злоумышленника создастся представление о том, что функции "F", и "F`" различны. Клонирование объектов осуществляется аналогичным способом.

  • трансформация циклов. Циклы встречаются в коде различных программ, и их также можно придать трансформации. Блокирование циклов, заключается в добавлении вложенных циклов в существующие, в результате работа существующих циклов будет заблокирована, на какой-то диапазон значений. Например, имея 2 цикла (PERL):

    for ($i = 1 ; $i =< n ; $i++) { for ($ii = 1 ; $ii =< n ; $ii++) { $a[$i, $ii] = $b[$i, $ii] ; } } можно создать 4 цикла (функция "min" должна возвращать минимальное значение, одного из своих аргументов):

    for ($I = 1 ; $I =< n ; $I += 64) { for ($II = 1 ; $II =< n ; $II += 64) { # первые два цикла будут заблокированы до тех пор, # пока не будут перебраны все значения "n" или # пока не будут перебраны все значения # из промежутка ($I,63) и ($II,63) for ($i = I ; $i =< min($I + 63, n) ; $I += 64) { for ($ii = II ; $ii =< min($II + 63, n) ; $ii++) { $a[$i, $ii] = $b[$i, $ii] ; } } } }

  • Развертка циклов, повторение тела цикла один или более раз (если количество выполняемых циклов известно в процессе осуществления обфускации (например, равно "N"), то цикл, может быть, развернут полностью, в результате повторения его тела в коде N раз):




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