汇编级别反调试(1)

本文介绍了多种在汇编级别检测程序是否被调试的方法,包括INT 3、INT 2D、DebugBreak、ICE、堆栈寄存器检查、指令计数、POPFD 和 Trap 标志以及针对OllyDbg v1.10的指令前缀技术。通过这些技术,开发者可以防止调试器对程序进行分析和调试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、INT 3

指令INT3是用作软件断点的中断。在没有调试器的情况下,在到达INT3指令后,将生成异常EXCEPTION_BREAKPOINT (0x80000003),并将调用异常处理程序。如果存在调试器,则不会将控制权赋予异常处理程序。

bool IsDebugged(){    __try    {        __asm int 3;        return true;    }    __except(EXCEPTION_EXECUTE_HANDLER)    {        return false;    }}

除了 INT 3指令的简短形式0xCC之外,该指令还有一种长形式:CD 03。
当异常EXCEPTION_BREAKPOINT 发生时,Windows将EIP寄存器递减到0xCC操作码的假定位置,并将控制权传递给异常处理程序。对于INT3指令的长形式,EIP将指向指令的中间(0x03偏移字节处)。因此,如果我们想在INT3指令之后继续执行,就应该在异常处理程序中编辑EIP(否则我们很可能会得到EXCEPTION_ACCESS_VIOLATION 异常)。如果没有
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青月

打赏会让我更加有动力分享!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值