Анимэ и soft-ice
Некоторые отладчики (такие например, как OllyDbg) имеют одну полезную фишку, которую не имеет soft-ice. А именно— возможность пошаговой анимированной трассировки с условными точками останова на каждом ходу. Например, можно поставить точку останова на конструкцию 'TEST EAX,EAX/Jx XXX', заставив отладчик всплывать всякий раз когда EAX будет равен нулю или любому другому значению на наш выбор. Что-то вроде 'BPX IF (*word(EIP)==0xC085 && (*byte(EIP+2) & 70h)==70h)'. Здесь 0xC085 – опкод команды TEST EAX,EAX, а 70h — маска инструкции Jx, ну а вся точка останова в целом позволяет отлавливать код типа "if (func(1,2,3)!=0)…", которые часто используется в защитных механизмах.
Soft-ice таких шуток не понимает и требует, чтобы адрес точки останова был задан явно, например 'BPX EIP...', но и в этом случае он создает одну единственную точку останова, опираясь на текущее значение EIP (каким оно было в момент создания точки останова) и отказывается автоматически "пересчитывать" его по ходу следования программы. Какая жалость! А ведь ради этой возможности многие хакеры отказываются от привычного soft-ice и мигрируют в сторону OllyDbg, между тем решение есть!
Макросы могут быть вложенными! Попробуйте написать 'MACRO XYZ="T; XYZ;"', наберите XYZ и посмотрите что получится. soft-ice начнет анимировать программу! Не слишком быстро, но все-таки достаточно производительно. Во всяком случае для распаковки навесных упаковщиков вполне подойдет.
Коль скоро мы научились анимировать программу, создание условных точек уже не станет проблемой. Вот, например, такой полезный макрос: 'MACRO XYZ = "BPX EIP;T;XYZ;"'. Что он делает? А вот что! Он выделяет трассу следования программы, помечая выполненный код и мы сразу видим какие условные переходы выполнялись, а какие нет (см. рис. 3). Только необходимо учитывать, что кол-во точек останова ограничено и потому их переодически необходимо снимать.