Обфускация и ее преодоление

         

Как работает обфускатор


Как говорят медики, СПИД— это еще не приговор. Тоже самое и обфускация. Далеко не каждый обфускатор использует продвинутые методики "запутывания" и высаживаться на измену при этом слове не надо.

В простейшем случае, полиморфный генератор просто "накачивает" программу кучей незначащих команд типа nop, xchg reg,reg, or reg,reg[2]; никогда не выполняющимися переходами типа xor reg,reg/jnz junk, где xor – значимая команда, а junk – "мертвый код", и т. д. Вот, например:

       or     ch, ch               ; "мусор", не воздействующий на регистр ch,

                                  ; но воздействующий на регистр флагов, однако

                                  ; это воздействие перекрываются последующим xor

      

       xor    eax,eax                    ; потенциально значимая команда

                                  ; (почему "потенциально" будет пояснено ниже)

      

       seto   bl                   ; "мусор", устанавливающий bl

в 1, если есть

                                  ; переполнение, а после xor

его всегда нет



      

       repne  jnz short loc_43409A ; "мусор", передающий управление если не ноль,

                                  ; но после xor

флаг нуля всегда установлен,

                                  ; плюс бессмысленный префикс repne

      

       rep    jnp short loc_43408D ; "мусор", передающий управление если нечет

                                  ; но после xor

флаг четности всегда установлен

      

       jo     short loc_434094     ; "мусор", передающий управление если флаг

                                  ; переполнения установлен, а он сброшен xor

      

       xchg   ebx,ebx                    ; "мусор", обмен регистров ebx

местами



Содержание раздела