【免费下载链接】universal-modder
Point Claude at any game. Skills, tools and the fal MCP that let Claude Code mod almost any PC game you own: recon, reverse engineering, fal-generated art/3D/audio, in-game testing, showcase videos.
在让 Claude 等 Agent 自动 mod 任何一款 PC 游戏时,最大的风险不是改不出效果,而是账号被封、存档被毁、机器被拖慢或被植入恶意组件。universal-modder 在mod-any-game技能中专门维护了一份 safety.md,系统性地规定了四条防线:在线游戏与反作弊的"明亮边界"、版权与再分发的可发布物清单、对用户机器(存档、注册表、输入、进程、网络)的具体保护动作,以及必须停下来征询用户的场景。本文以这份文档为骨架,并结合仓库中um工具包的真实实现(um backup、um publish check、um win等),讲清每一条规则背后的工程落地方式,使你在驱动 Agent 做 mod 前就建立起可执行的检查清单。
定位:这套规则在 mod-any-game 工作流中的位置
safety.md 是 mod-any-game 技能 的参考文档之一,在技能定义中被明确标注为"the rules with their reasons, anti-cheat and legal hygiene"(带理由的规则、反作弊与法务卫生)。SKILL.md 的 "Hard rules" 一节是它的浓缩版:只 mod 用户拥有的游戏、绝不触碰带反作弊的在线客户端、不做任何绕过(bypass)、不重分发游戏文件、先备份再动手、进程卫生、接管输入前先询问。文档本身开宗明义:这些规则保护的是用户的账号、存档与机器,并保持其 mod 可分享——"None of this is legal advice",当游戏 EULA 或 mod 政策真正关键时,去查发布商的政策(例如搜索 " mod policy")。
以下各节按文档原文脉络展开:在线反作弊边界、所有权与再分发、用户机器、何时停下来问。
在线游戏与反作弊:明亮边界(the bright line)
文档把这条边界称为 "bright line"(明亮边界)——它不依赖灰色裁量,规则是二值的:
只做单机/离线,或者用户自己运行的服务器。向在线客户端注入代码违反其服务条款并导致封号;目的是在对战中获取优势时,就是作弊。无论话术如何包装,都必须拒绝 aimbot(自瞄)、ESP/wallhack(透视)、加速/瞬移 hack、压枪脚本与数据包篡改。
内核或用户态反作弊就是代码注入的"停止标志"。文档点名了具体产品清单:EasyAntiCheat、BattlEye、Vanguard、EA Javelin、Ricochet、ACE(Anti-Cheat Expert)、nProtect、XIGNCODE 与 mhyprot。存在这些组件时,只剩两条路:
- 走官方 modding 通道(Steam Workshop、创意/地图编辑器、官方 mod kit);
- 走官方离线模式,即发布商自己提供的、不带反作弊的离线启动。文档给出的范例是《艾尔登法环》:社区通行做法是通过
ModEngine2/me3以关闭 EAC 的离线方式启动,而 seamless co-op(无缝联机)是另一套完全独立的体系,不适用这条豁免。
"绝不做"清单(Never):
- 禁用或绕过反作弊;
- 伪造硬件 ID(spoof hardware IDs);
- 篡改 DRM(Denuvo、Steam stub)或所有权校验。
文档的判定句很直接:如果一个 loader 需要把游戏的 EXE 补丁到 DRM 检查之后才能加载,立刻停手。
VAC(Valve)规则:VAC-secured 服务器会对修改过的客户端封号。本地测试时用
-insecure参数启动,且只要有任何注入就永远不要加入公共服务器。旁观者风险:与受保护游戏"共处一室"的工具(调试器、Cheat Engine、会注入的 overlay 等)即使你从不主动碰游戏,也可能触发其反作弊。因此 RE(逆向工程)会话之前应先关闭受保护的游戏。
这条边界的工程价值在于:它让 Agent 的侦察阶段(um scan会报告反作弊类型)能够直接映射到"可注入 / 仅官方通道 / 停手"三种路由决策上,而不是在灰色地带里自行权衡。
所有权与再分发:什么能发布、什么绝不能发布
输入端:只 mod 用户拥有的游戏
文档规定:mod 用户拥有的游戏,素材来源是其自己的安装,或用户自己拥有的卡带/光盘 dump。不去下载 ROM、ISO 或别人的游戏文件。
输出端:发布黑名单与白名单
不得发布(Don't publish):
- 游戏文件,或与之字节完全相同的副本;
- 提取出来的游戏资产(extracted assets);
- 反编译源码;
- 烧录进交付代码中的零售版偏移量或反编译器命名。
文档给出的工具是um publish check --game <install>,用来抓住明显情况。这条命令的实现就在 um/publish.py 中,值得拆开看它到底查什么(见下文"publish check 的实现"一节)。
可以发布(Do publish):
- 你自己的代码和资产。fal 生成的素材在 fal 的条款下归你使用,商用前需查对应模型(模型提供方)的许可;
- 补丁(patch)、diff、以及在安装时转换用户自己文件的 converter/installer——即"自带游戏文件"(bring your own game files)模式。
署名与 AI 披露
文档要求:为 loader、库与参考资料署名,并诚实地披露 AI 的使用。社区对未披露的 "vibe-coded" 发布反应很差,某些圈子(文档提到"某些 recompile Discord")会直接封禁 AI 项目。
下架是真实风险,即使没带资产
文档用两起公开事件说明风险:Take-Two 曾要求 GitHub 下架 re3 与 reVC(GTA III 与 Vice City 的逆向代码)并起诉作者(2021 年);Activision 在 H2M mod 上线前一天向其发送了停止侵权函(2024 年)。结论是:即使不携带游戏资产,纯逆向成果也可能被追责;商用、变现、泄露素材会显著放大风险。beta/泄露中的知识可以用来做判断,但不要交付泄露的代码或构建,也不要交付"只有配合泄露内容才能运行"的 mod。
publish check 的实现:FAIL 与 WARN 两级检查
um/publish.py 是一个"发布前 lint",自检文档明确说它 "Modelled on IW4L's publish-check. It is a lint, not legal advice"。运行方式(摘自模块 docstring):
um publish check ./MyMod --game "C:\Program Files (x86)\Steam\steamapps\common\Terraria"检查逻辑可以分成 FAIL(阻断)与 WARN(告警)两类:
FAIL 类(必须修复才能发布):
- 与游戏安装字节相同的游戏文件:
check()先用--game指定安装目录,把所有游戏文件按大小建索引(by_size),再对 mod 中 ≥64 字节的文件做 SHA1 比对,命中即报 "game file copied verbatim" 并给出两边相对路径(um/publish.py); - 密钥泄露:一组正则覆盖 fal key(UUID:32hex 格式)、
FAL_KEY赋值、Anthropic(sk-ant-)、OpenAI(含sk-proj-/sk-svcacct-/sk-admin-变体)、GitHub token(gh[pousr]_与github_pat_)、AWS key id(AKIA+16 位)、私钥块(-----BEGIN ... PRIVATE KEY-----)(um/publish.py); .env文件:任何名为.env或以.env结尾的文件直接 FAIL。
WARN 类(需要人工确认):
- 反编译器指纹:Ghidra 自动命名(
FUN_xxx/DAT_xxx/LAB_xxx/PTR_xxx)、IDA 自动命名(sub_/loc_/unk_/dword_/qword_等)、"Decompiled with"/ILSpy/dnSpy/JetBrains 反编译器头、#region Assembly等。处理方式是重写(reimplement)或改为引用,而不是原样交付; - 大型引擎归档:
.pak/.utoc/.ucas/.bsa/.ba2/.vpk/.rpf/.pck/.assets/.bundle/.sga/.big/.wad/.bdt/.archive后缀且超过 5 MB 的文件,提醒确认其中是否只含你自己的资产; - 绝对用户路径:扫描
X:\Users\...、/home/xxx/、/Users/xxx/形式的路径残留; - README/署名缺失:没有 README(安装步骤、依赖、署名)会告警;如果 mod 里存在
fal_manifest.jsonl(fal 生成素材清单)而 README/CREDITS 里没有 fal 署名行,同样告警。
扫描范围排除.git、.venv、node_modules、__pycache__等目录;代码类文件(.cs/.c/.cpp/.py/.lua/.rs/.java/.gml/.hlsl等)才做反编译器指纹检查。最终输出FAIL/WARN/PASS与文件统计,有 FAIL 时退出码为 1,方便接入 CI 或 Agent 的自查循环。这与文档"catches the obvious cases"的定位一致:它是工程化的第一道闸,法务判断仍归人。
保护用户的机器:备份、注入物、注册表、输入与进程
这一节是文档中最"实操"的部分,每条规则都对应um的一个子命令。
先备份:um backup 的快照机制
规则:在任何 mod 过的启动之前,对存档、配置、profile 执行um backup create;恢复方式应是一条命令,并且写进 MODLOG.md。
实现见 um/backup.py,四个子命令:
um backup create "C:\Users\me\Documents\My Games\Terraria" --name terraria-saves um backup list [name] um backup diff terraria-saves "C:\Users\me\Documents\My Games\Terraria" um backup restore terraria-saves [--to DIR] [--snapshot FILE] [--yes]从源码结构看,几个设计细节直接服务于"安全"目标:
- 快照 = zip + manifest:每个文件记录 size 与 SHA1(um/backup.py),manifest 写入
_um_manifest.json;存放于~/.universal-modder/backups/<name>/。同一秒内创建的快照会加数字后缀,保证早先备份永不覆盖(um/backup.py); - 体积护栏:待快照目录超过 20 GB 直接拒绝,提示只备份你真正要改动的子目录(
20 << 30判断,um/backup.py)——防止"备份整个游戏目录"式的误操作拖死磁盘; - 恢复本身就是可撤销的:
restore()在恢复前先对当前状态做一次<name>-pre-restore自动快照,"so a restore can itself be undone"(um/backup.py);--clean才会删除快照之后新增的文件,默认保留;--yes是显式确认开关; - diff输出 added/removed/changed 三个列表(changed 按 SHA1 判定),让"mod 到底动了哪些存档文件"可审计。
模块 docstring 还沉淀了一条实战习惯:"keep a pristine copy of any world/scenario a scripted take destroys, and restore it before each take"——脚本化演示会销毁测试世界,每次录制前恢复一份原始副本。
注入物要可审计、可移除
loader 与代理 DLL(winhttp.dll、version.dll、dinput8.dll、dxgi.dll)会落在游戏目录里。规则是:告诉用户你加了什么、如何移除;更好实践是使用独立的游戏副本或 mod 管理器 profile。这与 SKILL.md "Lab setup" 一节的 "separate lab profile" 要求呼应:反编译代码与提取资产应放在仓库之外(如~/<game>-decomp),gitignore 掉派生数据,绝不 commit 游戏文件。
注册表变更:先导出,再修改
规则:um win reg set会先备份该键,再要求你记录改了什么。um/win.py 的reg()实现证实了这一点:set分支先执行reg.exe export,把整个键导出为带时间戳的.reg文件(存于%LOCALAPPDATA%\...\reg-backups\,打印 "backup:" 路径),然后才reg add /f。也就是说注册表修改天然是"可回滚"的,回滚方式就是重新导入那份导出文件。
输入自动化:接管前先看用户在不在线
规则:输入自动化会接管用户的鼠标键盘,因此:
- 用
um win drive --proc X idle检查,数值小说明用户正在使用机器; - 长时间自动化运行前必须询问;
- WinDrive 只在游戏是前景窗口时发送输入。
第三条有源码佐证:um/win.py 的模块说明写明 "through SendInput only while the game is the foreground window, so nothing leaks into other apps"(仅当游戏是前台窗口时才经 SendInput 发送,输入不会泄漏到其他应用);Drive的命令执行里还带有focus重试逻辑——前台漂移时(人不在电脑前)会重新抢回焦点再发命令(um/win.py)。
进程卫生:按精确 PID 结束,绝不用模式匹配
规则原文很尖锐:kill 只按精确 PID 进行——"pkill -fpkill -f会杀掉 Agent 自己的 shell);也不要留下 topmost 窗口(untop)、全局 hook、孤儿 ffmpeg/PowerShell 进程。 um/win.py 的kill()只接受精确 PID 并调用taskkill /PID <pid> /F,函数 docstring 直接写明 "Pattern kills - pkill -f, taskkill /IM with wildcards - can hit the agent's own shell or other apps." 此外 SKILL.md 的 Hard rules 补充了两条进程纪律:永不阻塞游戏主线程(例如在 mod 内部等待 ffmpeg),以及 Steam 拒绝重启时用 PID 清掉 crash reporter(BugSplat 等)进程。
网络与第三方脚本
- 网络:你添加的任何 bridge、debugger 或 MCP server 一律绑定
127.0.0.1并带 token——文档特别提示"有些 RE 工具默认绑0.0.0.0",要检查并改掉; - 陌生人的脚本:病毒式传播的 mod 里那个 "download" 常常是恶意软件;只运行官方仓库与官方 release 的 loader。
何时停下来问(When to stop and ask)
文档最后列了四个必须中断自主流程、回到用户的触发条件:
- 游戏有带反作弊的在线组件,而你的方案要碰到它们;
- 唯一可行路线是绕过某项保护;
- 某一步会在没有备份的情况下删除或覆盖存档或游戏文件;
- 发布(publishing)——永远由用户拍板。
这四条与前文各节是一一对应的兜底:反作弊触发第 1、2 条,备份缺失触发第 3 条,发布触发第 4 条。把它们理解为 Agent 的"熔断器"(circuit breaker):命中任何一条就停下、记录已知信息、征询用户,而不是选择风险较高的那条路继续走。
小结:把安全规则当作可执行的检查项
这份文档的价值在于它把"注意安全"这种空话翻译成了可验证的动作:反作弊组件名 → 路由决策;um publish check→ 发布 lint(FAIL/WARN 有明确判据);um backup create/restore→ 快照、diff、可撤销恢复;um win reg set→ 自动导出注册表备份;um win drive idle→ 接管输入前的在线检查;精确 PID kill → 保护 Agent 自身 shell。在驱动 Agent 使用 mod-any-game 技能 时,建议把以上检查项按"侦察 → 实验室搭建 → 开发 → 发布"的顺序逐条过一遍:侦察阶段确认反作弊类型与保存目录,实验室搭建阶段先um backup create并写进 MODLOG.md,发布阶段跑um publish check --game <install>,全程对四个 "stop and ask" 条件保持敏感。这些规则不是限制 mod 能力的枷锁,而是让成果可分享、账号与安全可保全的前提。
【免费下载链接】universal-modder
Point Claude at any game. Skills, tools and the fal MCP that let Claude Code mod almost any PC game you own: recon, reverse engineering, fal-generated art/3D/audio, in-game testing, showcase videos.
相关推荐
游戏安全与反作弊:Infosec_Reference游戏保护技术终极指南
游戏安全与反作弊:Infosec_Reference游戏保护技术终极指南 🚀 在当今数字娱乐时代,游戏安全已成为保障公平竞技体验的核心要素。Infosec_R
网络安全教程universal-modder 中的 Godot 游戏 Modding 实战:.pck 识别、GDRE Tools 逆向与四条修改路线
universal modder 中的 Godot 游戏 Modding 实战:.pck 识别、GDRE Tools 逆向与四条修改路线 本文基于 mod an
universal-modder 的复古与主机 Modding 手册:Decomp、Recomp 与用 Agent 启动反编译工程
universal modder 的复古与主机 Modding 手册:Decomp、Recomp 与用 Agent 启动反编译工程 universal modd
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考