小编use*_*188的帖子

即使修补了指令,当使用INT 3(0xCC)软件断点时,调试器如何保证正确性?

我读过INT 3(0xCC)用于软件断点.

它由(例如)调试器通过覆盖存储器中的实际程序代码来设置.

我还读到INT 3是一个"陷阱"而非"故障"异常,这意味着堆栈上的地址是INT3指令后面的指令地址.

如果未重新执行修补的指令,调试器如何保证正确性?

debugging x86 assembly

22
推荐指数
1
解决办法
2万
查看次数

SP(堆栈指针)反调试技巧 - x86

清单7.1 Cascade Virus的Decryptor

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 
Run Code Online (Sandbox Code Playgroud)

请注意,此解密器具有antidebug功能,因为SP(堆栈指针)寄存器用作解密密钥之一.

有人可以解释为什么使用SP寄存器就像一个反调试功能?如果我错了,请纠正我,但我不认为运行调试器会改变堆栈布局......

提前致谢

x86 assembly cracking reverse-engineering software-protection

5
推荐指数
2
解决办法
1528
查看次数