[MD] # Mufu_ServerGuard Minecraft 插件后门检测工具。开源、免费、本地运行,不含任何遥测。 它做两件事: - **静态扫描**:分析插件 JAR 的字节码,找出偷偷提权、隐蔽执行命令、访问敏感资源(文件/网络/进程/反射/Unsafe/native 库)等可疑行为。 - **运行时网络监控**:作为 Java Agent 挂到正在运行的服务器上,记录每个插件连了哪些域名/IP,用于排查已上线插件的可疑外连。 提供图形界面和命令行两种用法:双击 jar(无参运行)打开界面,带参数则走命令行,方便接入脚本和 CI。同一个 JAR 还可作为 `-javaagent` 挂载做运行时监控。 ## 检测能力 **提权与命令执行** - 事件处理器里偷偷 `setOp`、改游戏模式、给权限 - 「临时提权 → 执行命令 → 恢复」这类掩盖痕迹的手法 - 以控制台身份执行内容可控的命令(命令注入后门) - 过程间追踪:后门常把恶意调用藏进私有方法,工具会从事件入口沿调用链追进去,不因为多一层调用就漏掉 **危险资源访问** - 文件读写/删除、网络连接、进程创建(`Runtime.exec`)、反射、`sun.misc.Unsafe` - 动态定义类(`defineClass`)等规避手段 - native 库加载(`System.load`)与"释放文件 + 加载"组合 **加固识别** - 识别 jnic 等把字节码编译成 native 的加固工具。这类加固后逻辑在 native 层,字节码扫不了——工具会如实标注"已加固、需人工/沙箱确认",而不是瞎猜是不是后门。 每条发现都带风险等级(INFO/LOW/MEDIUM/HIGH/CRITICAL)、位置(类/方法/行号)和证据说明。可选接入 AI 对可疑点做二次研判。 ## 快速开始 需要 **JDK 21+**。 ```bash # 构建 mvn clean package # 产物:target/Mufu_ServerGuard.jar # 图形界面(直接双击 jar,或无参运行) java -jar Mufu_ServerGuard.jar # 命令行:扫描一个插件 java -jar Mufu_ServerGuard.jar some-plugin.jar # 命令行:扫描多个,或整个 plugins 目录 java -jar Mufu_ServerGuard.jar plugins/ ``` **不带任何参数**运行(或双击 jar)会打开图形界面;带参数则走命令行。命令行想强制不弹界面可加 `--nogui`。 图形界面三个页签:插件扫描(选文件/目录 → 扫描 → 彩色结果表,双击看详情)、运行时监控(展示挂载命令 + 分析网络日志)、设置(编辑 AI 配置和白名单并保存)。界面颜色和中文由程序自绘,不受终端编码影响。 首次运行会在 jar 同目录自动生成一份 `config.yml`,按需修改后再次运行即可。 ## 配置 配置集中在 `config.yml`(与 jar 放同一目录,首次运行自动释放): ```yaml scan: jars: [] # 待扫描的 JAR 或目录;也可用命令行追加 format: console # console | json | html out: "" # json/html 报告的输出文件 ai: enabled: true mode: mock # mock=离线本地判定(默认,无需联网);http=调用大模型 base_url: https://api.openai.com/v1 model: gpt-4o-mini api_key: "" # 留空则读环境变量 OPENAI_API_KEY ``` AI 是可选增强。`mode: mock` 时完全离线,靠内置规则给出判定;`mode: http` 时调用任意 OpenAI 兼容接口(OpenAI / DeepSeek / 通义 / 本地 Ollama 等)做语义研判。 > 不想联网就用 `mode: mock`,工具零外连。用 `http` 时 API Key 建议放环境变量 `OPENAI_API_KEY`,别写进配置文件。 ## 使用教程 ### 扫描插件 ```bash # 单个插件 java -jar Mufu_ServerGuard.jar SkillAPI.jar # 多个插件 java -jar Mufu_ServerGuard.jar a.jar b.jar c.jar # 整个目录(自动展开其中所有 .jar,默认递归子目录) java -jar Mufu_ServerGuard.jar plugins/ ``` 也可以把要扫的路径写进 `config.yml` 的 `scan.jars`,然后直接 `java -jar Mufu_ServerGuard.jar`。命令行传入的路径会追加到配置里的列表之后。 ### 看报告 默认输出到控制台。想要文件报告,改 `config.yml`: ```yaml scan: format: html # 或 json out: report.html ``` 报告按风险从高到低排列,每条给出:风险等级、类别、位置、证据。结尾有总体裁决。 退出码:出现 HIGH 或 CRITICAL 返回 `1`,否则 `0`,方便接入 CI 或脚本。 ### 接入 AI(可选) 默认 `mock` 模式离线可用。想让大模型帮忙研判可疑点: ```yaml ai: enabled: true mode: http base_url: https://api.deepseek.com # 各家 OpenAI 兼容地址 model: deepseek-chat ``` ```bash export OPENAI_API_KEY=sk-xxxx java -jar Mufu_ServerGuard.jar plugins/ ``` 本地大模型(Ollama)示例:`base_url: http://localhost:11434/v1`,`model: qwen2.5-coder`,`api_key` 留空。 ## 运行时网络监控 适用场景:**服务器已经运行、怀疑某个插件在偷偷联网**。静态扫描看不穿加密的 URL 字符串,但插件真正联网时得先解析域名——这一步骗不了人。 两步走: ```bash # 1) 把本工具作为 -javaagent 挂到服务器启动命令上(需重启一次服务器) java -javaagent:Mufu_ServerGuard.jar=out=mufu-net-events.jsonl -jar server.jar # 2) 运行一段时间后,分析采集到的日志 java -jar Mufu_ServerGuard.jar --monitor mufu-net-events.jsonl ``` 图形界面的「运行时监控」页签里也能一键生成挂载命令、选日志分析。 工作原理:Agent 通过字节码插桩 hook DNS 解析(`InetAddress.getAllByName`)和 socket 连接,每次外连时抓调用栈、经 Bukkit 的 `PluginClassLoader` 归因到**具体插件**,写进日志。分析时按插件聚合,官方源(Mojang/Paper/GitHub 等,可在 `config.yml` 的 `monitor.allowlist` 配置)自动降噪,裸公网 IP、可疑动态域名等重点标出。 ### 边界(请务必了解) - **只记录,不拦截**。它告诉你谁连了哪里,处置(封 IP、下架插件)由你决定。 - **抓不到 native 层外连**。如果插件用 jnic 之类加固、直接走原生 socket 联网,绕过了 JVM 的 `java.net`,这个监控看不到——需要在操作系统层抓包。 - Agent 会在运行时修改 JDK 类的字节码(只插入只读回调),属于侵入操作。**建议先在测试服验证服务器能正常启动**,再上生产,并选低峰期挂载。 - 只支持 `-javaagent` 启动挂载(不支持 attach 到已运行进程),好处是能从服务器启动的最早期就开始监控。 ## 诚实说明 - 静态分析永远存在**漏报和绕过**的可能。它检测的是已知的可疑行为模式,决心绕过的攻击者总能找到新写法。工具的价值是提高门槛、给出线索,不是"报安全就一定安全"。 - 对 native 加固的插件,**任何字节码扫描器都无法判断善恶**(合法插件也会用加固防破解)。工具只会如实告诉你"这是加固产物,静态分析不了",把判断交给你。 - 报告里的 CRITICAL 是"命中了高危手法",不等于"实锤后门",尤其加固/native 相关的结论需要人工或沙箱进一步确认。 工具本身除了你主动配置的 AI 接口调用,不做任何其它网络连接,代码完全开源可审计。 ## 扩展检测规则 规则是数据驱动的,容易扩展: - **新增危险 API**:在 `secman/DangerousCallTable.java` 加一行 `add(owner, method, category, desc)`。 - **新增关注的状态改动**:在 `inject/InjectSignatures.java` 对应集合里加方法名。 - **新增加固器指纹**:在 `secman/PackerSignature.java` 加匹配规则。 - **新增分析模块**:实现 `core/Analyzer` 接口,在 `Main` 里注册。 欢迎提 PR 补充规则——社区共同维护的规则库比任何单点努力都更能跟上新型后门。 ## 项目结构 ``` src/main/java/org/nft_server/ Main.java 入口:无参启 GUI,带参走命令行(扫描 / monitor) cli/ config.yml 加载 core/ JAR 遍历、ASM 解析、分析器调度、ScanService 门面 model/ 风险等级、发现、方法特征、报告 inject/ 提权与命令执行检测(含过程间追踪) secman/ 危险资源访问、危险调用表、加固器指纹 dataflow/ 参数来源启发式判定 ai/ AI 后端抽象、本地 mock、HTTP 调用、提示词 agent/ 运行时网络监控 Agent(premain + 字节码插桩) monitor/ 网络事件日志读取与聚合 report/ 控制台 / JSON / HTML 报告 gui/ Swing 图形界面(扫描 / 监控 / 设置三页签) src/main/resources/config.yml 打包进 jar 的默认配置(首次运行释放到外部) ``` ## 许可 见 LICENSE。免费使用、修改、分发。 [/MD]