深入Sunrise架构:客户端钩子、协议中间件、本地服务器与持久化状态的四层设计

发布时间:2026/10/13 9:45:42

深入Sunrise架构:客户端钩子、协议中间件、本地服务器与持久化状态的四层设计 【免费下载链接】SunriseDestiny 2 Offline Preservation Mod项目地址https://gitcode.com/gh_mirrors/sunrise16/Sunrise点击查看免费下载Sunrise 是一款面向老版本《Destiny 2》的离线保存 ModDestiny 2 Offline Preservation Mod它把游戏装进一个本地运行的四层架构中客户端钩子接管游戏进程协议中间件复刻官方 BAP 通信层本地服务器在进程内应答网络请求持久化状态层则负责存档与账号数据的落盘。理解 Sunrise 架构就是理解这四层如何协同让游戏完全离线运行。一张表看懂 Sunrise 的四层架构 ️层级职责核心目录客户端钩子层注入游戏进程接管图形、网络、输入等关键调用Sunrise/src/client/hooks/协议中间件层解析与编码 BAP 帧、加解密、SignOn 认证Sunrise/src/middleware/本地服务器层进程内回环监听应答活动、Web Service 等请求Sunrise/src/server/持久化状态层账号、投资进度、解锁记录等数据读写Sunrise/src/state/入口文件 Sunrise/src/dllmain.cpp 暴露了整套生命周期的三个导出函数SunriseInitialize安装出口防护并初始化核心、SunriseActivateClient激活客户端钩子、SunriseShutdown干净退出并附带一组SteamAPI_*兼容导出为游戏提供进程内的 Steam 兼容运行时。第一层客户端钩子如何接管游戏进程钩子层是 Sunrise 与游戏进程接触的唯一面。核心逻辑集中在 Sunrise/src/client/runtime/client_runtime_lifecycle.cpp其中initialize负责建立客户端进程状态shutdown则按依赖顺序逐个卸载钩子graphics → cursor → polled_input → world_objects → network…并借助 Sunrise/src/core/logging/log.h 的结构化日志记录每一步的安装结果。钩子按功能拆分为独立子模块几个典型例子图形钩子Sunrise/src/client/hooks/graphics/ 对 D3D11 呈现路径做 detour是 ImGui 菜单的渲染基础生命周期由 graphics_hook_lifecycle.h 管理网络出口防护Sunrise/src/client/hooks/egress/ 拦截出站连接保证 Mod 完全离线运行、不触达任何官方服务器玩法钩子飞移fly、穿墙noclip、无限弹药、传送、闲置覆盖等每个都是独立目录便于单独开关与卸载。这种一个钩子一个模块的划分是新手阅读 Sunrise 源码时最好的切入点。第二层协议中间件复刻了官方通信栈 游戏客户端原本要与 Bungie 的 BAP 网络服务通信Sunrise 用 Sunrise/src/middleware/ 在本地完整复刻了这一通信栈BAP 帧协议frame.h 定义了外框编码明文帧、AES-GCM 加密帧以及RequestService/ResponseService全量服务号表——从活动会话创建activityHostManager到 Web Service 请求客户端发出的每一类请求都有对应编号加密原语middleware/crypto/内聚了 AES-GCM、AES-CBC、HMAC、SHA256 等自实现算法服务于安全通道与签名流程SignOn 与序列化middleware/signon/处理登录令牌middleware/protobuf/与middleware/encoding/负责消息的序列化与位级编解码。这一层的设计价值在于中间件不关心请求来自哪里客户端与本地服务器只共享同一套帧编解码契约天然可测试、可裁剪。第三层本地服务器在进程内应答一切 ️既然不连接官方服务器就要有人扮演服务器。Sunrise/src/server/ 实现的正是这个角色server_runtime.h 只暴露initialize/service/shutdown三个接口service每帧被驱动一次有界切片避免阻塞游戏主线程bap_listener.h 启动一个非阻塞回环loopbackBAP 监听器客户端发往官方服务器的帧最终落在这里server/bap/是请求路由核心server/activity/承担活动与任务脚本的权威运行时server/web_service/则应答 Web Service 请求。这种服务器同进程化的架构是 Sunrise 能做到零外部依赖、零账号验证的关键。第四层持久化状态层让存档真正落地 Sunrise/src/state/ 是数据的家。进程内会话状态由 state/runtime/state.h 统一定义——SignOn 密钥与令牌、BAP 会话密钥、活动状态、匹配状态、Steam 状态各归其位而需要跨启动保留的数据则落在持久化存储里state/account/账号档案、设置、战利品清单state/investment/投资解锁、奖励与库存的数据库读写启动逻辑见 investment_store_boot.cppstate/build_data/以结构化子目录abilities、bounties、items、vendors 等承载游戏构建数据的运行时视图state/activity_sdk/活动 SDK 的目录、加载器与校验逻辑支撑脚本化任务这一核心功能。README 中特别强调所有游戏数据都在运行时从本机提取正体现了这一层的设计约束仓库内不含任何版权数据状态层只做读写不打包内容。四层如何串成一次完整的调用 以进入游戏目的地为例链路是典型的四层协作客户端钩子在游戏内部触发活动选择流程出站帧被出口防护层拦截本地服务器的回环监听器收到 BAP 请求帧路由到server/bap/的活动权威逻辑中间件完成帧解码、校验与响应编码全程使用进程内密钥无需真实握手服务器将新活动会话写回状态层客户端收到响应后继续游戏下次启动时该记录仍可从持久化存储恢复。想动手跟踪这条链路建议从 Sunrise/src/dllmain.cpp 的生命周期导出入手再对照 client_runtime_lifecycle.cpp 与 server_runtime.h 的调用顺序。上手指南目录导航与构建 ⚙️想读钩子从Sunrise/src/client/hooks/挑一个兴趣模块如noclip/、fly/看起每个模块都有 lifecycle 文件说明安装与卸载想读协议精读 frame.h配合middleware/signon/理解认证流程想读存档从Sunrise/src/state/investment/的 store 文件入手注意一个 store 一类数据的划分想编译Windows 下用 Visual Studio 2026 打开 Sunrise.sln 构建 Release x64Linux 下可用 linux-to-win-toolchain.cmake 交叉编译CMakeLists.txt 定义了跨平台构建目标。小结Sunrise 架构的精髓在于边界清晰钩子层不写业务、中间件层不写路由、服务器层不碰磁盘、状态层不懂协议。这种分层让一个让在线游戏离线可玩的复杂目标变成了四个可独立理解、独立测试的模块。对想学习 Mod 开发、协议逆向或本地服务器设计的读者来说Sunrise 源码入口Sunrise/src/是一份相当完整的工程范本。赞分享【免费下载链接】SunriseDestiny 2 Offline Preservation Mod项目地址https://gitcode.com/gh_mirrors/sunrise16/Sunrise点击查看免费下载相关推荐深入 Kaku 的 mux 层Tab/Pane/Domain 状态管理与客户端-服务端协调架构指南深入 Kaku 的 mux 层Tab/Pane/Domain 状态管理与客户端 服务端协调架构指南 mux 是 Kaku一个面向 AI 编码的 macOS深入解析OPAL核心架构掌握客户端-服务器无状态设计原理深入解析OPAL核心架构掌握客户端 服务器无状态设计原理 OPALOpen Policy Administration Layer是一个强大的策略和数据管认证鉴权后端微服务API网关libSQL sqld 服务端架构设计解析客户端/主服务器/副本服务器与 mvSQLite 后端的协同机制libSQL sqld 服务端架构设计解析客户端/主服务器/副本服务器与 mvSQLite 后端的协同机制 导读 本文以仓库内 docs/DESIGN.md数据库关系型数据库嵌入式数据库后端数据同步创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/13 9:45:42

