反调试学习

1. INT 2D

INT 2D 原为内核模式中用来触发断点异常的指令,也可以再用户模式下触发异常。但程序调试时不会触发异常,只是忽略。在调试模式中执行完INT 2D后,下条指令的第一个字节将被忽略,后一个字节会被识别为新的指令继续执行。INT 2D的另一个特征是,使用F7 F8命令跟踪INT 2D时,程序不会停在下条指令开始的地方,而是一直运行,知道遇到断点,就像使用F9命令运行程序一样,原因在于,执行完INT 2D后,原有的代码字节顺序被打乱了,也就是说,若指令在程序执行过程中改变,则程序不能单步暂停,而是一直执行,可以将其视为一种bug。 (以上只是INT 2D指令在OD调试中的表现,其他调试器中略有不同)


2. 陷阱标记

TF 值设置为1时,CPU将进入单步执行模式。单步执行模式中,CPU执行完一条指令后出发一个EXCEPTION_SINGLE_STEP异常,然后将陷阱标记自动清零。该EXCEPTION_SINGLE_STEP异常可以与SEH技法结合,在反调试技术中用于探测调试器。


因无法直接修改EFLAGS寄存器的值,故使用PUSHFD/POPFD指令与or指令修改陷阱标识的值。在调试的情况下不会执行SEH回调。而正常运行则执行。

修改OD的调试选项,忽略(EXCEPTION_SINGLE_STEP异常),让程序来处理异常。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值