在启动 FiveM 资源之前检查其中是否存在后门。它会读取 .lua 和 .js 文件,解析 Lua 并查找已知 FiveM 后门所使用的模式:隐藏在数千个空格之后的加载器、通过 HTTP 下载并传递给 load() 的代码、经过混淆的载荷、对你许可证密钥或 RCON 密码的读取,以及遗留在文件中的令牌。它还会标记包中的可执行文件和不安全路径。
不会执行任何内容,也不会上传任何内容。规则与免费的 RPScripts 浏览器版本相同,该版本还支持通过拖放接收 ZIP 或整个服务器文件夹。
需要 Node.js 18 或更高版本。无需安装:
npx github:rpScripts/fivem-backdoor-scanner ./resources
扫描单个资源、多个文件夹、一个 ZIP 文件(最大 300 MB),或获取 JSON 供你自己的工具使用:
npx github:rpScripts/fivem-backdoor-scanner ./resources/[shops]/my_shop ./resources/[jobs]
npx github:rpScripts/fivem-backdoor-scanner ./downloaded-pack.zip
npx github:rpScripts/fivem-backdoor-scanner ./resources --json > report.json
退出码 0 = 未发现任何内容,1 = 发现结果,2 = 用法错误,3 = 扫描无法运行(路径缺失、ZIP 不可读或超过 300 MB)。这使得它可作为 CI 步骤使用:
# .github/workflows/backdoor-scan.yml
on: [push, pull_request]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: 20 }
- run: npx --yes github:rpScripts/fivem-backdoor-scanner ./resources
| 代码 | 严重级别 | 发现 |
|---|---|---|
| LAB-SEC-107 | error | 在 400 多个空格或制表符之后被推出视野的代码(某个已知后门家族的加载器手法) |
| LAB-SEC-101 | warning | 对 HTTP 响应体调用 load() / loadstring() |
| LAB-SEC-102 | warning | 对运行时解码的文本调用 load()(string.char、转义字节、base64/hex 解码器) |
| LAB-SEC-103 | warning | 混淆数据:长转义字节字符串、400 多个字符的 base64/hex、长 string.char 列表 |
| LAB-SEC-104 | warning | 在发送 HTTP 的文件中读取 sv_licenseKey、rcon_password、sv_tebexSecret 或 MySQL 连接字符串 |
| LAB-SEC-105 | warning | 向公网裸 IP 或运行时解码的地址发起 HTTP 请求 |
| LAB-SEC-106 | warning | os.execute、io.popen、写入自身资源之外、SaveResourceFile 写入其他资源 |
| LAB-SEC-108 | warning | 文件中存在真实形态的 Discord 机器人令牌、Discord webhook、Cfx 许可证密钥或 GitHub 令牌 |
| LAB-PKG-004 | warning | 文件夹或压缩包中的 .exe、.dll、.bat、.cmd、.ps1、.sh、.vbs、.jar、.scr(*.net.dll 即 C# 资源旁边的 .dll 属于预期情况) |
| LAB-PKG-005 | warning | 压缩包条目包含 ..、绝对路径或盘符:解压时可能写到目标文件夹之外 |
警告是模式匹配,而非证据:webhook 日志记录器合法地调用裸 IP 也是可能的。请阅读报告的行并自行判断。
错误(LAB-SEC-107)意味着应将该包视为已被入侵。每条发现都带有 severity、confidence、
method、修复文本和参考;文本位于 rules/catalog.json,版本位于
rules/CHANGELOG.md。规则代码的含义永不改变。
.fxap 文件夹、编译后的
Lua、无法解析的 Lua、仅运行文本检查的 JavaScript、超过 2 MB 的文件、上传内容中的压缩包)。发现的问题始终优先于覆盖范围。clean 结果仅覆盖这些模式,并不能证明资源是安全的。
+=、?.、<const>、反引号哈希、/* */)。.zip、.rar、.7z)只列出,不解包。仅读取 .zip。node_modules 和 .git。stream 文件夹会被扫描。import { scanFiles, scanPath, securityRules } from "fivem-backdoor-scanner";
const one = securityRules("server.lua", source); // { findings, parsed }
const report = await scanPath("./resources"); // folder, ZIP or file
const inMemory = scanFiles({ "server.lua": source });
console.log(report.verdict, report.findings);
发现了扫描器遗漏的后门,或在知名资源中发现了误报?请提交一个包含该模式的 issue(切勿包含实际载荷或令牌);参见 CONTRIBUTING.md。如需在不公开的情况下报告某个家族,请参见 SECURITY.md。
git clone https://github.com/rpScripts/fivem-backdoor-scanner.git
cd fivem-backdoor-scanner && npm ci && npm test
由 RPScripts 维护。 MIT 许可。本软件按“原样”提供,不附带任何形式的保证。