调试与反调试的手段,在大佬的这篇反调试与绕过的奇淫技巧文章中几乎都能找到
这次带来新的检测思路,通过检测断点,来判断是否被调试,以及确定被调试的函数
断点原理
断点原理主要分为软件断点和硬件断点
-
软件断点原理主要是修改断点位置的指令,当然原始指令会保存。将断点位置指令修改成软中断指令,程序运行到改位置自然会暂停。通过
task_for_pid
函数得到被调试进程的task端口后,就可通过vm以及task,thread等系列函数跨进程获取到被调试进程的信息了 -
硬件断点主要依赖于调试寄存器,通过设置调试寄存器为断点位置,即可让cpu在执行到断点的位置停下。但硬件断点有断点数量限制
这里主要讨论软件断点
利用
-
通过原理,我们就能判断一个函数有没有下断点了,只需要检测函数内指令是否被修改成了软中断指令
-
也可以通过可执行内存search,来主动检测被调试的地址了,在通过地址符号解析,来主动检测被调试的函数
而且该利用也可以不使用API来实现(不暴露特征值),直接读内存就行~