目录函数
debugport是在EPROCESS结构中的.调试时间会经过DebugPort端口将调试事件发送给ring3进行调试的.若是设置为0.则ring3就没法进行调试了
也就是说你不能单步了.等相关调试操做了.工具
若是作反调试.开启一个线程.不断的对这个DebugPort进行清零.
进而进行反调试.
思路:
1.找到当前进程的EPROCESS结构
2.经过硬编码找到这个位置.(硬编码)
若是是硬编码.就须要本身根据系统去判断.编码
在内核中调用这个函数后,它会检测是否检测是否挂载了windbg.
也是开启线程.不断调用.线程
应用层能够调用这两个函数判断debug
如在内核中进行HOOK调试
下面列出函数名code
函数名字 | 做用 | HOOK后 |
---|---|---|
NtOpenThread | 建立内核线程 | 防止调试器在内部建立线程 |
NtOpenProcess | 打开进程 | 防止OD等调试工具在调试列表中看到 |
kiAttachProcess | 附加调试进程 | 防止被附加 |
NtReadVirtualMemory | 读取虚拟内存 | 防止本身进程被读内存(ReadProcessMemory) |
NtWriteVirtualMemory | 写内存 | 防止内存被写 |
KdReceivePacket | KDCOM.dll中Com串口接收数据的函数 | 你本身作过滤 |
KdSendPacket | KDCOM.dll中的Com串口发送数据函数 | HOOK上面跟这个函数.能够防止双机调试 |
上面说的是防,那么咱们能够进行攻击进程
1.能够对DebugPort下内存断点.一旦有程序进行修改.就会被断下.
从而找到对应的反调试代码.对这个代码进行patch.事件
2.能够自建调试体系.不走它的.进而绕过这个保护.内存
这个函数会检测调试器.从而禁止被调试.
能够在对应的这些函数地址下段点.而后对相关代码进行patch.好比进行返回.
3.针对HOOK
若是是HOOK.咱们能够借助一些工具进行恢复.固然若是能够你本身也能够写恢复代码.这看你当时的需求了.
常见的就好比: pchunter PowerTools anti(安天)
进行反调试能够进行加花.故意进行干烧.
如:
push edx pop edx inc ecx dec ecx add esp,1 sub esp,1
直接对一个寄存器进行加.而后进行减.操做完根本不会影响寄存器的原值.
jmp LABEL db opcode LABEL
还有这种.中间加个db.可是他会影响你.
db Opcode跟后面指令结合就会错乱.可是不会影响程序正常执行.
jz label jnz label db opcode Label
无论是否正确.都会进行强制跳转.进而进行干扰.