180314 逆向-反调试技术(7)调试器检测

xiaoxiao2021-02-28  33

1625-5 王子昂 总结《2018年3月14日》 【连续第529天总结】 A. 反调试技术(7) B.

调试器检测

书上讲了很多SoftICE的检测方法,但是那玩意儿连XP都不支持,时代的眼泪了……

OD的检测方法

查找特征码 遍历进程,将特定地址处的值与OD的特征码进行比对,相同则确定是OD 不过这种方法只针对特定版本的软件,不同版本可能会使得特征码不同,因此有一定缺憾检测DBGHELP模块 调试器一般用Microsoft提供的DBGHELP库来装载调试负好,如果一个进程加载了DBGHELP.DLL,那么它很可能是一个调试器 可以通过创建进程快照,然后遍历进程中的加载模块来检测 不过应对方法也很简单,只需要将DBGHELP改名,再修改OD中对应的名字字符串即可查找窗口和进程 因为OD只是一个R3级的调试器,本质仍然是一个程序,所以可以通过两种常见的方式去检测: 查找窗口 FindWindow 通过类名和标题可以查找OD的主窗口是否开启EnumWindow 这个函数枚举所有顶级窗口,并调用指定的回调函数。在回调函数中可以用GetWindowText取得窗口标题,并比对特征字符串GetForeGroundWindow 这个函数与前两种方法略有不同,它返回前台窗口(用户当前工作的窗口)。当程序正在被调试时,调用这个函数将会获得前台窗口,也就是OD的窗口句柄查找进程 枚举进程来比对进程名,绕过方法也很简单

SeDebugPrivilege方法 默认情况下,进程是没有SeDebugPrivilege权限的。然而进程通过OD和WinDbg之类的调试器载入的时候,就会启用SeDebugPrivilege权限了 原理是被Create的子进程会继承调试器的SeDebugPrivilege权限 可以通过CSSS.EXE进程间接地测试SeDebugPrivilege权限。普通的程序是无法对CSRSS.exe执行OpenProcess的,如果能够打开CSRSS.EXE,则意味着进程启用了SeDebugPrivilege权限。 原理是CSRSS.EXE进程安全描述符仅允许SYSTEM访问,但是一旦进程拥有了SeDebugPrivilege权限,就可以忽视安全描述符9而访问其他进程。 注意:默认情况下,这一权限仅仅授予了Administrators组的成员。因此当用户无管理员权限时也会失效

SetUnhandledExceptionFilter 这个方法通过故意触发一个异常来判断是否有调试器接管。当无调试器附加时,异常会经过SEH处理,到达UnhandledExceptionFilter。而被附加则会将异常发给调试器,调试器处理后送给exception Filter运行继续。

EnableWindow方法和BlockInput方法 这是两个小小的伎俩。 前者暂时锁定前台的窗口,让用户休息一下,顺便也让调试器无法工作。 后者则通过BlockInput(True)锁定键盘,之后再BlockInput(False)恢复。Ctrl+Alt+Del组合键可以强制解除

C. 明日计划 调试器漏洞

转载请注明原文地址: https://www.6miu.com/read-2249985.html

最新回复(0)