k1gs/Homefront-Free-Camera

GitHub: k1gs/Homefront-Free-Camera

该项目是一个用 C++ 编写的《Homefront》游戏自由视角 Mod,通过 DLL 注入 hook 摄像机函数实现脱离角色控制的自由镜头。

Stars: 0 | Forks: 0

# Homefront 自由视角 Mod 20260711214518_1 20260711214505_1 20260711214451_1 该项目包含两个二进制文件: - `homefront_freecam.dll` - 注入模块,用于 hook 游戏内的摄像机函数并驱动自由视角。 - `injector.exe` - 小型启动器,用于查找 `HOMEFRONT.exe` 并通过 `CreateRemoteThread + LoadLibraryW` 注入 DLL。 代码库使用 C++17 编写,通过 CMake 构建,并使用位于 `third_party/minhook` 下的本地 `MinHook` 依赖项。 ## 功能简介 该 mod 会拦截原生游戏函数,该函数每帧计算玩家的摄像机位置和旋转。在原始游戏代码运行后,该 mod 会: 1. 从游戏中读取常规摄像机输出。 2. 在启用后的第一帧捕获该位置和旋转,作为自由视角的起始点。 3. 根据键盘输入更新自身的摄像机状态。 4. 用自由视角的位置和旋转覆盖函数输出。 5. 在自由视角处于活动状态时冻结 pawn,防止角色身体随移动输入发生漂移。 这使得你可以获得一个脱离角色控制的摄像机,而游戏的其余部分继续正常运行。 ## 项目结构 - [`src/dllmain.cpp`](D:/proj/Fcam/src/dllmain.cpp) 在 DLL 注入后启动工作线程,等待启动完成,初始化 hook,并处理热键。 - [`src/hooks.cpp`](D:/proj/Fcam/src/hooks.cpp) 安装对 `GetActorEyesViewPoint` 的 hook,计算帧间隔时间,写入自定义摄像机值,并冻结 pawn。 - [`src/freecam.cpp`](D:/proj/Fcam/src/freecam.cpp) 存储自由视角状态,将 `FRotator` 转换为移动轴,并应用移动和旋转输入。 - [`src/input.cpp`](D:/proj/Fcam/src/input.cpp) 通过 `GetAsyncKeyState` 轮询键盘状态。 - [`injector/injector.cpp`](D:/proj/Fcam/injector/injector.cpp) 等待 `HOMEFRONT.exe`,在目标进程中分配内存,并远程加载 DLL。 ## 工作原理 ### 摄像机 Hook 目前的实现 hook 了一个硬编码的原生函数地址: - 目标虚拟地址:`0x00A52070` - 基于可执行文件 image base 重定位:`0x00400000` 这意味着该 mod 绑定到了特定版本的 `Homefront` 可执行文件构建。如果游戏二进制文件因补丁、其他版本或不同的发行版而发生改变,可能需要更新 hook 地址。 ### Pawn 冻结 在自由视角处于活动状态时,该 mod 会直接将数据写入 pawn 位置字段,以保持玩家身体固定在原地: - `0xBC`, `0xC0`, `0xC4` 对应 `X/Y/Z` 这些偏移量也是特定于版本的。 ## 游戏内控制 - `F9` - 开启或关闭自由视角 - `F10` - 从游戏进程中卸载 DLL - `W`, `A`, `S`, `D` - 向前、向左、向后、向右移动 - `Q` 或 `Space` - 向上移动 - `E` 或 `Ctrl` - 向下移动 - `Left`, `Right` - 偏航 - `Up`, `Down` - 俯仰 - `Shift` - 加速移动 - `Alt` - 减速移动 ## 快速开始 1. 构建 `homefront_freecam.dll` 和 `injector.exe`。 2. 确保这两个文件位于同一目录下。 3. 启动 `Homefront`。 4. 运行 `injector.exe`,如有需要,建议以管理员身份运行。 5. 等待 DLL 加载成功的提示信息。 6. 在游戏中按 `F9` 启用自由视角。 有关构建步骤,请参阅 [BUILD.md](D:/proj/Fcam/BUILD.md)。 ## 环境要求 - Windows - CMake 3.20 或更高版本 - Visual Studio 2022 或其他支持 x86 架构的 MSVC 工具链 - `Win32` / `x86` 构建目标 - 位于 `third_party/minhook` 下的 `MinHook` 检出代码 如果项目不是作为 32 位构建,它会主动停止配置过程。 ## 构建产物 成功进行 `Release` 构建后,预期输出为: - `build/Release/homefront_freecam.dll` - `build/Release/injector.exe` 根据 Visual Studio 生成器的不同,输出路径也可能显示在 `build/Win32/Release/...` 下。 ## 发布版本 带标签的版本会通过 GitHub Actions 自动发布。 当推送匹配 `v*` 的标签时,工作流将: - 在 `windows-2022` 上构建项目 - 打包 `homefront_freecam.dll` 和 `injector.exe` - 包含 `README.md` 和 `BUILD.md` - 将 `Homefront-Free-Camera--win32.zip` 资产上传至 GitHub Release 页面 有关发布步骤,请参阅 [BUILD.md](D:/proj/Fcam/BUILD.md)。 ## 限制 - 硬编码绑定到特定版本的 `HOMEFRONT.exe` 构建。 - 使用 `CreateRemoteThread + LoadLibraryW`,因此杀毒软件或操作系统保护机制可能会干扰注入。 - 如果游戏以高权限运行,注入器通常也需要以高权限运行。 - 目前还没有特征码扫描或自动签名解析功能。Hook 地址和偏移量必须手动更新。 ## 调试 该代码库在 [`src/log.h`](D:/proj/Fcam/src/log.h) 中包含一个简单的文件日志记录器,它会在 DLL 旁边写入 `freecam.log`,但目前主代码路径并未使用它。如果你需要对 hook 初始化或摄像机状态进行额外的诊断,可以快速将其接入。
标签:API钩子, Bash脚本, C++, DLL注入, Linux, MinHook, 数据擦除, 流量审计, 游戏Mod, 游戏辅助工具