[INDL] XRAY 检测到

[INDL] XRAY 检测到

高级服务端反作弊系统,通过扫描客户端模型和纹理来检测X射线资源包。

[INDL] Xray Detected:终极资源包守护者

阻止作弊者! INDL Xray Detected 是一款强大、轻量的反作弊解决方案,旨在通过实时检测 X-Ray 资源包来维护服务器的公平性——无需服务端世界扫描、无延迟、无虚假承诺。

需要同时在服务器端和客户端安装此模组。 此模组的工作原理是让每位已连接的玩家客户端扫描自己安装的资源包,并将结果报告回服务器。它必须安装在服务器端并分发给您的玩家(作为必需的客户端模组)才能生效。


📖 它实际上是如何工作的?(通俗解释)

把它想象成一个自动运行的“资源包检查员”,既在玩家加入服务器时运行,也会在他们游戏期间定期运行:

  1. 玩家加入你的服务器。 登录后几秒钟,他们的客户端会在后台静默扫描 resourcepacks 文件夹中的每个资源包,不会造成卡顿或冻结。
  2. 扫描通过多种方式检查每个资源包:
    • 按名称检查——资源包的文件/文件夹名称是否包含可疑词语(xray、cheat、wallhack、ore-finder 等)?
    • 按隐藏模型检查——资源包是否包含隐藏的 /xray/ 文件夹或将实心方块重定向到隐形模型的状态文件?(这是大多数“改名”X-Ray 资源包的实际工作原理。)
    • 按纹理透明度检查——石头、深板岩或泥土等实心方块的纹理是否可疑地透明?模组会测量每个纹理中透明像素的百分比。
    • 按已知指纹(SHA-256 哈希)检查——纹理的唯一数字指纹是否与此前检测到的 X-Ray 资源包中的纹理匹配?这可以立即捕获重命名过的资源包,甚至无需重新分析图像。
    • 按资源包描述检查——资源包的 pack.mcmeta 描述中是否提及“xray”或“see through”等词语?
  3. 如果发现任何可疑内容,客户端会向服务器发送报告(该报告在服务端经过净化和限速处理,因此不会被滥用来刷屏或崩溃服务器)。
  4. 服务器根据你的配置做出反应:可以仅记录日志、提醒在线管理员,和/或自动警告/踢出/封禁玩家——可以是立即执行,也可以通过公平的“记过”系统执行(见下文)。
  5. 扫描会定期重复(每隔几分钟,可配置),以防玩家在游戏中途安装 X-Ray 资源包,管理员也可以随时手动触发。

由于检查基于资源包的内容(隐藏文件夹、透明像素、已知指纹)而不仅仅是文件名,将 MyXrayPack.zip 重命名为 Faithful32x.zip 无法骗过检测器。


🔒 为什么它无法被篡改(v1.2.0+)

从 v1.2.0 开始,模组的配置是服务器权威的。在之前的版本中,每个玩家的客户端读取的是自己的本地副本设置——这意味着玩家理论上可以编辑自己的配置文件来关闭扫描或拉长检查间隔,使检测失去意义。

这个漏洞现已修复:你的服务器会自动将配置推送给每个连接的客户端(这是 Minecraft Forge 的内置机制,无法被修改的客户端配置拦截或伪造)。只有你在服务器上设置的值才会被使用——玩家本地的配置文件在关键事项上完全被忽略。


🔍 高级检测引擎

  • JSON 模型分析: 识别隐藏的 /xray/ 文件夹和透明模型定义。
  • 状态文件监控: 扫描重定向到非法透明模型的行为。
  • 智能透明度检查: 分析 PNG 文件,检测石头、深板岩或泥土等实心方块是否具有可疑的透明性。
  • SHA-256 哈希数据库: 通过唯一哈希签名即时检测已知的 X-Ray 纹理,即使被重命名也能识别。
  • pack.mcmeta 分析: 扫描资源包描述中的可疑关键词,如“xray”、“cheat”或“wallhack”。
  • 自主学习: 每个新检测到的透明纹理都会被自动记住,以便下次再看到它时(即使是在不同的、已重命名的资源包中)能立即将其捕获。
  • 深度模组支持: 已为最流行的模组做好准备,包括 Aether、Biomes O' Plenty 和 Create。

