反调试和反反调试
Windows和Linux下的反调试和反反调试
反调试其实没什么有意思的,只不过是程序寻找各类调试痕迹或者调用各种API来反调试罢了.所以对于逆向手来说,重点在于了解有什么API和手段.
至于为什么强调Windows和Linux,是因为还有安卓,它的反调试稍微不太一样.
目前来说,这篇文章是我看过最全的总结,不只有反调试实际上:原创反调试技术总结-看雪
文章中一些模棱两可的地方我下面进行了补充,但都是各类资料看来的,并没有考据,有可能有错误.
-
文章中
IsdebuggerPresent
部分说:IsDebuggerPresent查询进程环境块(PEB)中的IsDebugged标志。这里的IsDebugged应该指PEB+0x2的BeingDebugged位.
-
文章中
OutputDebugString
的调用原理是,调试器不存在则OutputDebugString
调用失败,错误码被修改,以此来检测调试器.GetLastError
这章都是如此. -
文章中关于
DebugActiveProcessStop
所说的分离,在微软的文档的说明就是指停止进程.