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

         

вскрытие" наложенной команды


Мы видим, что на месте seto bl возникла пара инструкций jmp loc_43401F/std. Какой из двух листингов правильный? Первый или второй? По отдельности — ни тот, ни другой. Они становятся "правильными" только когда их двое! Но удержать эти подробности в голове — нереально, а быстро переключаться между двумя вариантами IDA Pro не позволяет. Остается загонять "альтернативный" листинг в комментарии, но это возможно только тогда их двое. Если же одна и та же машинная команда имеет три и более "точек входа", то комментарии уже не спасают и возникает путаница, вынуждающая вместо дизассемблера использовать трассер (сравнимте дизассемблерный листинг с протоколом трассера, приведенном в листинге 8).

Изощренные обфускаторы отслеживают зависимости по данным, внедряя осмысленные инструкции с "нулевым эффектом". Поясним это на конкретном примере. Допустим, встретилась обфускатору конструкция:

       PUSH EAX             ; <- последнее обращение к eax

       MOV EAX,EBX          ; <- реинициализация eax



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