⚡ 主要特性

  • ✅ 自动扫描: 玩家加入时立即运行,之后按可配置的间隔运行。
  • ✅ 实时管理员警报: 向 OP 发送详细的游戏内聊天通知,并附上检测的确切原因。
  • ✅ 防绕过: 无论文件名如何,都能检测到 X-Ray;且(自 v1.2.0 起)不受客户端配置篡改影响。
  • ✅ 零延迟: 优化代码,异步扫描(在后台线程运行)并带有智能缓存。
  • ✅ 完全可配置: 自定义关键词、白名单可信资源包,并设置扫描时间——全部在服务器端完成。
  • ✅ 渐进式记过系统: 在踢出/封禁前给予玩家公平的警告,而不是立即重锤。
  • ✅ 智能扫描缓存: 避免重复扫描未更改的资源包,以获得更好的性能。
  • ✅ 全局统计: 追踪一段时间内的总扫描次数、检测次数、踢出次数和封禁次数。
  • ✅ 管理员扫描命令: 强制对任意玩家立即重新扫描。
  • ✅ 速率限制: 防止报告垃圾信息和滥用行为进入你的服务器/日志文件。

Ejemplo1

image


🧬 SHA-256 哈希检测——“指纹”系统的工作原理

每个纹理文件都有一个独特的数字“指纹”,称为 SHA-256 哈希——一个由像素数据精确计算出的 64 字符代码。即使作弊者重命名了他们的 X-Ray 资源包或其文件,底层图像的指纹永远不会改变:

stone.png (透明 xray 纹理) → 哈希:"a3f8b2c1..."
piedra.png (同一文件,已重命名) → 哈希:"a3f8b2c1..." ✅ 仍然匹配,仍然会被检测到!

每个纹理的检测流程

发现纹理
      ↓
计算 SHA-256 哈希
      ↓
已知哈希数据库中存在?
      ↓                    ↓
     是                   否
      ↓                    ↓
🔴 已检测               分析像素透明度
 (即时,低开销)                ↓
                      是否可疑地透明?
                            ↓
                          是 → 记住此哈希 + 🔴 已检测
                          否 → ✅ 看起来正常

自主学习数据库 🧠(自 v1.2.1 起在服务器端)

每当在任何已连接的客户端上发现新的可疑透明纹理时,其哈希和简短描述会作为检测报告的一部分发送到服务器。服务器(而非客户端)会验证并记住它。这意味着:

  • 数据库由你的整个服务器共享——一旦一个玩家的资源包被指纹识别,其他所有玩家都会立即受益,而不仅仅是触发扫描的那位。
  • 你,作为管理员,可以实际找到并编辑该文件——它存在于你的服务器上,而不是分散在玩家各自的电脑上。
  • 无论资源包最初是通过何种方式被标记的(按名称、按 pack.mcmeta、按隐藏的 /xray/ 文件夹或透明度检查本身),只要在其中发现了真正透明的方块纹理,就会收集其哈希。

旧版本(v1.2.1 之前)会错误地将发现的哈希保存到客户端自己的配置文件夹中,服务器管理员永远看不到也无法利用它们。这已得到修复——该文件现在仅在服务器上创建和更新。

文件位置 & 添加你自己的已知哈希(可选,高级)

这是同一个文件,既用于自动学习,也用于手动编辑——没有单独的“自动”文件和“管理员”文件之分:

在你的服务器上的 config/xraydetected/known_hashes.txt

你可以随时用任何文本编辑器打开它,自行添加/删除行:

# 格式:哈希 # 描述(描述是可选的)
a3f8b2c1d4e5f6789...deadbeef # 流行的 Xray 资源包 v2
b7c9d0e1f2a3b4c5...cafef00d # 石头透明纹理

注意:自 v1.2.0 起,模组不附带任何预加载的示例哈希(之前的占位条目无法验证,已被移除)——数据库会随着你的服务器检测到真实的 X-Ray 资源包而自然增长,或者你可以用确认过的哈希自行填充。手动编辑此文件后,运行 /xraydetected reload 即可在不重启的情况下应用更改。

性能对比

  • 无哈希匹配: 分析纹理的每个像素(约 50–100 毫秒,一些 CPU 工作)。
  • 有哈希匹配: 比较一个 64 字符的字符串(约 0.1 毫秒)——几乎零开销。

🛡️ 渐进式记过系统——惩罚前先给予公平警告

模组不会在首次检测时立即踢出/封禁(这可能是误报),而是可以使用记过系统:

