
Находите бэкдоры в ресурсах FiveM до их запуска: скрытые загрузчики, удалённый load(), обфусцированные полезные нагрузки, утёкшие токены. CLI, шаг CI, библиотека.
Проверяет ресурсы FiveM на наличие бэкдоров перед их запуском. Он читает файлы .lua и .js, разбирает Lua и ищет
шаблоны, которые используют известные бэкдоры FiveM: загрузчик, скрытый за тысячами пробелов, код, загружаемый по HTTP и
передаваемый в load(), обфусцированные полезные нагрузки, чтение вашего лицензионного ключа или пароля RCON, а также токены, оставленные в файлах.
Он также помечает исполняемые файлы и небезопасные пути в пакете.
Ничего не выполняется и ничего не загружается. Те же правила, что и у бесплатной браузерной версии на RPScripts, которая также принимает ZIP или целую папку сервера перетаскиванием.
Node.js 18 или новее. Установка не требуется:
npx github:rpScripts/fivem-backdoor-scanner ./resources
Просканируйте один ресурс, несколько папок, ZIP-архив (до 300 МБ) или получите 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 МБ). Это делает его пригодным для использования в качестве шага 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 | load() / loadstring() на теле HTTP-ответа |
| LAB-SEC-102 | warning | load() на тексте, декодированном во время выполнения (string.char, экранированные байты, декодеры base64/hex) |
| LAB-SEC-103 | warning | Обфусцированные данные: длинные строки экранированных байтов, base64/hex длиной 400+ символов, длинные списки string.char |
| LAB-SEC-104 | warning | Чтение sv_licenseKey, rcon_password, sv_tebexSecret или строки MySQL в файле, который отправляет HTTP-запросы |
| LAB-SEC-105 | warning | HTTP-запросы к публичному «сырому» IP или к адресу, декодированному во время выполнения |
| 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 в папке или архиве (.dll ожидается рядом с *.net.dll, ресурсом на C#) |
| LAB-PKG-005 | warning | Запись архива с .., абсолютным путём или буквой диска: при извлечении она может записать за пределы целевой папки |
Предупреждения — это шаблоны, а не доказательство: логгер вебхуков может по-настоящему обращаться к «сырому» IP. Прочитайте указанную строку и решите сами.
Ошибка (LAB-SEC-107) означает, что пакет следует считать скомпрометированным. Каждая находка содержит severity, confidence,
method, текст исправления и ссылки; тексты находятся в rules/catalog.json, версии — в
rules/CHANGELOG.md. Коды правил никогда не меняют смысл.
.fxap, зашифрованные escrow, скомпилированный
Lua, Lua, который не удалось разобрать, JavaScript, где выполняются только текстовые проверки, файлы размером более 2 МБ, архивы внутри загруженного пакета).Находки всегда важнее покрытия. Чистый результат охватывает только эти шаблоны. Он не доказывает, что ресурс безопасен.
+=, ?., <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. Программное обеспечение предоставляется «как есть», без каких-либо гарантий.