Advertisement

VB.NET 通过PEB->BD调试标志位判断是否处于调试模式

阅读量:

坦白来说,我原本打算通过PEB中保存调试对象句柄的标志位来判断是否处于调试状态,但遗憾的是,花费了一个多小时仍未成功解决,实在难以准确计算偏移量。当然,也可以在WinDbg中使用DT !PEB命令进行查看,不过这个过程确实非常繁琐。我在网上查阅了一些关于PEB结构的声明,最终在Nirsoft.NET上找到了一份较为全面的PEB结构定义,说实话,内容让我感到一头雾水。保存调试对象句柄的标志位位于->ULONG SystemReserved[1];当然,我个人也只是记得它大概在Reserved[1]的位置,毕竟我很久以前才接触过相关资料。不过从Reserved[1]中判断是否被调试也存在一定的缺陷,如今一些过保护驱动已经能够绕过这种检测方式,这意味着你可能无法再通过这种方式进行检查。大家可以参考反调试技术揭秘上的相关资料,如果感兴趣的话也可以研究一下!PEB / KernelStruct的内容,在某些情况下它非常有用。BeingDebugged标志位会在进程被调试器附加时由操作系统自动设置。通常情况下,我们只需在额外线程中循环定期检查即可完成判断。当然如果想要更加可靠的方法,则可以从HeapFlags来进行判断。不过这些方法都可以在上述反调试技术揭秘中找到相关介绍。

全部评论 (0)

还没有任何评论哟~