|
|
||
|---|---|---|
| CFramework | ||
| CFramework.SelfTest | ||
| .gitignore | ||
| CFramework.sln | ||
| DUMP_INDEX.md | ||
| Directory.Build.props | ||
| LICENSE | ||
| README.md | ||
| REFACTOR_NOTES.md | ||
| build_index.py | ||
| dump_index.db | ||
| query_index.py | ||
| verify_fonts.py | ||
| verify_runtime.ps1 | ||
README.md
CFramework
面向 SPT-AKI 3.11.3(Escape From Tarkov 单机版)的外部辅助程序(External Cheat)。
以 ImGui + DX11 透明 Overlay 渲染,通过外部内存读写实现 ESP、自瞄、压枪等功能。 本项目最初发布于 UnknownCheats,作者已对开发失去兴趣,故公开源码,供研究、分析、学习与调查使用。
注意:本项目面向单机离线版 SPT,与官方 Tarkov 无关。
功能特性
ESP(玩家 / 环境)
| 功能 | 说明 | 状态 |
|---|---|---|
| 玩家 ESP | PMC / SCAV / BOSS / 玩家SCAV / 特殊SCAV 区分着色 | ✅ |
| 方框 / 填充方框 | 支持两种方框样式(g_ESP_BoxStyle) |
✅ |
| 骨骼 | 基于 PlayerBones 关节链(Head / Neck / Ribcage / Pelvis 等) | ✅ |
| 血条 / 距离 / 名称 | 玩家头顶信息 | ✅ |
| 连线 | 屏幕中心到目标连线 | ✅ |
| 物资 ESP | 稀有物资标记(名称 + 距离,g_ESP_MaxItemDistance 可调) |
✅ |
| 尸体 ESP | 尸体标记 | ✅ |
| 撤离点 ESP | 开启 / 未开启撤离点分色(绿 / 橙) | ✅ |
| 手雷 ESP | 投掷物轨迹标记 + 屏幕顶部 [ WARNING ] Grenade!! 警告 |
✅ |
| 最大距离 | g_ESP_MaxDistance(默认 500m) |
✅ |
自瞄(AimBot)
- 两种模式:
- Mouse 模式(默认):
SendInput模拟鼠标移动,无需偏移,稳定可靠; - Memory 模式:直接写
MovementContext::Rotation,需用菜单 [Rot Debug] 在实机上校准偏移(Offset.h中MovementContext::Rotation,默认0x58 -> 0x27C)。
- Mouse 模式(默认):
- 参数:FOV 半径、自适应平滑(0-100)、灵敏度倍率、单帧最大移动、最大锁定距离(m)、骨骼选择(Head / Neck / Body)。
- 目标过滤:PMC / SCAV / BOSS 独立开关、忽略血量判定。
- 强制开启(免按键):勾选后无需按键,自瞄直接生效(用于按键检测失效的环境)。
- 显示 FOV 圈、目标连线(调试用)。
- 触发键:按住 鼠标右键(ADS) 或 左键(射击) 时生效;
F9作为键盘兜底触发键(Config.h中g_AimKey0/1/2可改)。
压枪(Recoil Control)
- 射击期间按固定间隔向下补偿鼠标(宏式)。
Strength:每次下拉的鼠标单位;Interval:下拉间隔 [ms]。
Misc
| 功能 | 说明 |
|---|---|
| 无限耐力 | 锁定 Physical 耐力值(含手部耐力) |
| 无跌落伤害 | 修改跌落伤害倍率 |
| 无摇摆 | 清空 MotionEffector.SwayFactors |
| 无后座(内存) | 直接改写 ShotEffector / 武器后座参数(与宏式压枪不同,纯内存) |
| 无故障 / 卡弹 | 屏蔽卡壳 / 供弹故障 / 不发火 / 滑套未复位 |
| 串流隐藏 | 直播 / 录屏防暴露 |
| 准星 | 屏幕中心自定义准星(大小 / 样式可选) |
菜单
- 打开 / 关闭:INSERT(
Config.h中g_MenuKey可改) - 菜单已中文化:左侧图标导航栏 + 右侧设置面板,共 4 页 —— 自瞄 / 视觉 / 功能 / 设置。
构建
- 环境:Visual Studio 2022(MSVC v143),x64。
- 所有第三方库(ImGui、DirectXTK SimpleMath、FreeType、nlohmann/json 等)已包含在仓库内,无需额外安装。
- 日常开发不要只执行裸构建;先运行统一回归门禁:
powershell -ExecutionPolicy Bypass -File .\verify_runtime.ps1
门禁会依次:
- 从当前源码重建
CFramework.SelfTest; - 运行对象链、四种 GOM 布局、首次失败恢复、Snapshot freshness、Camera 和 W2S 回归测试;
- 仅在全部测试通过后重建 Release x64 Overlay;
- 将隔离产物和 SHA256 输出到
x64\RuntimeGuard\,不会覆盖正在使用的x64\Release\CFramework.exe。
也可以直接打开 CFramework.sln 选择 Release x64 构建;正式发布前仍必须运行上述门禁。
运行前提:先启动 SPT-AKI 3.11.3 客户端(进程名为 EscapeFromTarkov),再以管理员身份运行 CFramework.exe。
程序通过窗口标题附加进程并创建覆盖层;若附加失败返回码 1,Overlay 初始化失败返回码 2。
当前数据架构(2026-08 重构)
CGame的 GameWorld / Camera 状态由动态数据线程统一刷新,并在内部用互斥锁保护。- 动态玩家、相机矩阵和手雷数据发布为不可变
DynamicWorldSnapshot;撤离点和物资发布为StaticWorldSnapshot。 - ESP 与 Aim 目标选择只消费 Snapshot,不在渲染阶段直接 RPM。真正的 Memory Aim / 功能 override 仍通过独立写入路径执行。
RegisteredPlayers按IPlayer处理,并区分完整EFT.Player与ObservedPlayerView两种布局。ObservedPlayer 无法从当前 dump 可靠确认的 Profile/Health/Role 字段不会强行套用。- 后台线程不直接读取 ImGui 绑定的普通
g_*变量;渲染线程通过WorkerConfigSnapshot发布所需配置。 - 动态 Snapshot 带采集时间、刷新次数和连续失败数;超过 250ms 的 stale 数据不会用于 ESP、Aim 或功能写入。
CGame的读取边界支持注入 synthetic memory reader;CFramework.SelfTest可在不启动游戏的情况下复现 GOM/节点链和失败恢复路径。- 玩家、物资、手雷列表使用运行时长度 + 上限校验的批量读取,不再使用固定
address[64]/address[2048]缓冲。 - 工作线程可 join;退出时先停止并等待后台线程,再恢复功能写入和关闭进程句柄。
详细变更与验证结果见 REFACTOR_NOTES.md。
已知问题
- 当前 Windows 环境已完成 MSVC v143
Release x64全量重建,并通过 16 项离线 Runtime SelfTest;仍需在每次 offset、线程或读取逻辑变更后执行verify_runtime.ps1和实机进出局烟雾测试。 ObservedPlayerView的昵称、Role、实时 Health 等字段在当前 dump 中仍是混淆字段;本次实现采取保守降级显示,不猜测未知字段语义。- 主 Overlay 仍跟随 VSync/显示器刷新率;
UpdateFeatures()是渲染线程写功能路径,后续如果需要进一步降低 CPU/RPM,可以单独给写功能增加节流/脏标记。
项目结构
CFramework/
├── CFramework.sln # VS 解决方案(主程序 + SelfTest)
├── verify_runtime.ps1 # Runtime 回归门禁:测试通过后才构建 Overlay
├── CFramework.SelfTest/ # synthetic memory 离线测试项目
│ └── SelfTest.cpp
├── CFramework/
│ ├── CFramework.vcxproj
│ ├── main.cpp # 入口:附加进程、初始化 Overlay、字体、后台线程
│ ├── Cheat/ # 功能实现
│ │ ├── SnapshotHealth.h # generation、时间戳和 250ms freshness 契约
│ │ ├── Aim.cpp # 自瞄 + 压枪(Mouse / Memory)
│ │ ├── Visual.cpp # ESP 渲染(玩家/物资/撤离点/手雷)
│ │ ├── Features.cpp # 耐力/跌落/摇摆/后座/故障 override
│ │ ├── Menu.cpp # ImGui 菜单(中文)
│ │ ├── Render.cpp / UpdateList.cpp
│ │ └── SDK/ # 游戏对象封装
│ │ ├── CPlayer / CExfil / CItem
│ │ └── GameSDK/ # Offset.h(全部偏移)、Struct.h
│ └── Framework/ # 可复用框架
│ ├── Memory/ # 外部内存读写(ReadChain 等)
│ ├── Overlay/ # DX11 透明覆盖层
│ ├── Input/ # 输入处理
│ ├── ImGui/ # 内置 ImGui + DX11/Win32 后端 + 字体
│ ├── Config/ # 全局配置(Config.h 中 g_* 全局变量)
│ └── Libs/ # FreeType / SimpleMath / nlohmann
├── build_index.py / query_index.py # IL2CPP dump 索引工具(见下)
├── dump_index.db # 生成的索引库
├── DUMP_INDEX.md # 索引工具使用文档
└── LICENSE # MIT
配套工具:IL2CPP dump 索引
dump.txt 是 Unispect v0.2.4.0 生成的 IL2CPP 类布局 dump(15.8 万行 / 7MB),
配套脚本将其流式解析为 SQLite 索引(dump_index.db,含 FTS5 全文索引),毫秒级检索类型 / 字段 / 偏移,替代对原始文本的暴力搜索。
# 构建索引(默认输入 F:\desktop\Release\dump.txt)
python build_index.py
# 自定义路径
python build_index.py D:\other\dump.txt D:\other\dump_index.db
# 查询统计 / 检索
python query_index.py stats
python query_index.py find Player.FirearmController
详细用法见 DUMP_INDEX.md。
免责声明
本项目仅用于学习、研究、教育目的。作者(Neko64V)对因使用本软件造成的任何直接或间接损失不承担任何责任,请勿将其用于任何非法用途。
致谢与依赖
- ImGui — 界面框架(内置,含 DX11 / Win32 后端与 FreeType 渲染)
- Microsoft DirectXTK (SimpleMath) — 数学库
- FreeType — 字体渲染
- nlohmann/json — JSON 解析
- Font Awesome 6 — 菜单图标
- 字体:Roboto(内置压缩字体)+ 微软雅黑(
C:\Windows\Fonts\msyh.ttc,CJK 中文 fallback)
License
MIT © 2024 Neko64V