首页 > 系统相关 >windows反调试

windows反调试

时间:2024-08-11 14:55:30浏览次数:14  
标签:EXCEPTION return windows NtQueryInformationProcess cpp pbi 调试 调试器

1. 应用层反调试

1. 检测是否正在被调试(使用 IsDebuggerPresent API):

```cpp
#include <Windows.h>

if (IsDebuggerPresent())
{
    // 检测到调试器,执行相应操作
    ExitProcess(0);  // 或者其他操作
}
```

2. 使用 NtQueryInformationProcess 检测调试器:

```cpp
#include <Windows.h>
#include <winternl.h>

typedef NTSTATUS (WINAPI *pNtQueryInformationProcess)(
    HANDLE, PROCESSINFOCLASS, PVOID, ULONG, PULONG);

bool IsBeingDebugged()
{
    HANDLE hProcess = GetCurrentProcess();
    PPEB pPeb = nullptr;
    PROCESS_BASIC_INFORMATION pbi;
    ZeroMemory(&pbi, sizeof(pbi));

    pNtQueryInformationProcess NtQueryInformationProcess = 
        (pNtQueryInformationProcess)GetProcAddress(
            GetModuleHandle(TEXT("ntdll.dll")), 
            "NtQueryInformationProcess");

    if (NtQueryInformationProcess)
    {
        NTSTATUS status = NtQueryInformationProcess(
            hProcess, ProcessBasicInformation, &pbi, sizeof(pbi), nullptr);
        if (NT_SUCCESS(status))
        {
            pPeb = pbi.PebBaseAddress;
            return pPeb->BeingDebugged;
        }
    }
    return false;
}
```

3. 检查调试端口:

```cpp
bool CheckRemoteDebuggerPresent()
{
    BOOL isDebuggerPresent = FALSE;
    CheckRemoteDebuggerPresent(GetCurrentProcess(), &isDebuggerPresent);
    return isDebuggerPresent != FALSE;
}
```

4. 使用异常处理来检测调试器:

```cpp
bool DetectDebuggerViaException()
{
    __try
    {
        RaiseException(EXCEPTION_BREAKPOINT, 0, 0, NULL);
    }
    __except(GetExceptionCode() == EXCEPTION_BREAKPOINT 
             ? EXCEPTION_EXECUTE_HANDLER 
             : EXCEPTION_CONTINUE_SEARCH)
    {
        return false;
    }
    return true;
}
```

5. 检测调试器的时间差:

```cpp
bool TimingCheck()
{
    DWO

标签:EXCEPTION,return,windows,NtQueryInformationProcess,cpp,pbi,调试,调试器
From: https://blog.csdn.net/zhangyihu321/article/details/141075878

相关文章

  • Windows系统清理C盘的方法
    最近有个朋友和我说C盘满了,问我怎么清理,去网上查了几种方法,每种都试过了,留个笔记。不过个人觉得避免C盘满了最好的方法还是养成习惯,安装软件的时候非必要不安装C盘,桌面少留点文件,暂时存储还是可以的,用完了扔到D或E盘去。1.命令行模式(亲测最好用)(1)win打开菜单,输入cmd,以管理员......
  • Android14音频进阶调试之命令播放mp3/aac非裸流音频(八十)
    简介:CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!新书发布:《Android系统多媒体进阶实战》......
  • Windows11系统PerceptionDevice.dll文件丢失问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个PerceptionDevice.dll文件(挑选合适的版本文......
  • Windows11系统penjpn.dll文件丢失问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个penjpn.dll文件(挑选合适的版本文件)把它放......
  • Windows如何保证所有软件在D(其他)盘
    首先使用你电脑有两个固态硬盘就是盘符自己分区也可以C盘我们只用于电脑的系统资源管理其他所有数据包括默认安装的文件都在D盘或者自定义的盘win+R输入regedit进入注册表根据下面路径依次点开,找到CurrentVersion,或者复制路径,粘贴到路径上计算机\HKEY_LOCAL_MACHINE\SOFTWAR......
  • [图文直播]Windows操作系统部署Jenkins
    前言首先说明一下我为什么选择在Windows操作系统上部署Jenkins是吧,主要基于虽然从长远上看,我是有进行跨平台开发的需求,但至少在可预见的三到五年时间内,我的潜在客户也都是在windows操作系统上。至于跨平台,规划上要有,但正如天龙八部里天龙寺内面对鸠摩智打算拿拈花指、无相劫指......
  • 渗透测试基础及x64dbg调试器
    一、实验原理x64dbg是一款开源且免费的Ring3级动态调试器,采用QT编写,支持32/64位程序。其反汇编引擎BeaEngine和Capstone功能极其强大,也有丰富的插件和脚本功能,且并保持更新,目前已经基本替代了OllDbg。软件解压后根目录存在x96dbg,双击x96dbg,出现三个弹窗,会......
  • MSF及Windows渗透测试
    一、MetasploitFramework原理Metasploit是一款开源的安全漏洞检测工具,可以帮助安全和IT专业人士识别安全性问题,验证漏洞的缓解措施,并管理专家驱动的安全性进行评估,提供真正的安全风险情报。这些功能包括智能开发,代码审计,Web应用程序扫描,社会工程。团队合作,在Metasploit和综合......
  • Linux调试器-gdb的使用
    文章目录Linux调试器-gdb的使用背景使用Linux调试器-gdb的使用背景程序的发布方式有两种,debug模式和release模式Linuxgcc/g++出来的二进制文件,默认是release模式要想使用gdb调试,必须在将源程序生成二进制程序的时候加上-g使用q,ctrl+d:退出调试list/l行号......
  • JSP广元市旅游网站6gj5o(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统功能:用户,景点类型,景点信息,房间类型,酒店民宿,酒店预约,出游租车,租车信息,旅游攻略,旅游社团,跟团预约技术要求:开发语言:JSP前端使用:HTML5,CSS,JSP动......