|
|
|
|
|
|
|
Windows内核调试
帖子发起人: Coding 发起时间: 2008-08-11 17:16 下午 回复: 3
|
帖子排序:
|
|
|
|
2008-08-11, 17:16 下午
|
Coding
注册: 2008-05-31
发 贴: 103
|
如何阻止Application发现自己被中断到debugger
|
|
|
|
我记得有个函数调用是可以知道自己是否正在被调试,不过名字我忘记了。谁知道?
不过我正好要做相反的事情,有个应用程序每次都会检查自己是不是正在被调试,一旦是它就退出了。
我只有这个应用程序的可执行文件,不知道有没有什么办法能够欺骗应用程序,让他无法知道。
恩,我的目的不是去破解它,只是这个程序会调用我写的一个dll,我只想去调试我自己的dll
谢谢
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2008-08-11, 18:43 下午
|
手语
注册: 2008-06-06
发 贴: 73
|
Re: 如何阻止Application发现自己被中断到debugger
|
|
|
|
这要看被调试程序用什么方法判断是否被调试。
你要找的API是不是IsDebuggerPresent()?
如果被调试程序用这个方法判断那就很好办了。
这个函数是通过判断PEB中的一个标志项来判断的,所以反转一下那个标志就能搞定了。
0:001> dt _PEB 7ffdb000
ntdll!_PEB
+0x000 InheritedAddressSpace : 0 ''
+0x001 ReadImageFileExecOptions : 0 ''
+0x002 BeingDebugged : 0x1 '' <-- 就是它,1 byte
+0x003 SpareBool : 0 ''
+0x004 Mutant : 0xffffffff
......
如果被调试程序用的是其他方法,那就要具体问题具体分析了。
曾经听说有的软件通过判断父进程是否是“explorer.exe”或“cmd.exe”来检测调试器。 汗...
鸿鹄安知燕雀之志
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2008-08-12, 09:18 上午
|
Coding
注册: 2008-05-31
发 贴: 103
|
Re: 如何阻止Application发现自己被中断到debugger
|
|
|
|
恩,解决了部分问题,的确调用了这个函数来检查,不过似乎不止于此。我的调试环境是Windbg双机kernel mode调试(因为还需要同时调试driver),在这个情况下BeingDebugged一直都是0, 我想应该还检查了另外的什么东西,比如Kernel的调试引擎是否开启,被调试的东西就是Windows Media Player,所以我想不太会有很诡异的方法来检测调试器。
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2008-08-12, 11:09 上午
|
手语
注册: 2008-06-06
发 贴: 73
|
Re: 如何阻止Application发现自己被中断到debugger
|
|
|
|
再提供两种检查调试器的方法,请考虑相应的应对办法。
1. 把程序的主逻辑移到 user defined unhandled exception filter 函数中,然后通过在程序的开始认为引发异常来启动主逻辑。这样如果程序由调试器启动,就不会进入逻辑代码,可能会导致程序直接结束。
2. A ring 3 debugger can be detected by calling NtQueryInformationProcess in ntdll.dll from another ring3 app with the constant ProcessDebugPort (0x07h). This function takes a pointer also as an argument, to store its return value. If it returns anything other than a zero, it means that process in question is operating as a debugger.
Windows call NtQueryInformationProcess with ProcessInformationClass is 7 (DebugPort) to detect a app is being debugged. For example: open a exe with Visual studio or OllyDbg, open TaskManager, and kill the debugged exe, Windows will warning: "Program being debugged" or "Access denied".
如果内核调试器是softice那情况可能更复杂一些。
鸿鹄安知燕雀之志
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
高端调试 » 软件调试 » Windows内核调试 » 如何阻止Application发现自己被中断到debugger
|
|
|
|
|
|