简析CheckRemoteDebuggerPresent
首先看一下微软官方的解释CheckRemoteDebuggerPresent:Determines whether the specified process is being debugged
Syntax
BOOL CheckRemoteDebuggerPresent(
HANDLE hProcess,
PBOOLpbDebuggerPresent
);
Parameters
hProcessA handle to the process.pbDebuggerPresentA pointer to a variable that the function sets to TRUE if the specified process is being debugged, or FALSE otherwise
多的就不贴了 详细可以自己去看
由上边可以知道
CheckRemoteDebuggerPresent有两个参数,一个hProcess(句柄),一个pbDebuggerPresent(是否被调试,调试则返回真,没有调试则返回假)
用易语言写一下
.版本 2
.DLL命令 CheckRemoteDebuggerPresent, 逻辑型, "kernel32.dll", "CheckRemoteDebuggerPresent"
.参数 hProcess, 整数型
.参数 pbDebuggerPresent, 逻辑型, 传址
.版本 2
.子程序 __启动窗口_创建完毕
.局部变量 A, 逻辑型
CheckRemoteDebuggerPresent (-1, A)
_启动窗口.标题 = 到文本 (A)
大概就这样,我们直接在易语言里边运行
然后我们编译好后在桌面打开
然后我们拖进x32(原版,无任何插件)
三种情况根据CheckRemoteDebuggerPresent的返回情况看的一清二楚
下面就来介绍一下过检测
拖进x32在CheckRemoteDebuggerPresent下断
运行
走到77202B4C | 8906 | mov dword ptr ds:,eax |
可以发现eax的值变为了1,众所周知,一般真返回1假返回0(也可以说非零即真,只是一般都是返回1)
我们直接eax置0任何运行试试
**** Hidden Message ***** 现在FZ有一种比较强的反调试检测就是GetStartUpInfo,通过这个函数来判断是否是由od启动的程序 膜拜大佬!大佬牛B! 赖学习下v
膜拜大佬! 谢谢教程,膜拜! 感谢分享,学习
講解的很清晰明瞭。 谢谢分析,谢谢分析! GetStartUpInfoGetStartUpInfo 很好,谢谢楼主