当前位置: 首页 > news >正文

洛克王国:世界 — 解包与 Mod 尝试完整记录

洛克王国:世界 — 解包与 Mod 尝试完整记录

游戏:《洛克王国:世界》(Roco Kingdom: World)
引擎:Unreal Engine 4.18
代号:NRC
平台:WeGame
反作弊:ACE(Tencent Anti-Cheat Expert)内核级


一、基本信息

1.1 目录结构

洛克王国:世界(2002304)/
├── 洛克王国:世界.exe          ← 主启动器(调用 WeGame + ACE)
├── TCLS/                        ← Tencent Cloud Launcher Service
├── WeGameLauncher/              ← WeGame 启动器组件
├── Win64/
│   ├── Engine/                  ← UE4 引擎运行时
│   ├── NRC.exe                  ← 游戏启动器(206 KB)
│   └── NRC/
│       ├── Binaries/Win64/
│       │   ├── NRC-Win64-Shipping.exe     ← 游戏本体(143 MB)
│       │   ├── NRC-Win64-ShippingBase.dll  ← 游戏核心 DLL
│       │   └── AntiCheatExpert/           ← ACE 反作弊驱动
│       ├── Content/Paks/                  ← 加密 PAK 文件(61 个,约 45 GB)
│       └── Plugins/
└── msdk/ rail_files/             ← Tencent SDK 组件

1.2 游戏版本

  • 内部版本号:0.0.0.491
  • 显示版本:v1.0.0.3
  • 引擎版本:UE 4.18(使用 PhysX3 物理引擎、Wwise 音频)

1.3 PAK 文件特征

  • 使用 AES-256 加密
  • 自定义包格式(需专用解包脚本)
  • 带有 .sig 签名文件进行完整性校验
  • 补丁文件命名规范:pakchunk{N}-WindowsNoEditor_{N}_P.pak

二、解包过程

2.1 获取 AES 密钥

密钥来源:cs.rin.ru 论坛 UE4/5 AES 密钥收集帖

该游戏在论坛中的记录:

版本 AES 密钥
封测旧版 0x07120EE6E0BEF37F6D17D15AC8FF304425F7255815307CE6DED93A376074B8
封测新版 0x7460373AD9DEE67C30155825F7254430FFC85AD117DD6E7FF3BEE0E60E1207B8
当前正式版 0x34254D23E47299B3B7F6C4CFDE9BD0688703446D9D8F37B2EBDDDE5B06ED5ADF

2.2 解包工具链

由于使用自定义包格式,FModel 无法直接打开。需用 QuickBMS + 专用脚本:

  1. 下载 QuickBMS
  2. 从 cs.rin.ru 帖子底部下载 UE4_specific_scripts.zip
  3. 解压后找到 unreal_tournament_4_0.4.27e_roco_kingdom_world.bms
  4. 必须使用 quickbms_4gb_files.exequickbms.exe 不支持 2GB 以上文件)
quickbms_4gb_files.exe \unreal_tournament_4_0.4.27e_roco_kingdom_world.bms \"E:\Game\...\Win64\NRC\Content\Paks" \"D:\Software\quickbms\Roco"

脚本内置了 AES 密钥,解包过程中自动解密。

2.3 解包结果

成功解出 9057 个文件,目录结构:

Roco/
├── Engine/          ← UE4 引擎资源
└── NRC/Content/├── ArtRes/│   ├── AnimSequence/   ← 动画序列(含角色动画)│   ├── Asset/          ← 3D 模型、贴图、物理资产│   ├── BP/             ← 战斗角色蓝图│   ├── Effects/        ← 特效资源│   └── Material/       ← 材质├── NewRoco/│   └── Modules/│       ├── Core/│       │   ├── Character/Avatar/  ← **换装系统核心**│       │   └── NPC/Fashion/       ← NPC 时装│       └── System/│           └── Appearance/        ← 外观/换装系统└── ...

三、换装系统分析

3.1 Avatar 槽位结构

角色使用组件化换装系统,各部件独立挂载:

Avatar 槽位:
├── Hair (发型)     — 编号 11000~21031
├── Eyes (眼睛)     — 编号 34001~34016
├── MakeUp (妆容)   — 编号 15001~25016
├── Skin (皮肤)     — 编号 30001~30007
├── EyeBrows (眉毛) — 编号 12001/22001
├── HeadWear (头饰) — DT_PC_HeadWear
├── Pendant (挂件)  — DT_PC_Pendant
├── Shoes (鞋子)    — BP_AvatarShoes (继承 AvatarShoesConfig)
└── Wand (魔杖)     — DT_AvatarWand

