内核反调试

1.钩子

对调试器附加过程中所用到的函数挂钩。

比如:NtOpenProcess、ZwDebugActiveProcess、RtlCreateUserThread、NtDebugContinue、

NtCreateDebugObject、NtWaitForDebugEvent 

调试事件采集函数:DbgkCreateThread、DbgkExitThread、DbgkExitProcess、DbgkMapViewOfSection、DbgkUnMapViewOfSection、DbgkForwardException、

DbgkpSendApiMessage等等

 

2.调试权限清除

清空debugobject.ValidAccessMask。这样调试器就无法附加了,附加会出现ERROR_ACCESS_DENIED拒绝访问

 

3.DebugPort

EPROCESS.DebugPort存放了调试对象的地址,只要该进程被调试,DebugPort一定有值。

可以自己创建一个没用的调试对象放到DebugPort里,这样别人也无法调试你的进程

 

4. DbgSsReserved

调试器线程TEB结构的DbgSsReserved[1]字段中保存的调试对象句柄,可以遍历线程,如果某个线程这个结构中存在值,那么这个进程就一定在被调试

 

5. DbgkpProcessDebugPortMutex

在调试系统中,有用到ExAcquireFastMutex获取一个调试同步的快速互斥体(DbgkpProcessDebugPortMutex)

如果修改这DbgkpProcessDebugPortMutex的值,就会使相关调试函数一直等待在ExAcquireFastMutex函数这里。调试器卡死

 

6. ProtectedProcess

目标进程EPROCESS下面的ProtectedProcess成员为TRUE,并且调试器进程EPROCESS下面的ProtectedProcessFALSE时,可以达到反调试效果。症状是调试器无法打开你的进程。

 

7. ProcessDelete

目标进程EPROCESS下面的ProcessDelete成员为TRUE,可以达到反调试效果,症状是调试器无法附加你的进程。但是在进程退出时,要把ProcessDelete改变成FALSE,否则系统不会释放进程。

 

8,改写目标进程对象的对象头内的TypeIndex为一个其他值,这会导致调试器无法打开目标进程,从而达到反调试目的。注意在进程退出时要把TypeIndex值更改回来,否则会产生蓝屏。

 

9,改写内核全局指针变量DbgkDebugObjectType指向的内容,可以阻止调试器附加进程。症状是调试器无法附加进程。

 

10,改写目标进程线程对象ETHREADHideFromDebugger成员为TRUE。当被调试时,当有调试事件产生,目标进程会崩溃。

 

11. 对调试对象类型的TotalNumberOfObjectsTotalNumberOfHandles进行检测,判断系统是否有调试器存在。

 

12.针对硬件断点的检测,可以获取目标进程的线程KTHREADTrapFrame成员,这是一个陷阱帧_KTRAP_FRAME结构的指针,其中的DRX系列成员如果有值,就代表当前线程存在硬件断点。

 

13. 针对硬件断点的检测,可以判定目标进程的线程KTHREADHeader成员的DebugActive是否有值,有值的话就代表当前线程存在硬件断点,硬件断点被windows设计为针对某线程的,只针对当前进程的某个线程设置了值

 

14. 对系统所有进程的句柄表进行检测,看看目标进程的进程对象、线程对象、或者一些调试对象是否存在,存在的话就代表目标进程已经被别的进程打开,可以选择关闭相关句柄,也可根据情况退出进程。

 

15. 对目标线程独享KTHREADSuspendCount成员进行改写,使之不等于零。当调试器调试目标进程,被中断时,由于目标进程线程的SuspendCount不为零,所以目标进程的线程就无法被暂停,那么调试器实际就等于没有中断目标进程,这会使调试器产生错误行为。

线程的SuspendCount必须等于0才能被暂停。如果等于1,那么在od中下断点,当程序执行到断点时,进程会暂停,进程被暂停,等于暂停目标进程的所有线程。但是有些线程SuspendCount=1,会继续运行

 

16.IDT HOOK
比如对3号中断进行hook,就可以让软件断点不起作用

 

17.打开被调试进程的时候,会返回句柄,驱动中可以注册回调,过滤句柄权限
绕过方法1:把权限改回来,修改GrantedAccess0x1FFFFF(最高权限)。
绕过方法2:通过系统进程,比如lsass.exe,这个系统进程中有打开受保护的进程,并且具有高权限,具有查询、读写进程等功能。具体可参考链接:https://bbs.pediy.com/thread-252710.htm

 

 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值