记过次数 发生什么(完全可配置)
第 1 次检测 ⚠️ 向玩家发送警告消息
第 2 次检测(默认) 👢 自动踢出(如启用)
第 3 次检测(默认) 🚫 自动封禁(如启用)

如果玩家在可配置的时间段内(默认:1 周)未再触发检测,记过会自动重置——因此旧的、已解决的误报不会永远跟随他们。你可以使用 /xraydetected strikes 查看或清除任何人的当前记过次数。


🛠️ 命令与权限

命令 别名 描述
/xraydetected help /xrd help 显示帮助菜单。
/xraydetected status /xrd status 查看当前的模组配置和状态。
/xraydetected list <player> /xrd list 查看玩家的检测历史。
/xraydetected clear <player> /xrd clear 清除玩家的检测历史。
/xraydetected kick <player> [reason] /xrd kick 将玩家踢出服务器。
/xraydetected ban <player> [reason] /xrd ban 封禁服务器上的玩家。
/xraydetected reload /xrd reload 重新加载配置并清除缓存。
/xraydetected scan <player> /xrd scan 强制对玩家立即重新扫描。
/xraydetected stats /xrd stats 查看全局检测统计信息。
/xraydetected strikes <player> /xrd strikes 查看玩家当前的记过次数。
/xraydetected strikes <player> clear — 将玩家的记过次数重置为零。

注意: 所有命令都需要 OP 等级 2 或更高。


⚙️ 配置——在哪里找到以及如何编辑

📍 文件位置

自 v1.2.0 起,配置文件是服务器权威的,位于你的世界存档文件夹内,而不是全局的 config/ 文件夹中:

  • 专用服务器: <服务器文件夹>/world/serverconfig/xraydetected-server.toml (如果你在 server.properties 中更改了 level-name,请将 world 替换为你实际的存档名称)
  • 单人游戏 / LAN 世界: saves/<你的世界名称>/serverconfig/xraydetected-server.toml

该文件会在安装了模组的世界/服务器首次启动时自动创建,并带有合理的默认值——你无需手动创建。只需启动一次服务器,停止它,编辑文件,然后再次启动(或者对于大多数设置,使用 /xraydetected reload 而无需重启)。

🔒 为什么这很重要

由于此文件位于服务器上并且是 SERVER 类型的 Forge 配置,Forge 会自动将其值发送给每个连接的客户端,覆盖玩家可能在本地拥有的任何内容。换句话说:作为服务器所有者,你始终处于控制之中——玩家无法通过编辑自己的客户端文件来削弱检测。

✏️ 如何编辑

  1. 停止你的服务器(或至少准备好之后使用 /xraydetected reload 来应用大多数更改,无需完全重启)。
  2. 用任何纯文本编辑器(记事本、VS Code、Notepad++ 等)打开 xraydetected-server.toml。
  3. 更改你想要的值(参见下面的参考——每个选项上方都有注释解释其作用)。
  4. 保存文件,然后重启服务器或在游戏内/控制台运行 /xraydetected reload。

📋 完整配置参考

[detection]
# 将资源包名称标记为可疑的关键词(不区分大小写,部分匹配)
keywords = ["xray", "x-ray", "ore-finder", "cheat", "fullbright", "wallhack"]

# 始终忽略的资源包名称,例如合法的着色器/光线追踪资源包
whitelist = ["raytracing", "rtx", "seus", "bsl"]

# 如果为 true,则实际打开并分析资源包内容(文件夹/纹理),而不仅仅是名称。
# 速度较慢但准确得多——强烈建议保持启用。
scanPackContent = true

# 玩家在线时自动重新扫描其资源包的频率(分钟)。
# 设为 0 则仅在他们加入时扫描一次。
checkIntervalMinutes = 5

# 如果为 true,将纹理指纹(SHA-256)与已知哈希数据库进行比较,
# 以即时检测以前见过的 X-Ray 纹理。
useHashDatabase = true

# 如果为 true,还会扫描每个资源包的 pack.mcmeta 描述中是否有可疑措辞。
analyzePackMcmeta = true

[performance]
# 在单个 ZIP 资源包内检查的最大文件数,以防止
# 异常大或恶意的包文件造成延迟/滥用。0 = 无限制。
maxZipEntries = 5000

# 如果为 true,记住未更改资源包的扫描结果,这样它们就不会在
# 每个间隔都被重新扫描——显著减少重复扫描时的 CPU 使用率。
useScanCache = true

