基于
ImGui + D3D11的外部可视化/辅助框架项目,面向 Windows 平台。
线程和资源有较大优化空间,主要是写实现功能作学习研究。
- 本仓库代码仅用于学习 C++ 多线程、内存读写、图形叠加层与工程化组织。
- 请遵守你所在地区法律法规、软件许可协议与游戏平台规则。
CheatiFrame 是一个模块化的 C++ 工程,核心由以下部分组成:
- 叠加层窗口与渲染(
Visuals/External.*) - 菜单与配置输入(
Visuals/Menu.*) - 业务主逻辑(
Cheats/Cheats.*) - 偏移加载(
Cheats/OffsetsLoader.*+Offsets/*.json) - 可视性检测运行时(
Math/VisCheckCS2/*+maps/*.opt) - 鼠标输入后端抽象(WinAPI / KMBox)
入口在 main.cpp,通过窗口类名与窗口标题附着目标窗口,并将主循环回调交给 Cheats::CheatMain。
- 2D/3D 框体绘制
- 骨骼与可视骨骼点绘制
- 血量、距离、准心、FOV 圆
- C4 信息显示(站点、是否拆包)
- 自瞄 / 扳机 / 后座补偿
- 可配置热键
- 曲线控制(速度、平滑、X/Y 比例)
- 可选智能部位选择
- 按地图加载点位(
GrenadeData/*.json) - 站位点与瞄点引导
- 点位录制与列表管理
- 站位聚类后的文字列表显示
- 前后缓冲渲染数据发布(渲染线程仅消费)
- 通过
maps/*.opt做点位可视性检测 - 异步地图加载与状态展示(Loaded/Loading/Not Found)
- WinAPI
- KMBox Net(IP:Port + UUID)
- KMBox B+ Pro(串口 COM)(未测试)
- 采用消费者线程队列异步发送,避免主逻辑阻塞
Configs/*.json保存/加载- 启动自动加载上次配置(
Configs/last_loaded.txt)
项目采用“采集-计算-绘制”分层设计,核心线程包括:
ReadWorker:读取原始状态(实体、矩阵、本地玩家、武器、骨骼等)EspWorker:世界坐标到屏幕数据转换,构建可绘制数据AimWorker:目标选择、平滑计算、输入命令下发- UI/Render 线程:只负责
ImGui与 D3D11 绘制
共享数据通过 SharedState 管理,使用 shared_mutex/atomic 协调。
ReadProcessMemory结构体读取与批量读取(ReadInto/ReadBuffer)- 页缓存读取(
ReadCached,4KB 页) - 骨骼块读(减少高频小 RPM)
- 地图名低频缓存
- GrenadeHelper 可绘制数据前后缓冲发布(
grenadeBack -> grenadeFront) - 渲染线程不做重逻辑计算
CheatiFrame/
├─ main.cpp # 程序入口
├─ Cheats/
│ ├─ Cheats.cpp/.h # 核心逻辑与线程调度
│ ├─ GameState.h # 线程共享状态定义
│ ├─ MouseController.cpp/.h # 输入后端抽象与异步命令队列
│ ├─ OffsetsLoader.cpp/.h # 偏移JSON加载
│ ├─ OffsetsData.h # 偏移字段结构
│ └─ AimCurves.cpp/.h # 瞄准曲线计算
├─ Visuals/
│ ├─ External.cpp/.h # Overlay窗口、D3D11、ImGui、消息循环
│ └─ Menu.cpp/.h # UI菜单与用户配置输入
├─ Math/
│ ├─ Vector.h # 向量与数学工具
│ └─ VisCheckCS2/ # 地图可视检测解析与运行时
├─ KmBox/
│ ├─ kmboxNet.cpp/.h # KMBox Net 对接
│ └─ KmboxB*.h / my_enc.cpp # KMBox B+ Pro 相关
├─ Offsets/
│ ├─ offsets.json
│ ├─ buttons.json
│ └─ client_dll.json
├─ GrenadeData/ # 地图点位JSON
├─ maps/ # 对应地图 .opt 可视文件
├─ ImGui/ # Dear ImGui 源码
└─ thirdparty/rapidjson/include/ # RapidJSON
main.cpp调用Visual::external.AttachWindow(...)。External::MessageLoop()每帧驱动Cheats::CheatMain()。CheatMain()处理热键与菜单,再进入Game::CheatTick()。CheatTick()负责:- 初始化(进程/模块/偏移/线程)
- 配置快照更新
- 地图状态刷新与点位管理请求处理
- 渲染层消费
esp/aim/grenade前台数据
- 工作线程持续生产数据并发布到共享状态。
- Windows 10/11
- Visual Studio 2022(MSVC v143)
- Windows SDK(工程中目标为
10.0) - C++17
- D3D11(系统库)
- WinSock2(系统库)
- ImGui(仓库内置)
- RapidJSON(
thirdparty/rapidjson/include)
- 用 VS2022 打开
CheatiFrame.sln - 选择
Debug|x64或Release|x64 - 直接生成
CheatiFrame项目
- 启动目标应用窗口(默认查找类名
SDL_app、标题Counter-Strike 2) - 运行本程序
- 默认热键:
Insert:显示/隐藏菜单End:退出程序
字体默认从程序当前目录读取 font.otf;若缺失,会回退到 ImGui 默认字体。
- 位置:
Offsets/ - 文件:
offsets.json、buttons.json、client_dll.json - 用途:运行时读取偏移并填充
OffsetsData
- 位置:
GrenadeData/*.json - 用途:按地图加载站位/瞄点数据
- 位置:
maps/*.opt - 用途:供
VisCheckRuntime做可视检测
- 位置:
Configs/*.json - 最近配置:
Configs/last_loaded.txt
- 检查目标窗口类名/标题是否匹配
- 检查是否创建了 D3D11 设备(日志输出)
- 确认
maps/下存在对应地图.opt文件 - 确认地图名规范(不含
maps/前缀与.bsp后缀)
- 工程已开启
/utf-8 - 若第三方文件存在异常字符,请保存为 UTF-8(无 BOM 亦可)
- 检查
Offsets/三个 JSON 是否存在且字段完整
- 将新逻辑优先放入工作线程,渲染线程保持“纯绘制”
- 高频路径避免动态分配与多次小块 RPM
- 统一通过
SettingsSnapshot传播菜单配置,减少跨线程直接访问
Read1dno VisCheck
ocornut ImGui
Tencent RapidJson





