汇编达人视频学习5(反调试之Fake(欺骗) F8)


title: 汇编达人视频学习5
date: 2021年8月4日 10点10分
tags: 汇编达人
categories: 汇编达人

反调试之Fake(伪装、欺骗)F8

1、单步步入(F7) 单步步过(F8)

(1)单步步入与单步步过的区别

在执行普通的指令的时候,F7与F8其实差不多,但是在执行CALL指令的时候,有很大的差别。

在执行CALL指令的时候,先把CALL指令后面的那个地址,存入EIP中,然后把CALL指令的下一行指令的地址送入堆栈中,然后ESP的值减4.

如果我们在CALL指令后面的那个地址处,继续写指令,当F8的时候,它会把你的这好几条指令,当做一条指令,一下就执行完了,但是F7不一样,F7会去一步一步的执行。

(2)调试器实现原理:

​ 断点:0xCC

​ 单步步入:设置EFLAGS的TF位

​ 单步步过:在下一行设置断点

(3)断点:

**快捷键F2:**断点的作用就是程序执行到断点的时候,会停下来。

(4)断点的本质

其实是指令INT 3

当CPU执行的时候,见到INT 3 的时候就会停下来,停在调试器里。

当我们设置断点的时候,那么这一行汇编对应的机器码的第一个字节将被改写为 CC ,尽管调试器不会显示,但是实际上已经进行了更改,调试器在执行到这里检测到了 0xCC 之后就会断下。(0xCC是int 3 的机器码。)

2、通过一个小技巧,反调试

在这里插入图片描述

从图上我们可以看到,CALL指令,先将后面的地址,00AD1396放入EIP中,然后将00AD1360这个地址放入堆栈中,然后ESP减4.

然后执行CALL地址后面的指令的时候,有一个RET指令,RET指令所做的事情就是,将当前栈顶的值放入EIP,同时ESP加4,也就是执行RET之后,程序会跳转到00AD1360处再执行,这是一般程序员的思想。

接下来,我们利用这个思想来让别人调试程序的时候,跟丢。

我们通过上面知道了,当遇到CALL指令按F8的时候,会把下一行指令的地址压入堆栈中,我们直接在CALL指令后面的那个地址处修改ESP的值,mov dword ptr ds:【00AD13AC】,然后再加一个RET指令,这样当别人再按F8的时候,我们的ESP的值,会跳转到其他地方去,而回不去CALL指令的下一行地址,这样就会让别人调试的时候跟丢。但是这个对F7来说是没用的。

当我们想迷惑破解人员的时候,可以写大量的没有意义的调用。一个CALL,跟进去之后,可能有一万行代码,而且还是无用的代码,以此来消耗破解人员的耐心。这是目前一个简单知识实现的反调试欺骗F8。还有很多很多的反调试方法。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值