Very_good 发表于 2021-9-25 19:49

简析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 *****

白云点缀的蓝 发表于 2021-9-25 20:19

现在FZ有一种比较强的反调试检测就是GetStartUpInfo,通过这个函数来判断是否是由od启动的程序

温九 发表于 2021-9-25 23:39

膜拜大佬!大佬牛B!

平淡 发表于 2021-9-26 00:03

赖学习下v
膜拜大佬!

lies 发表于 2021-9-26 01:04

谢谢教程,膜拜!

snak2020 发表于 2021-9-26 09:11

感谢分享,学习

列明 发表于 2021-9-26 13:30

講解的很清晰明瞭。

ssjjdns 发表于 2021-9-26 15:06

谢谢分析,谢谢分析!

A661910 发表于 2021-9-26 16:11

GetStartUpInfoGetStartUpInfo

manezi 发表于 2021-9-27 06:09

很好,谢谢楼主
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 简析CheckRemoteDebuggerPresent