反StrongOD.dll的原理和实例:

还是采用FD_DebugObject_NtQueryObject反调试,不过换个写法就可以过StrongOD。

FD_DebugObject_NtQueryObject原理是这样的:当调试会话创建,将产生一个调试对象,我们通过ntdll中的NtQueryObject函数参看调试对象的个数是否不为零,来确定调试器的存在。《【原创】软件保护壳技术专题 - 反调试器技术》(http://bbs.pediy.com/showthread.php?t=71113)中的FD_DebugObject_NtQueryObject通过循环遍历ObjectTypeInformation对比类型的名字,如有类型名为DebugObject,则检测TotalNumberofHandles与TotalNumberofObjects,如果不为0则存在调试器。

StrongOD.dll里的fengyue.sys驱动HOOK了ntdll中的ZwQueryObject,在XP系统里他只是简单的把DebugObject对象类型隐藏了,通过搜索DebugObject字符,如果不存在就说明有调试器。如果存在并且TotalNumberofHandles不为0就说明也存在调试器。在WINDOWS 7中StrongOD.dll好象没把DebugObject对象类型隐藏。

当你用OD打开一个程序,同时运行ceshi.exe,会提示“debug?”.或者当你在OD里运行ceshi.exe,也会提示“debug?”,可以过最新的StrongOD.dll。当双击ceshi.exe,在没有OD打开的情况下,会出现“fun!”。

本程序是在OD里用shellcode格式写的。在XP中的SP2、SP3和WINDOWS 7中测试通过。欢迎讨论。

上传的附件 ceshi.rar