3.2 鞋子配置

BP_AvatarShoes.uasset 是一个蓝图,继承自 C++ 类 AvatarShoesConfig

{"Type": "BlueprintGeneratedClass","Name": "BP_AvatarShoes_C","SuperStruct": "Class'AvatarShoesConfig'","Properties": {"DefaultHeight": 8.0}
}
  • DefaultHeight: 8.0 是鞋跟高度参数(用于调整角色离地高度)
  • 鞋子 3D 模型不在 Avatar 目录,而是随套装(Suits)分布于各 PAK 中
  • 套装文件命名:suits1_001 ~ suits1_111(男)/ suits2_001 ~ suits2_111(女)

四、运行时 Mod 尝试(全部失败)

目标:在游戏中隐藏鞋子模型,仅本地可见

4.1 方法一:直接修改 PAK 文件

  • ❌ PAK 有 .sig 签名校验
  • ❌ 修改后无法通过完整性检查
  • ❌ 重打包需要原始签名密钥

4.2 方法二:3DMigoto DLL 代理

复制 d3d11.dll + d3dx.ini + nvapi64.dll → 游戏目录
  • ❌ ACE 文件扫描检测到非白名单 d3d11.dll
  • 错误:游戏安全系统检测到非法劫持模块

4.3 方法三:3DMigoto Loader 外部注入

3DMigoto Loader.exe → 远程注入 d3d11.dll
  • ❌ ACE 进程保护阻止 CreateRemoteThread
  • 错误码:5 (ACCESS_DENIED)

4.4 方法四:ReShade + RockDLL

RockDLL 是一个专门为该游戏编写的 DLL 注入器,意图通过外部加载 dxgi.dll 绕过 ACE 文件扫描:

[INJECT]
target=NRC-Win64-Shipping.exe
dlls=D:\Tool\dist\dxgi.dll
  • ❌ 注入失败:FAILED
  • 即使是同名开源项目 RockDLL 也已被 ACE 封锁

4.5 方法五:UE4SS xinput1_3.dll 代理

复制 UE4SS.dll + dwmapi.dll(改名xinput1_3.dll) → 游戏目录
  • ❌ ACE 文件扫描检测
  • 错误:检测到非法劫持模块 (xinput1_3.dll)

4.6 方法六:UE4SS version.dll 代理

dwmapi.dll 改名为 version.dll
  • ❌ ACE 自身加载异常
  • 错误:ACE-Base64.dll 加载失败,该文件缺失或损坏
  • 副作用:version.dll 的 API hook 干扰了 ACE 的 LoadLibrary 调用

4.7 方法七:禁用 ACE 驱动

尝试 A:sc stop

sc stop ACE-BASE
sc stop ACE-ADVT
sc stop ACE-CORE102700
sc stop ACE-CORE302700
  • ❌ ACE-BASE/ADVT 卡在 STOP_PENDING 状态
  • ❌ ACE-CORE 持续运行

尝试 B:注册表禁用

reg add "HKLM\SYSTEM\CurrentControlSet\Services\ACE-BASE" /v Start /t REG_DWORD /d 4 /f
# ...(全部 5 个驱动)
  • ❌ 重启后 ACE 自修复,全部恢复为 RUNNING

4.8 方法八:关闭 WeGame + RockDLL

  1. 启动游戏 → 进入角色界面
  2. 关闭 WeGame 启动器
  3. 管理员运行 RockDLL.exe
  • ❌ 仍然 FAILED
  • ACE 是内核驱动,不依赖 WeGame 进程

五、ACE 反作弊系统分析

5.1 驱动清单

驱动名 类型 功能
ACE-BASE 内核驱动 基础保护框架
ACE-ADVT 内核驱动 高级威胁检测
ACE-BOOT 内核驱动 启动时加载
ACE-CORE102700 内核驱动 核心保护模块 A
ACE-CORE302700 内核驱动 核心保护模块 B

5.2 保护层面

┌────────────────────────────────┐
│  文件扫描层                      │
│  检查游戏目录下 DLL 白名单        │
├────────────────────────────────┤
│  进程保护层                      │
│  阻止外部 CreateRemoteThread     │
│  阻止 DLL 注入                    │
├────────────────────────────────┤
│  内核驱动层                      │
│  ACE-BASE.sys + ACE-CORE.sys    │
│  自修复 + 反禁用                 │
└────────────────────────────────┘
  • 全链路保护:文件 → 进程 → 内核
  • 自修复机制:注册表修改后重启自动恢复
  • 非白名单 DLL 全部拦截:d3d11.dll、xinput1_3.dll、version.dll