波段指标源码拆解:从趋势过滤到ATR动态突破雷达

最近在某期货交易交流群里,又看到有人贴出一张截图,标题写着"价值上亿的波段指标源码",配了一大段密密麻麻的公式。说真的,做技术指标这几年,我见过太多类似的东西,从最开始的好奇、迷信&#xf…

2026/10/13 11:01:05

C++数组指针字符串:从内存视角彻底搞懂核心难点

我知道很多人第一次翻开郑莉这本《C语言程序设计》,到第六章"数组、指针和字符串"就开始心里打鼓。说实话,我当年也是这样:前面的流程控制、函数调用,照着抄总能写出来,可数组和指针一上来,什么&…

2026/10/13 11:01:05

智能PDU:从车间排插到智慧工厂电力神经中枢

1. 先聊聊为什么车间里要装“智能排插”前阵子去一个做汽车零部件的工厂看产线改造,走到车间角落的配电柜旁边,正好看到一位老师傅拿着红外测温枪对着一个满负载的插线板在测温度。那个插线板上插着三台设备的电源,线缆摸上去已经有些发烫了&…

2026/10/13 11:01:05

OpenClaw跨平台安装指南:让《Captain Claw》在现代系统重生

前几天整理旧硬盘,翻出一个十年前的游戏存档文件夹,里面还躺着那只猫船长的记录。我试着双击当年的老游戏程序,Win11下直接黑屏闪退,连个报错都不给。正想放弃,朋友提了一句:“有没有试过OpenClaw&#xff…

2026/10/13 11:01:05

2026计算机职业规划:产品思维与新兴技术赛道

## 1. 计算机专业职业规划的现状与痛点2026年的计算机行业与十年前相比已经发生翻天覆地的变化。当我在某985高校计算机系担任企业导师时,发现超过70%的应届生仍在使用2015年的职业规划模板——这就像用Windows XP的操作手册来指导Windows 12的安装。最典型的认知偏…

2026/10/13 11:01:05

Java+SSM+Flask全栈实现在线奶茶店系统

1. 项目概述:在线奶茶店系统的全栈实现这个基于JavaSSMFlask的网上奶茶店系统,是我为连锁奶茶品牌开发的一套完整的线上销售解决方案。系统采用前后端分离架构,后端使用JavaSSM框架处理核心业务逻辑,Flask则负责轻量级的API服务和…

2026/10/13 10:56:04

三天搞定论文AI率:排查、深度改写与复测全攻略

如果你刷到了这篇文章,大概率正经历同一件事:导师把论文回传过来,批注栏里只有一句话——“AI率太高,自己回去改”,外加一张检测报告截图。2026年了,这已经不是什么新鲜事。随着生成式工具在学术写作里的使…

2026/10/13 5:19:27

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/12 12:01:26

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/12 12:54:07

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/13 0:04:41

基于Triton部署YOLO目标检测:从训练脚本到线上服务

简介:这份资源面向希望将目标检测模型落地到生产环境的深度学习开发者与算法工程师,聚焦于用 Triton Inference Server 部署 YOLOv9 的完整实战方案,解决从训练权重到线上推理服务之间的工程化难题。压缩包共 16 个文件,约 886KB&…

2026/10/13 0:04:41

手把手教你云端部署Qwen-Image-2.1:从GPU选型到在线文生图服务

Qwen-Image-2.1 这个开源的图像生成模型,最近在内容创作和 AI 应用圈子里热度相当高。它属于通义 Qwen 系列里的视觉生成分支,让我眼前一亮的是它对中文长文本的理解能力——以前用那些老方案生成带中文文字的图,十个里九个是“乱码印刷体”&…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