
Trova backdoor nelle risorse FiveM prima di avviarle: loader nascosti, load() remoto, payload offuscati, token trapelati. CLI, step CI, libreria.
Controlla le risorse FiveM alla ricerca di backdoor prima di avviarle. Legge i file .lua e .js, analizza il codice Lua e cerca
i pattern utilizzati dalle note backdoor di FiveM: un loader nascosto dietro migliaia di spazi, codice scaricato via HTTP e
passato a load(), payload offuscati, letture della tua license key o della password RCON, e token lasciati nei file.
Segnala inoltre eseguibili e percorsi non sicuri all'interno di un pacchetto.
Niente viene eseguito e niente viene caricato. Stesse regole della versione gratuita nel browser su RPScripts, che accetta anche uno ZIP o un'intera cartella del server tramite drag and drop.
Node.js 18 o superiore. Nessuna installazione necessaria:
npx github:rpScripts/fivem-backdoor-scanner ./resources
Analizza una singola risorsa, più cartelle, un ZIP (fino a 300 MB), oppure ottieni JSON per i tuoi strumenti:
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
Codice di uscita 0 = nulla trovato, 1 = risultati, 2 = utilizzo errato, 3 = impossibile eseguire una scansione (percorso mancante, ZIP non leggibile o superiore a 300 MB). Questo lo rende utilizzabile come step in 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
| Codice | Gravità | Rileva |
|---|---|---|
| LAB-SEC-107 | error | Codice spostato fuori dalla vista dopo 400+ spazi o tabulazioni (il trucco del loader di una nota famiglia di backdoor) |
| LAB-SEC-101 | warning | load() / loadstring() sul corpo di una risposta HTTP |
| LAB-SEC-102 | warning | load() su testo decodificato a runtime (string.char, byte con escape, decoder base64/hex) |
| LAB-SEC-103 | warning | Dati offuscati: lunghe stringhe di byte con escape, base64/hex di oltre 400 caratteri, lunghe liste string.char |
| LAB-SEC-104 | warning | Legge sv_licenseKey, rcon_password, sv_tebexSecret o la stringa MySQL in un file che invia HTTP |
| LAB-SEC-105 | warning | Richieste HTTP verso un IP pubblico raw o verso un indirizzo decodificato a runtime |
| LAB-SEC-106 | warning | os.execute, io.popen, scritture al di fuori della propria resource, SaveResourceFile in altre resource |
| LAB-SEC-108 | warning | Un token di bot Discord, un webhook Discord, una license key Cfx o un token GitHub dall'aspetto reale nei file |
| LAB-PKG-004 | warning | .exe, .dll, .bat, .cmd, .ps1, .sh, .vbs, .jar, .scr in una cartella o in un archivio (.dll è atteso accanto a un *.net.dll, una resource C#) |
| LAB-PKG-005 | warning | Voce di archivio con .., un percorso assoluto o una lettera di unità: estrarre può scrivere al di fuori della cartella di destinazione |
I warning sono pattern, non prove: un logger di webhook può legittimamente chiamare un IP raw. Leggi la riga segnalata e decidi.
Un errore (LAB-SEC-107) significa trattare il pacchetto come compromesso. Ogni rilevamento riporta severity, confidence,
method, un testo di correzione e riferimenti; i testi sono in rules/catalog.json, le versioni in
rules/CHANGELOG.md. I codici delle regole non cambiano mai significato.
.fxap cifrate con escrow, Lua
compilato, Lua che non è stato possibile analizzare, JavaScript in cui vengono eseguiti solo i controlli sul testo, file oltre 2 MB, archivi all'interno dell'upload).I rilevamenti hanno sempre la precedenza sulla copertura. Un risultato clean copre solo questi pattern. Non dimostra che una resource sia sicura.
+=, ?., <const>, hash con backtick, /* */) è supportata..zip, .rar, .7z) vengono elencati, non estratti. Solo .zip viene letto.node_modules e .git vengono saltati in una scansione di cartella. Le cartelle stream vengono scansionate.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);
Hai trovato una backdoor che lo scanner non rileva, o un falso positivo in una risorsa ben nota? Apri una issue con il pattern (mai un payload attivo o un token); vedi CONTRIBUTING.md. Per segnalare una famiglia senza pubblicarla, vedi SECURITY.md.
git clone https://github.com/rpScripts/fivem-backdoor-scanner.git
cd fivem-backdoor-scanner && npm ci && npm test
Gestito da RPScripts. Con licenza MIT. Il software è fornito "così com'è", senza garanzia di alcun tipo.