反调试
1.DebugPort
2.KdDisableDebugger,禁用内核调试
3.IsDebuggerPresent和CheckRemoteDebuggerPresent,应用层,定时调用这个查看
4.hook
Hook系统中一些与调试相关的函数,防止被各种调试器调试。
NtOpenThread()防止调试器在程序内部创建线程
NtOpenProcess()防止)调试工具在进程列表中看到
KiAttachProcess()
NtReadVirtualMemory()防止被读内存
NtWriteVirtualMemory()防止被写内存
KdReceivePacket()KDCOM.dll中Com窗口接受数据
KdSendPacket()KDCOM.dll中Com窗口发送数据
这两个用来防止双击调试
反反调试
1针对清零DebugPort防止调试的,可以对DebugPort下内存地址断点ba w4 debugport——addr,当有程序修改这里被断下,找到对应代码进行patch,让其事去作用(改成0x90或者0xc3)
比如我们定位内核模块TxxxSxxx.sys的首地址
然后根据特征码遍历整个模块找到我们需要的地方,然后干掉他们。
那么我们又如何能够通过人工的判断出来到底是哪里在作怪呢
利用syser或Start SoftICE对EPROCESS+BC处设置断点。就可以一层一层的追溯上去了
2.KdDisableDebugger反调试的,可在对应函数地址下断点,然后对相关代码patch,比如bp KdDisableDebugger,eb xxx
3.hook通过ARK工具回复
参考学习资料
http://www.moguizuofang.com/bbs/thread-3235-1-1.html
http://bbs.pediy.com/showthread.php?t=126802(详细)
http://bbs.pediy.com/showthread.php?t=129810