六、关键文件清单

文件 路径
游戏本体 Win64/NRC/Binaries/Win64/NRC-Win64-Shipping.exe
加密 PAK Win64/NRC/Content/Paks/pakchunk*.pak
ACE 驱动 Win64/NRC/Binaries/Win64/AntiCheatExpert/
解包脚本 unreal_tournament_4_0.4.27e_roco_kingdom_world.bms
QuickBMS https://aluigi.altervista.org/quickbms.htm
AES 密钥帖 https://cs.rin.ru/forum/viewtopic.php?t=100672

七、致谢

  • spiritovod @ cs.rin.ru — AES 密钥收集与专用解包脚本
  • Luigi Auriemma — QuickBMS 工具
  • Goldppx — RockDLL(虽然已被封,但提供了研究思路)

Disclaimer:本文仅为技术研究记录。修改游戏客户端可能违反用户协议。本文内容仅用于学习和研究目的。

http://www.jsqmd.com/news/868291/

相关文章:

  • 2026 年一人公司创业热潮:政策与 AI 驱动,机遇背后暗藏风险
  • 终极RPG Maker游戏资源解密工具:无需安装的浏览器解决方案
  • UE5.1 Lumen阴影发黑别头疼!手把手教你排查“远处树木变黑”的硬件光追坑
  • 【c++面向对象编程】第45篇:萃取(Traits)技术与策略类:STL源码中的智慧
  • Cadence AMS数模混合仿真保姆级教程:从Virtuoso环境搭建到仿真加速全流程
  • VLC隐藏玩法:结合Lua脚本实现智能视频播放(比如根据时间切换片单)
  • 告别云端:用Llama.cpp+Q4量化模型,在Jetson Orin Nano上打造你的私有AI助手
  • FastbootEnhance:Windows平台终极Fastboot工具箱与Payload提取器完整指南
  • 基于SpringBoot2+vue2的流浪宠物管理系统
  • Multi-Agent系统的高可用架构:容灾设计、故障隔离与快速恢复方案
  • 告别数据混乱!用腾讯TBDS的数据血缘与数据地图,5分钟理清你的数据资产
  • 如何使用FinalShell远程管理Linux云服务器?
  • 避坑指南:MMSegmentation自定义数据集训练时,如何解决‘xxxDataset is not in the dataset registry’等5个常见报错
  • ArcGIS Desktop 10.2 安装后必做的5件事:从激活分析拓展到优化地图性能
  • C#与Unity 3D构建100ms级工业数字孪生系统
  • 用ESP32-S3和花生壳内网穿透,5分钟搞定远程宠物/植物监控摄像头
  • 从张宇的课到代码实战:用Python和MATLAB手把手搞定分数阶求导(附完整代码)
  • 三年级下册语文第三单元作文:我做了一个小实验300字
  • Nature 正刊丨向蜜蜂偷师,教会了无人机长距离精准导航,内存只需42KB!
  • Stata面板数据回归保姆级教程:从xtset到豪斯曼检验,手把手搞定实证分析
  • 【c++面向对象编程】第46篇:CRTP(奇异递归模板模式):静态多态的妙用
  • 别再乱买充电头了!一文看懂USB PD协议,教你选对笔记本和手机的‘能量搭档’
  • 从炼丹到炼蛋白:手把手拆解AlphaFold2的模型架构与训练技巧
  • 新高考答题卡模板全套PDF可打印(语文数学英语等)
  • 告别Ground Truth!用U2Fusion这个无监督网络,搞定多模态图像融合(附RoadScene数据集)
  • 2026年评价高的LED 薄膜开关/东莞定制薄膜开关厂家综合对比分析 - 行业平台推荐
  • Klogg实战:5分钟搞定海量日志中的Error排查(颜色标记+正则过滤技巧)
  • 告别编译限制!手把手教你用注册机破解Keil5 MDK(附2032年有效CID生成方法)
  • 手把手教你用C语言写一个简易的SMTP邮件内容解析器(基于libnids抓包库)
  • 别再只调样式了!深入理解鸿蒙ArkTS中Slider的四种交互状态(Begin/Moving/End/Click)