首页
社区
课程
招聘
[原创]PC外挂一种新奇的绘制思路:窗口即方框
发表于: 1天前 589

[原创]PC外挂一种新奇的绘制思路:窗口即方框

1天前
589

一、前言

如今传统 PC 外挂的主流绘制方式仍是两类:内部注入 Hook 图形 API,以及外部 Overlay 窗口调用图形 API。这两类本质上都绕不开图形 API。本文分享单机环境下一种比较取巧的方式:它不注入、不调用图形 API,只靠 User32 摆窗口,让窗口本身当方框。


二、具体实现

Windows 里一个窗口的诞生大致三步:RegisterClassEx 注册窗口类,CreateWindowEx 创建窗口实例,消息循环负责分发窗口消息。这套流程任何 Win32 资料里都有,本文不展开。本文只关心其中两件事:CreateWindowEx 的扩展样式怎么选,才能让窗口不抢焦点、不抢输入、不碰像素;以及窗口创建后,怎么让它跟随目标。

std::wstring className = L"BoxClass";

WNDCLASSEXW wc = { sizeof(wc) };
wc.lpfnWndProc   = WindowProc;
wc.lpszClassName = className.c_str();
wc.hbrBackground = CreateSolidBrush(RGB(255, 0, 0)); // 红色
RegisterClassExW(&wc);

HWND hBox = CreateWindowExW(
    WS_EX_LAYERED | WS_EX_TRANSPARENT | WS_EX_TOPMOST | WS_EX_TOOLWINDOW,
    className.c_str(), L"",
    WS_POPUP,
    0, 0, 0, 0,
    nullptr, nullptr, nullptr, nullptr);

SetLayeredWindowAttributes(hBox, 0, 64, LWA_ALPHA); // 让窗口半透明

上述代码会创建出一个宽高为0、背景为红色且半透明的矩形窗口,先介绍一下每个样式:


WS_EX_LAYERED:实现窗口半透明,没有它SetLayeredWindowAttributes无法生效,主要为了不遮挡背后内容

WS_EX_TRANSPARENT:实现鼠标穿透,依赖WS_EX_LAYERED,主要为了让窗口不抢焦点和输入

WS_EX_TOPMOST:实现窗口置顶

WS_EX_TOOLWINDOW:让窗口不出现在任务栏和Alt+Tab中

WS_POPUP:去掉窗口标题栏和边框,实现纯矩形的窗口


之后通过 SetWindowPos 把窗口移动到目标位置

SetWindowPos(hBox, nullptr, x, y, w, h, nullptr);

x, y 是目标在屏幕上的左上角坐标,w, h 是矩形窗口的宽高。


目前窗口移动到了目标位置,但目前不可见,还需调用ShowWindow展示出窗口

ShowWindow(hBox, SW_SHOW);

人物死了要隐藏,也可通过ShowWindow

ShowWindow(hBox, SW_HIDE);


三、缺点

不可否认,WS_EX_LAYERED | WS_EX_TRANSPARENT | WS_EX_TOPMOST | WS_EX_TOOLWINDOW

这个组合是很标准的外部 Overlay 窗口特征。反作弊枚举所有窗口、检查扩展样式组合,就能筛出一批可疑窗口


另一个限制是窗口数量。一个窗口对应一个目标,多目标需要多窗口。实测超过 25 个窗口就可能出现卡顿,这决定了它只适合 5v5 这类少目标场景,且绘制效果单一,只有一个方框


四、声明

以上仅用于技术分享学习,禁止用于非法用途!




[招生]科锐逆向工程师培训(2026年11月13日实地,远程教学同时开班, 第57期)

最后于 2小时前 被mb_gfvnetwy编辑 ,原因:
收藏
点赞 ・4
打赏
分享
最新回复 (3)
雪    币: 572
活跃值: (2272)
能力值: ( LV12,RANK:229 )
在线值:
发帖
回帖
粉丝
2 楼

看起来不错,基于此变换一下思路,通过操作移动真实存在的窗口位置与图层实现绘制,例如置顶并移动微信、QQ、Steam窗口,这样AntiCheat截图出来的内容与真实环境无异,要做的就是把读写内存隐藏好。

最后于 23小时前 被zZhouQing编辑 ,原因:
23小时前
1
雪    币: 8400
活跃值: (13509)
能力值: (RANK:385 )
在线值:
发帖
回帖
粉丝
3 楼
感谢楼主分享用 User32 窗口当方框的绘制思路与样式组合分析

帖子要点:
1. 对比传统内部 Hook 图形 API 与外部 Overlay 两种绘制方式,本文不注入、不调用图形 API,仅用 User32 摆窗口
2. 用 RegisterClassEx 注册窗口类,背景设为红色画刷,再用 CreateWindowEx 创建 WS_POPUP 窗口
3. 扩展样式组合:WS_EX_LAYERED 配合 SetLayeredWindowAttributes 实现半透明,WS_EX_TRANSPARENT 实现鼠标穿透
4. WS_EX_TOPMOST 置顶,WS_EX_TOOLWINDOW 隐藏于任务栏和 Alt+Tab,WS_POPUP 去掉标题栏边框成纯矩形
5. 用 SetWindowPos 把窗口移到目标屏幕坐标与宽高,ShowWindow 的 SW_SHOW/SW_HIDE 控制显示与隐藏
6. 缺点:该样式组合是标准 Overlay 特征,易被反作弊枚举窗口筛出;一目标一窗口,超 25 个可能卡顿,仅适合 5v5 少目标

小结由 AI 辅助整理,方便大家先看个大概,完整内容还是看楼主原帖更准确。
最后于 2小时前 被TkBinary编辑 ,原因:
23小时前
1
雪    币: 3007
活跃值: (5920)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4 楼
mark
20小时前
0
游客
登录 | 注册 方可回帖
返回