AI游戏移植下架追踪:为何200 OK状态码会骗人

PortedGames追踪12起AI游戏移植下架,揭示状态码检测的失效与应对。
本文作者运营游戏移植目录站PortedGames,因用户关注点从「还能玩吗」转向「哪些被下架了」,遂启动下架追踪器。自9月11日以来共记录12起因版权主张被下架的项目,动视独占5起,其中4个《使命召唤》浏览器重制版同日被移除;Mojang/微软2起,Rockstar、SEGA、SNK等各1起。关键发现是:12起中有8起从未产生公开的GitHub DMCA通知,因为项目托管在自有域名或Railway、Cloudflare Pages等平台。简单的HTTP状态码检查并不可靠——下架通知页常返回200并保留原标题,回收域名会重定向到无关网站,Cloudflare验证页也会伪装成在线。作者因此改造检查器:读取正文、限定短页面、校验特定字符串,并最终由人工确认。项目存活时间从数小时到321天不等,中位数29天。
今年十月,一批借助AI编程工具快速生成的浏览器游戏移植版在社交网络上病毒式传播——《光环》《辛普森:横冲直撞》《侠盗猎车手:罪恶都市》《使命召唤:僵尸模式》,全都能在浏览器标签页里直接运行。这些项目的清单在X上传播的速度,快到没人来得及逐一验证。
我运营着 PortedGames,一个收录这类移植项目(浏览器版本、PC移植和静态重编译)的目录站。网站每天重新检查每个条目,因为用户最常问的问题是「这个还能玩吗」。但两周之内,更有意思的问题变成了「哪些被下架了,被谁下架的」。于是我启动了一个下架追踪器。

