
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 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 = 스캔을 실행할 수 없음(경로 누락, 읽을 수 없거나 300 MB를 초과하는 ZIP). 따라서 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 | 공인 raw IP 또는 런타임에 디코딩된 주소로의 HTTP 요청 |
| LAB-SEC-106 | warning | os.execute, io.popen, 자신의 리소스 외부로의 쓰기, 다른 리소스로의 SaveResourceFile |
| LAB-SEC-108 | warning | 파일 내 실제 형태의 Discord 봇 토큰, Discord 웹훅, Cfx 라이선스 키 또는 GitHub 토큰 |
| LAB-PKG-004 | warning | 폴더나 아카이브 내의 .exe, .dll, .bat, .cmd, .ps1, .sh, .vbs, .jar, .scr (.dll은 C# 리소스인 *.net.dll 옆에 있는 것이 정상임) |
| LAB-PKG-005 | warning | .., 절대 경로 또는 드라이브 문자를 포함한 아카이브 항목: 압축 해제 시 대상 폴더 외부에 쓸 수 있음 |
경고는 패턴일 뿐 증거가 아닙니다: 웹훅 로거는 정당하게 raw IP를 호출할 수 있습니다. 보고된 줄을 읽고 판단하십시오.
error(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);
스캐너가 놓치는 백도어를 발견했거나, 잘 알려진 리소스에서 오탐을 발견하셨나요? 패턴과 함께 이슈를 열어 주세요 (실제 페이로드나 토큰은 절대 포함하지 마세요). CONTRIBUTING.md를 참고하세요. 공개하지 않고 패밀리를 보고하려면 SECURITY.md를 참고하세요.
git clone https://github.com/rpScripts/fivem-backdoor-scanner.git
cd fivem-backdoor-scanner && npm ci && npm test
RPScripts에서 유지 관리합니다. MIT 라이선스. 이 소프트웨어는 명시적이든 묵시적이든 어떠한 종류의 보증도 없이 "있는 그대로" 제공됩니다.