[actions]
# 如果为 true,一旦检测到任何内容,立即在聊天中通知所有在线管理员(OP)。
notifyAdmins = true

# 如果为 true,一旦玩家被检测到足够多次,自动踢出他们
# (参见下面的 [strikes],或者如果 useStrikeSystem = false 则立即踢出)。
autoKick = false

# 如果为 true,一旦玩家被检测到足够多次,自动封禁他们。
# 请谨慎使用——确保你的检测设置先适应你的社区!
autoBan = false

# 从检测到自动踢出/封禁之间的延迟(秒),
# 给管理员一个短暂的人工干预/验证窗口。
actionDelaySeconds = 10

# 当玩家因 xray 被自动踢出时显示给他们的消息。
kickMessage = "检测到 Xray 纹理包!请移除它并重新加入。"

# 当玩家因 xray 被自动封禁时显示给他们的消息。
banMessage = "因使用 Xray 纹理包而被封禁。请到服务器的 Discord 申诉。"

[strikes]
# 如果为 true,使用渐进式警告系统而不是在首次
# 检测时就惩罚。强烈建议使用,以避免对误报反应过度。
useStrikeSystem = true

# 触发 autoKick 之前的总检测次数(“记过”)。
strikesBeforeKick = 2

# 触发 autoBan 之前的总检测次数(“记过”)。
strikesBeforeBan = 3

# 在此小时数内没有新的检测,玩家的记过将重置为 0。
# 设为 0 则永不自动重置。默认是 168 小时(1 周)。
strikeResetHours = 168

[logging]
# 如果为 true,将每次检测写入 config/xraydetected/logs/(包括全局日志
# 和每个玩家的日志文件)以供日后审查。
logToFile = true

# 如果为 true,还会将检测信息打印到服务器控制台/日志。
logToConsole = true

📊 全局统计

使用 /xraydetected stats 一目了然地追踪服务器的安全状况:

  • 执行的总扫描次数
  • 总检测次数
  • 总踢出与封禁次数
  • 最常被检测到的资源包
  • 每日统计

❓ 常见问题

我的玩家需要安装什么吗? 是的——此模组必须安装在服务器和每个连接的客户端上,因为实际扫描发生在客户端。在模组包/启动器中将其标记为必需的客户端模组。

如果玩家拒绝安装模组,或者他们的客户端“未能”加载它怎么办? 适用标准的 Forge 行为:如果你在模组包中将该模组标记为必装,则没有安装(或版本不匹配)的玩家将被禁止连接,这与任何其他必需的模组相同。

这会对合法的着色器/资源包造成误报吗? 它旨在最大限度地减少误报(whitelist 选项正是为此而设——光线追踪/着色器资源包如 SEUS、BSL 和 Complementary 默认已列入白名单),但如果你发现误报,只需将资源包的名称添加到配置中的 whitelist 列表并重新加载即可。

玩家可以通过编辑自己的文件来绕过吗? 无法绕过配置(在 v1.2.0 中已修复,参见上面的安全部分)。检测逻辑本身从模组自己的代码运行,该代码对每个客户端都以相同方式加载——玩家要彻底绕过检测,就需要构建并分发模组本身的修改/补丁版本,这比简单地编辑文本文件要困难得多。

这会导致服务器或客户端卡顿吗? 不会。扫描始终在后台线程上异步运行,从不在主游戏/服务器线程上运行,并且结果会被缓存,因此未更改的资源包不会被不必要地重新扫描。

我刚从 v1.1.0(或更早版本)更新——为什么配置看起来是空的/已重置? 如上所述,v1.2.0 将配置文件移到了新位置,并采用了新的 Forge 配置类型(world/serverconfig/xraydetected-server.toml)。你旧的 config/xraydetected-common.toml 不再使用——请将你偏好的值手动复制到新文件中。


⚠️ 重要说明

  • 玩家必须在客户端安装模组才能实际进行扫描——服务器无法自行扫描玩家的本地文件。
  • 该模组为你的社区提供了一个尽力而为的检测层;它不能替代手动审查可疑的游戏内行为。
  • 误报很少见,并且可以通过配置文件中的 whitelist 选项轻松解决。
  • v1.2.0 将配置文件移到了新位置(world/serverconfig/xraydetected-server.toml)——参见上面的常见问题。