SP (Stack Pointer) Анти-отладочный трюк - x86 - PullRequest
5 голосов
/ 20 сентября 2010

Листинг 7.1. Декриптор каскадного вируса

lea si, Start ; position to decrypt (dynamically set)

mov     sp, 0682    ; length of encrypted body (1666 bytes)

Decrypt:
xor     [si],si ; decryption key/counter 1
xor     [si],sp ; decryption key/counter 2
inc     si  ; increment one counter
dec     sp  ; decrement the other
jnz     Decrypt ; loop until all bytes are decrypted

Start:  ; Encrypted/Decrypted Virus Body 

Обратите внимание, что этот расшифровщик обладает функциями антиотладки, поскольку регистр SP (указатель стека) используется в качестве одного из ключей дешифрования.

Может кто-нибудь объяснить, почему использование регистра SP действует как анти-отладочная функция?Поправьте меня, если я ошибаюсь, но я не думаю, что запуск отладчика меняет структуру стека ...

Заранее спасибо

Ответы [ 4 ]

5 голосов
/ 10 октября 2010

Взятие точки останова или прерывания «вытолкнет данные в стек», что приведет к повреждению байтов данных в области, на которую ссылается указатель стека. Таким образом, если вы поместите точку останова (INT n) в код с помощью отладчика, сам ваш отладочный процесс (столкновение с точкой останова) уничтожит данные, которые этот код пытается расшифровать.

Этот код может работать в DOS, если не происходит прерываний; может быть, они отключают прерывания в первую очередь. Вы не можете реально использовать это в Windows или Linux (в любом случае это 16-битный код).

2 голосов
/ 21 сентября 2010

Если сегмент стека равен сегменту данных (является ли он .com или .exe вирусом? Кажется .com, потому что DS уже равен CS), то любое использование стека (отладчик или даже прерывание) изменитпамять, где указывает ss: [sp], и он будет указывать где-то в теле вируса (потому что он используется в качестве счетчика).

1 голос
/ 20 сентября 2010

Мой x86-fu ржавый, но я, кажется, напоминаю, что большинство инструментов отладки точек останова работают, вызывая сбой в ЦП и утверждая себя как процесс супервизора - который даст вам новый стек и соответственно измененный указатель стека,Таким образом, пошаговое выполнение этого кода даст вам значения sp, которые отличаются от тех, которые процесс обычно видит, если бы он не был захвачен отладчиком.

0 голосов
/ 20 сентября 2010

Большинство отладчиков ожидают, что [e] sp будет действительным и указывает на область стека.Я предполагаю, что возможно, что некоторые отладчики аварийно завершают работу, если sp не указывает на допустимую память, но я не знаю ни одного.

...