
Finde Backdoors in FiveM-Ressourcen, bevor du sie startest: versteckte Loader, entferntes load(), obfuskierte Payloads, geleakte Tokens. CLI, CI-Schritt, Bibliothek.
Prüft FiveM-Ressourcen auf Backdoors, bevor du sie startest. Es liest .lua- und .js-Dateien, parst das Lua und sucht
nach den Mustern, die bekannte FiveM-Backdoors verwenden: einen hinter Tausenden von Leerzeichen versteckten Loader, über HTTP heruntergeladenen und
an load() übergebenen Code, obfuskierte Payloads, das Auslesen deines Lizenzschlüssels oder RCON-Passworts sowie in den Dateien hinterlassene Tokens.
Außerdem markiert es ausführbare Dateien und unsichere Pfade in einem Paket.
Nichts wird ausgeführt und nichts wird hochgeladen. Dieselben Regeln wie bei der kostenlosen Browserversion auf RPScripts, die außerdem eine ZIP-Datei oder einen ganzen Serverordner per Drag and Drop entgegennimmt.
Node.js 18 oder neuer. Keine Installation erforderlich:
npx github:rpScripts/fivem-backdoor-scanner ./resources
Eine einzelne Ressource, mehrere Ordner, eine ZIP-Datei (bis zu 300 MB) scannen oder JSON für eigene Tools abrufen:
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
Exit-Code 0 = nichts gefunden, 1 = Funde, 2 = falsche Verwendung, 3 = ein Scan konnte nicht ausgeführt werden (fehlender Pfad, ZIP, das nicht lesbar oder über 300 MB ist). Das macht es als CI-Schritt nutzbar:
# .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
| Code | Schweregrad | Findet |
|---|---|---|
| LAB-SEC-107 | error | Code, der nach 400+ Leerzeichen oder Tabs aus dem Sichtfeld geschoben wird (der Loader-Trick einer bekannten Backdoor-Familie) |
| LAB-SEC-101 | warning | load() / loadstring() auf den Body einer HTTP-Antwort |
| LAB-SEC-102 | warning | load() auf Text, der zur Laufzeit dekodiert wird (string.char, escapte Bytes, base64/hex-Decoder) |
| LAB-SEC-103 | warning | Verschleierte Daten: lange escapte Byte-Strings, 400+ Zeichen base64/hex, lange string.char-Listen |
| LAB-SEC-104 | warning | Liest sv_licenseKey, rcon_password, sv_tebexSecret oder den MySQL-String in einer Datei, die HTTP sendet |
| LAB-SEC-105 | warning | HTTP-Anfragen an eine öffentliche rohe IP oder an eine zur Laufzeit dekodierte Adresse |
| LAB-SEC-106 | warning | os.execute, io.popen, Schreibvorgänge außerhalb der eigenen Ressource, SaveResourceFile in andere Ressourcen |
| LAB-SEC-108 | warning | Ein echt aussehendes Discord-Bot-Token, ein Discord-Webhook, ein Cfx-Lizenzschlüssel oder ein GitHub-Token in den Dateien |
| LAB-PKG-004 | warning | .exe, .dll, .bat, .cmd, .ps1, .sh, .vbs, .jar, .scr in einem Ordner oder Archiv (.dll wird neben einer *.net.dll erwartet, einer C#-Ressource) |
| LAB-PKG-005 | warning | Archiveintrag mit .., einem absoluten Pfad oder einem Laufwerksbuchstaben: Das Extrahieren kann außerhalb des Zielordners schreiben |
Warnungen sind Muster, kein Beweis: Ein Webhook-Logger kann legitimerweise eine rohe IP aufrufen. Lies die gemeldete Zeile und entscheide.
Ein Fehler (LAB-SEC-107) bedeutet, das Paket als kompromittiert zu behandeln. Jeder Fund trägt severity, confidence,
method, einen Fix-Text und Referenzen; die Texte stehen in rules/catalog.json, Versionen in
rules/CHANGELOG.md. Regelcodes ändern niemals ihre Bedeutung.
.fxap-Ordner, kompiliertes
Lua, Lua, das nicht geparst werden konnte, JavaScript, bei dem nur die Textprüfungen laufen, Dateien über 2 MB, Archive innerhalb des Uploads).Funde haben immer Vorrang vor der Abdeckung. Ein sauberes Ergebnis deckt nur diese Muster ab. Es beweist nicht, dass eine Ressource sicher ist.
+=, ?., <const>, Backtick-Hashes, /* */) wird unterstützt..zip, .rar, .7z) werden aufgelistet, nicht entpackt. Nur .zip wird gelesen.node_modules und .git werden bei einem Ordner-Scan übersprungen. stream-Ordner werden gescannt.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);
Hast du eine Backdoor gefunden, die der Scanner übersieht, oder ein False Positive in einer bekannten Ressource? Öffne ein Issue mit dem Muster (niemals eine aktive Payload oder ein Token); siehe CONTRIBUTING.md. Um eine Familie zu melden, ohne sie zu veröffentlichen, siehe SECURITY.md.
git clone https://github.com/rpScripts/fivem-backdoor-scanner.git
cd fivem-backdoor-scanner && npm ci && npm test
Gepflegt von RPScripts. MIT-lizenziert. Die Software wird „wie besehen“ bereitgestellt, ohne Gewährleistung jeglicher Art.