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键就能开关反截图功能了

相关推荐
u0109272715 小时前
实时数据流处理
开发语言·c++·算法
Trouvaille ~5 小时前
【Linux】线程同步与互斥(一):线程互斥原理与mutex详解
linux·运维·服务器·c++·算法·线程·互斥锁
Queenie_Charlie5 小时前
位移运算
c++·位运算
hurrycry_小亦5 小时前
洛谷题目:P1365 WJMZBMR打osu! / Easy 题解(本题较简)
c++
m0_748708055 小时前
C++代码移植性设计
开发语言·c++·算法
郝学胜-神的一滴5 小时前
Linux Socket模型创建流程详解
linux·服务器·开发语言·网络·c++·程序人生
王老师青少年编程5 小时前
2024信奥赛C++提高组csp-s复赛真题及题解:决斗
c++·真题·csp·信奥赛·csp-s·提高组·决斗
「QT(C++)开发工程师」5 小时前
C++ 观察者模式
java·c++·观察者模式
m0_706653235 小时前
高性能网络协议栈
开发语言·c++·算法
永远睡不够的入5 小时前
类和对象(上)
开发语言·c++·算法