R3注入反截图

编写Dll 设置F2键开关反截图

cpp 复制代码
#include "pch.h"
#include <windows.h>

#ifndef WDA_NONE
#define WDA_NONE 0x00000000
#endif
#ifndef WDA_EXCLUDEFROMCAPTURE
#define WDA_EXCLUDEFROMCAPTURE 0x00000011
#endif

HWND g_hWnd = nullptr;
bool g_bAntiCapture = false;   // 当前是否开启反截图

BOOL CALLBACK EnumWndProc(HWND hWnd, LPARAM)
{
    DWORD pid = 0;
    GetWindowThreadProcessId(hWnd, &pid);

    if (pid == GetCurrentProcessId() && IsWindowVisible(hWnd))
    {
        g_hWnd = hWnd;
        return FALSE;
    }
    return TRUE;
}

DWORD WINAPI AntiCaptureThread(LPVOID)
{
    // 等窗口创建
    for (int i = 0; i < 50 && !g_hWnd; i++)
    {
        EnumWindows(EnumWndProc, 0);
        Sleep(100);
    }

    if (!g_hWnd)
    {
        MessageBoxW(NULL, L"未找到目标窗口", L"提示", MB_OK | MB_ICONWARNING);
        return 0;
    }

    bool lastKeyDown = false;

    while (true)
    {
        SHORT keyState = GetAsyncKeyState(VK_F2);
        bool keyDown = (keyState & 0x8000) != 0;

        // F2 从"未按下"到"按下"的瞬间
        if (keyDown && !lastKeyDown)
        {
            g_bAntiCapture = !g_bAntiCapture;

            if (g_bAntiCapture)
            {
                if (SetWindowDisplayAffinity(g_hWnd, WDA_EXCLUDEFROMCAPTURE))
                {
                    MessageBoxW(NULL, L"反截图已开启", L"提示", MB_OK);
                }
                else
                {
                    MessageBoxW(NULL, L"反截图开启失败", L"错误", MB_OK | MB_ICONERROR);
                }
            }
            else
            {
                SetWindowDisplayAffinity(g_hWnd, WDA_NONE);
                MessageBoxW(NULL, L"反截图已关闭", L"提示", MB_OK);
            }
        }

        lastKeyDown = keyDown;
        Sleep(50); // 降低 CPU 占用
    }

    return 0;
}

BOOL APIENTRY DllMain(HMODULE hModule,DWORD reason,LPVOID)
{
    if (reason == DLL_PROCESS_ATTACH)
    {
        DisableThreadLibraryCalls(hModule);
        HANDLE h = CreateThread(nullptr, 0, AntiCaptureThread, nullptr, 0, nullptr);
        if (h) CloseHandle(h);
    }
    return TRUE;
}

编译dll

注入到测试进程中

按下F2键就能开关反截图功能了

相关推荐
光电笑映38 分钟前
Linux 线程同步与互斥:锁的本质、条件变量与信号量的底层原理
linux·运维·服务器·开发语言·c++
jearry1 小时前
WebView2 原生拖放的桥接之道:拆解 yyzTools 的 drop-zone.js
前端·c++
零基础的修炼1 小时前
CUDA知识汇总
开发语言·c++·编辑器
欧特克_Glodon1 小时前
OpenCV计算机视觉开发入门与实践<三十八>:图像添加数字水印
c++·人工智能·opencv·计算机视觉
蒸蒸yyyyzwd1 小时前
与Redis和MySQL有关的知识
c++·求职招聘·八股
欧特克_Glodon2 小时前
OpenCV计算机视觉开发入门与实践<四十>:自动识别物体数量
c++·人工智能·opencv·计算机视觉
wuminyu2 小时前
Kafka利用sendfile与Page Cache实现高性能传输剖析
java·linux·c语言·jvm·c++
hansang_IR2 小时前
【题解】P4456 [CQOI2018] 交错序列(数学递推)
c++·算法
流浪0012 小时前
大厂 C/C++ 2023–2025 面试答案题汇总
开发语言·c++
青少儿编程课堂2 小时前
贪心算法进阶:区间调度与最少资源整合解析
c++·python·算法·贪心·信息学竞赛·区间调度