数字说话:12起下架,8起没有公开通知
自9月11日以来,共有12个移植项目在收到版权主张后被下架。从权利方分布看,动视(Activision)一家就占了5起:10月10日同一天,动视下架了同一位开发者制作的4个《使命召唤》浏览器重制版;此外还有一款尚未发布的、借助AI辅助反编译的《现代战争2》项目,据称在一周前已被命中。
Mojang/微软贡献了2起,Rockstar Games、SEGA、SNK、Maddy Makes Games各1起,另有1起的权利方未被网站点名。
几个值得注意的细节:
上线存活时间差异极大。 在9个有已知发布日期的项目中,中位存活时间为29天。《GTA V》浏览器移植版只撑了几个小时;而一个《蔚蓝》(Celeste)的WebAssembly移植版在GitHub上挂了321天,游戏数据才被移除。
下架对象不限于浏览器重制版。 名单里还包括一个静态重编译项目(《合金弹头XX》,Xbox 360平台),一个被Mojang指称含有超过2000个原始文件的「洁净室」《我的世界》重新实现,以及针对Eaglercraft仓库的长期打击行动(自8月以来已有18份GitHub通知)。
12起中有8起从未产生公开的GitHub DMCA通知。 这些移植版运行在自己的域名上,或托管于Railway、Cloudflare Pages等服务,因此常规查看渠道 github.com/github/dmca 根本看不到它们。
追踪器上每一行都链接了证据:通知原文、作者的发帖,或网站当前显示的内容。
为什么HTTP状态码会说谎
我最初的链接检查器很直白:请求页面,2xx视为在线,4xx/5xx视为下线。结果它把第一个案例报告为「正常」,尽管游戏早已消失。
通知页返回200并保留原标题。 《现代战争2》浏览器移植版「Open Victor Zulu」至今仍提供一个标题为「Open Victor Zulu」的页面。但正文已变成一段简短通知,称游戏「因DMCA请求」被下架。状态检查看到的是200,标题检查看到的是游戏名,只有正文文本才能告诉你它已经没了。
死掉的地址会被回收。 三个曾托管《使命召唤》重制版的 pages.dev 地址,现在全部重定向到同一个无关网站。跟随重定向,你会从一个与游戏毫无关系的页面拿到200。
机器人防护看起来像「在线」。 部分主机会用Cloudflare的「Just a moment...」验证页(200)或403/429回应自动请求。前者把可能已下线的项目显示为在线,后者把大概率正常的项目显示为下线。
下架通知未必到达GitHub。 如前所述:如果移植版不在GitHub上,就没有公开通知可查。
DMCA通知机制:美国《数字千年版权法》(DMCA)第512条设立了一套「通知—删除」避风港规则。版权方(或其代理)向平台发送符合法定要素的书面通知后,平台须迅速移除或屏蔽被指侵权的内容,才能免除自身连带责任。GitHub为此设立了公开的DMCA仓库(github.com/github/dmca),所有经其处理的通知原文都会以文本形式存档,任何人都能检索。这也是本文能统计「公开通知」数量的制度基础:通知是否可查,取决于托管平台是否走这套公开流程。
静态重编译(static recompilation):指把某个平台的可执行二进制(如Xbox 360的PowerPC机器码)整体翻译成另一架构(如x86-64或WebAssembly)的等效代码,使原游戏无需模拟器即可原生运行。N64时代的项目如N64Recomp推动了这一路线的复兴。由于产出物直接衍生自原版二进制,它比模拟器更容易触及版权与反编译的法律灰色地带,本文中《合金弹头XX》的重编译项目被下架正属此类。
检查器现在怎么做
每日检查是一个小型Node脚本。对每个移植版:
- 6秒内返回2xx: 正常。2xx但响应慢: 标记为慢。4xx/5xx或重试一次后网络错误: 下线。
- 403/429: 结论不明。保留上一次状态,不更新「最后检查」日期,而不是把一个正常工作的移植版标为下线。
- 读正文,而不只是状态码。 如果可见文本很短(游戏页面主要由JavaScript构成;通知只有寥寥几行)且读起来像下架通知,就标记出来。
// 200不够:被下架的移植版常常继续提供一个简短的通知页。
const TAKEDOWN =
/\b(taken (the game |it |this )?(down|offline)|(game|site|project) (is|has been) (taken down|removed|shut down|discontinued)|offline for now|no longer (available|online|playable)|due to an? (DMCA|copyright|legal)|DMCA (request|notice|takedown|complaint)|cease and desist|received a takedown)\b/i;
const SHORT_PAGE = 4000; // 可见字符数
const m = text.length < SHORT_PAGE && text.match(TAKEDOWN);
- 期待特定字符串。 每个条目可以声明一个必须出现在页面上的字符串(通常是游戏自己的名字)。如果回收的域名重定向到别处,该字符串缺失,条目就会被标记。
- 由人确认。 脚本只负责标记。「已下架」状态是在阅读页面并找到来源后手动设置的,脚本永远不会覆盖它。正则擅长察觉,但它不是证据。
短页面阈值比看起来更重要。有些真实游戏页面会在页脚或FAQ里提到「DMCA」。把匹配限制在短页面上,可以避免这些被误标——因为一个正常运行的WebAssembly游戏页面在游戏加载前可见文本极少。
WebAssembly(Wasm)与浏览器游戏的可见文本问题:Wasm是一种可移植的二进制指令格式,游戏引擎(如Unity、Godot、Emscripten编译的C/C++项目)可将其导出为浏览器可执行的模块,配合WebGL渲染。这类页面的HTML骨架往往只有几行<canvas>和脚本加载标签,真正的游戏画面和文字都绘制在画布内,DOM中不可见。这正是本文中「短页面阈值」逻辑成立的原因:正常运行的Wasm游戏在加载前可见文本极少,因此若一个短页面上出现DMCA式措辞,命中概率很高;反之,内容丰富的普通网页即便提到DMCA,也会因超过4000字符而免于误判。
数据开放与边界说明
追踪器位于 portedgames.com/takedowns,同样的行数据以JSON格式提供在 portedgames.com/takedowns.json(包含权利方、下架方式、发布与下架日期、在线天数、来源)。免费使用,注明出处即可。如果你知道我遗漏的下架案例,或发现我有错误,页面上有联系地址。
关于范围的一点说明:该目录从不托管或链接游戏文件、ROM或ISO,只链接每个项目自己的页面;作者自愿关闭的移植版不计入下架统计。
我自己运营PortedGames,请带着这个前提看待我的叙述框架;每一行的证据都附有链接,你可以自行核查。
相关推荐

3分钟看懂DeepSeek:从量化私募到开源AI领跑者的崛起之路
3分钟看懂DeepSeek发展史:从幻方量化的算力积累,到V2的MLA推理降本、V3的557.6万美元训练账单、R1开源引爆全球,再到V4与70亿美元A轮融资,梳理深度求索的关键节点与技术路线。

本地文学创作模型PK:Qwen3.8 27B微调版胜出,DeepSeek v4.1表现平淡
B站UP主横向测评七款本地文学创作模型:海明威、HumanLike Chat基于Qwen3.8 27B微调表现最佳,DeepSeek v4.1叙事平淡,东方朔角色混乱垫底。附三道测试题评分与使用建议。

梁文锋的三次豪赌:DeepSeek为何将82%毛利开源?
DeepSeek为何把82%毛利的推理框架DeepInfer开源,又启动千亿融资?从技术路线、国产芯片到组织纯粹性,解析梁文锋的三次豪赌与开源战略背后的商业与理想逻辑。