FiveM リソースを起動する前にバックドアをチェックします。.lua ファイルと .js ファイルを読み込み、Lua を解析して、既知の FiveM バックドアが使用するパターンを探します。数千個のスペースの背後に隠されたローダー、HTTP 経由でダウンロードされ load() に渡されるコード、難読化されたペイロード、ライセンスキーや RCON パスワードの読み取り、ファイル内に残されたトークンなどです。
また、パッケージ内の実行ファイルや安全でないパスも検出します。
何も実行されず、何もアップロードされません。無料の RPScripts 上のブラウザ版と同じルールで、 こちらは ZIP やサーバーフォルダ全体をドラッグ&ドロップで受け付けることもできます。
Node.js 18 以降。インストールは不要です:
npx github:rpScripts/fivem-backdoor-scanner ./resources
1つのリソース、複数のフォルダ、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 | 実行時にデコードされたテキスト(string.char、エスケープされたバイト、base64/hex デコーダー)に対する load() |
| 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(.dll は C# リソースである *.net.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 ライセンス。本ソフトウェアは「現状のまま」提供され、いかなる種類の保証も伴いません。