CFramework/README.md

8.5 KiB
Raw Blame History

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)。
  • 参数: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 等)已包含在仓库内,无需额外安装,直接打开 CFramework.sln 选择 Release x64 构建即可。
  • 首次构建参考:Visual Studio C++ 安装指南 输出:x64\Release\CFramework.exe

运行前提:先启动 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 发布所需配置。
  • 玩家、物资、手雷列表使用运行时长度 + 上限校验的批量读取,不再使用固定 address[64] / address[2048] 缓冲。
  • 工作线程可 join;退出时先停止并等待后台线程,再恢复功能写入和关闭进程句柄。

详细变更与验证结果见 REFACTOR_NOTES.md。

已知问题

  • 当前包是在 Linux 容器中做源码级重构,环境没有 Visual Studio 2022 / Windows SDK,因此没有执行真正的 MSVC Release x64 链接构建。核心重构源文件已用 Clang + Windows API 测试桩做 -fsyntax-only 验证;最终仍建议在 VS2022 中执行一次 Release x64 全量构建。
  • ObservedPlayerView 的昵称、Role、实时 Health 等字段在当前 dump 中仍是混淆字段;本次实现采取保守降级显示,不猜测未知字段语义。
  • 主 Overlay 仍跟随 VSync/显示器刷新率;UpdateFeatures() 是渲染线程写功能路径,后续如果需要进一步降低 CPU/RPM,可以单独给写功能增加节流/脏标记。

项目结构

CFramework/
├── CFramework.sln / .vcxproj        # VS 解决方案
├── CFramework/
│   ├── main.cpp                     # 入口:附加进程、初始化 Overlay、字体、后台线程
│   ├── Cheat/                       # 功能实现
│   │   ├── 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