反调试有效方法检测软件自身是否被断点

易语言 2020-08-01 14:58:03

反调试有效方法检测软件自身是否被断点

第一次初始化时将代码段的开始地址到结束的地址所有的字节累加起来,然后再写个死循环重新累加对比初始化时的字节累加总数,不同就是被下了断点,改下初始化逻辑能应付下破J新手。

_启动窗口.标签1.标题 = “初始化字节中” ' 简单的检测一些简单的断点
_启动窗口.标签1.文本颜色 = #芙红
初始总和 = 0
.判断循环首 (真)
.如果真 (4198400 + i = 4718591)
跳出循环 ()
.如果真结束
初始总和 = 初始总和 + 内存.读字节 (进程_取自进程ID (), 4198400 + i - 1) ' 将程序代码段地址的字节遍历累加成总数
i = i + 1
.判断循环尾 ()
_启动窗口.时钟循环调用.时钟周期 = 5000 ' 初始化累加完毕后让时钟来一直循环累加代码段地址的字节

其原理是当设置断点后,对应位置的机器码(第一个字节)会被替换成0XCC(对应的汇编指令为int3)字节变化了那么累加起来的数就会不同,达到了检测断点的效果,新手可以看看。

.判断循环首 (真)
.如果真 (4198400 + i = 4718591)
跳出循环 ()
.如果真结束
检测总和 = 检测总和 + 内存.读字节 (进程_取自进程ID (), 4198400 + i - 1)
i = i + 1
.判断循环尾 ()
.如果 (检测总和 ≠ 初始总和) ' 如果累加的总数和初始化时的不同就是被下断点了
_启动窗口.时钟循环调用.时钟周期 = 0
_启动窗口.标签1.标题 = “程序被下断点 ×”
_启动窗口.标签1.文本颜色 = #红色
_启动窗口.时钟循环调用.时钟周期 = 5000
.否则
_启动窗口.时钟循环调用.时钟周期 = 0
_启动窗口.标签1.标题 = “程序未下断点 √”
_启动窗口.标签1.文本颜色 = 41984
_启动窗口.时钟循环调用.时钟周期 = 5000