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

         

протокол трассера


Намного нагляднее дизассемблерного листинга, правда? Теперь не нужно прыгать по условным переходам, гадая какие из них выполняются, а какие нет, к тому же естественным образом исчезает проблема перекрытия машинных команд. Обратите внимание на адреса 434012h, 00434013h и 00434016h. Ба! Так это же наши "перекрытые" команды! То, что дизассемблеру удавалось показать с таким трудом, трассер отдает нам задаром! Это реальный поток выполнения программы, в котором много мусора, но по крайней мере нет скрытых команд, с которыми приходится сталкиваться в дизассемблере.

Полученный протокол трассировки можно (и нужно!) прогонять через различные программы-фильтры (их так же придется написать самостоятельно), распознающие и удаляющие мусорные инструкции. Впрочем, эту операцию можно выполнить и вручную, загрузив протокол в любой редактор (например, в тот, что встроен в FAR). После нескольких минут работы мы получим следующий реально значимый код:

001B:00434001  E800000000  CALL   00434006

001B:00434006  5D          POP    EBP

001B:00434077  33C9        XOR    ECX,ECX

001B:004340C3  33C0        XOR    EAX,EAX

001B:004340D3  8B0424             MOV    EAX,[ESP]

001B:004340DB  C60090             MOV    BYTE PTR [EAX],90

001B:00434105  83ED06             SUB    EBP,06



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