
Erstelle einen Anti-Erkennungs-Frida-Server aus dem Quellcode. ~90 Patches, die 16 Erkennungsvektoren abdecken, wöchentliche automatische Builds mit zufälligen Namen.
phantom-frida baut Android Frida Server und Gadget aus dem Quellcode und
ändert dabei eine gezielte Menge beobachtbarer Laufzeit-Identifikatoren. Es ist
eine Build- und Verifikationsumgebung, keine Zusage, dass jede
anwendungsspezifische Erkennungsmethode umgangen wird.
Das aktuelle Kompatibilitätsziel ist Frida 17.16.4 unter Android. Andere Frida-Versionen werden bewusst als unverifiziert behandelt, bis ihre Quellcode-Verträge, der vollständige Build und die Abnahme auf einem gerooteten Gerät wiederholt wurden.
Verwende dieses Projekt nur bei Anwendungen und Geräten, die dir gehören oder deren Test du autorisiert bist.
Das Repository unterscheidet drei Arten von Nachweisen:
build.py --verify erfordert sowohl Server als auch Gadget, entfernt die
Symbole aus dem bereitgestellten Gadget und weist dann bekannte verbotene
Laufzeit-Marker zurück, bevor eines der beiden Artefakte veröffentlicht
wird.scripts/android_smoke.py testet ein gebautes Artefakt auf einem gerooteten
Gerät: authentifizierter abstrakter UNIX-Transport, RPC mit dem
Standard-Client, Spawn, Attach, Java-Bridge-Assertions, /proc-Prüfungen,
ein externer Root-Speicherscan und ein separat geladenes Gadget.Ein bestandener Quellcode-Test oder Byte-Scan ist nicht gleichbedeutend mit Laufzeit-Tarnung. Aussagen über das Android-Verhalten sollten den erzeugten, redigierten Smoke-Test-Bericht enthalten.
Führe Build Custom Frida über den Actions-Tab aus. Der wiederverwendbare Build-Workflow:
build-info.json und SHA256SUMS in einem Build-Artefakt.Der wöchentliche Workflow ermittelt die neueste Version über die authentifizierte GitHub-API, ruft denselben schreibgeschützten Build-Workflow auf, verifiziert das heruntergeladene Artefakt, attestiert es und erteilt Schreibberechtigung für Releases nur dem abschließenden Job.
Voraussetzungen:
android.jar und D8;Wenn --ndk-path weggelassen wird, lädt der Builder Android NDK r29 unter
build/ herunter. Ein verifizierter arm64-Build mit festgelegten Eingaben ist:
export ANDROID_SDK_ROOT=/path/to/Android/Sdk
python3 build.py \
--version 17.16.4 \
--name oemcodec \
--arch android-arm64 \
--port 27142 \
--extended \
--strict-wx \
--verify
Nützliche Optionen:
--version, -v Exact Frida semantic version (required)
--name, -n Lowercase replacement name, 3-20 characters
--arch, -a One or more supported Android architectures
--port, -p Listening port; omitted keeps 27042
--extended, -e Apply the optional extended identifier transformations
--strict-wx Harden Frida-owned persistent anonymous RWX mappings on Android
--temp-fixes Apply opt-in, device-specific stability changes
--verify Reject known forbidden markers in final artifacts
--skip-build Patch source without compiling
--skip-clone Use an existing source tree in the work directory
--ndk-path Use an existing Android NDK r29 directory
Für das obige Beispiel enthält output/:
oemcodec-server-17.16.4-android-arm64
oemcodec-server-17.16.4-android-arm64.gz
oemcodec-gadget-17.16.4-android-arm64.so
oemcodec-gadget-17.16.4-android-arm64.so.gz
build-info.json
SHA256SUMS
build-info.json zeichnet die exakten Builder-, Frida- und frida-core-Commits, die NDK-Version, die UTC-Build-Zeit, die Architekturen, den Namen, den Port, den strikten W^X-Code-Pool-Modus und die Workflow-URL auf, wenn in Actions gebaut wurde. Überprüfen Sie heruntergeladene Binärdateien vor der Verwendung:
cd output
sha256sum --check SHA256SUMS
python3 -m json.tool build-info.json >/dev/null
Öffentliche wöchentliche Releases erhalten außerdem eine GitHub-Build-Provenance-Attestierung.
SHA256SUMS identifiziert einen Ausgabesatz; es wird nicht erwartet, dass Binär-Hashes
über verschiedene Build-Hosts hinweg übereinstimmen.
Der Builder bewahrt die D-Bus-Protokollschnittstellen unter re.frida.*, den
Pfad /re/frida/GadgetSession, öffentliche Frida-JavaScript-API-Strings mit
Großbuchstaben und generierte C-ABI-Symbole, die von Stock-Clients benötigt werden. Das Umbenennen dieser Werte
würde den normalen Frida-Client/Server-Vertrag brechen.
Der D-Bus-Dienstbezeichner, das Helper-JNI-Paket, das Zymbiote-Socket-Präfix, ausgewählte Prozess-/Bibliotheks-/Pfad-Bezeichner, ausgewählte Thread-Namen und ein optionaler benutzerdefinierter Port sind separate Implementierungsdetails, die der Builder transformieren kann. Der Ausgabe-Verifier lehnt diesen expliziten Marker-Satz ab:
frida\0
frida-zymbiote
re/frida/HelperBackend
frida-server
frida-helper
frida-agent
frida-gadget
frida-eternal-agent
frida-generate-certificate
frida-main-loop
frida:rpc
FridaScriptEngine
GLib-GIO
GDBusProxy
GumScript
Frida/
gum-js-loop
gmain\0
gdbus\0
pool-frida
pool-spawner
jit-cache\0
Der exakte öffentliche API-String Frida\0 und die auf der Allowlist stehenden re.frida.*-Protokollbezeichner bleiben absichtlich erhalten. Das HTTP/Inspector-Präfix Frida/ ist ein Verifier-Fehler und wird unabhängig davon umbenannt.
Installiere die exakte Python-Bindung, die in build-info.json aufgezeichnet ist, installiere die gepinnte Java-Bridge-Abhängigkeit und verbinde genau ein gerootetes Android-Gerät:
python3 -m pip install "frida==17.16.4" frida-tools
npm ci --ignore-scripts
python3 scripts/android_smoke.py \
--server output/oemcodec-server-17.16.4-android-arm64 \
--gadget output/oemcodec-gadget-17.16.4-android-arm64.so \
--name oemcodec \
--port 27142 \
--package com.example.app \
--ndk build/android-ndk-r29 \
--report android-smoke-report.json
Das Paket muss eine installierte Java-Anwendung sein, für deren Test Sie autorisiert sind.
Die Testumgebung kompiliert test_comprehensive.js mit der expliziten
frida-java-bridge, die von Frida 17 benötigt wird. Server und Gadget lauschen jeweils auf einem
zufälligen authentifizierten abstrakten UNIX-Socket; ihre Host-TCP-Ports existieren nur als
ADB-Forwards, und es wird kein TCP-Listener auf dem Gerät bereitgestellt. Die Testumgebung kompiliert außerdem
eine ABI-konforme Root-Probe, die die eingebundenen Agent- und Gadget-Images über
/proc/<pid>/mem scannt, außerhalb der eigenen Prozesssicht von Frida. Sie räumt ihre Prozesse,
Forwards und das entfernte Testverzeichnis beim Beenden auf. Das /proc-Gate weist außerdem
veraltete linjector-Dateideskriptor-Namen und eine TracerPid ungleich null zurück.
Die Frida-Gadget-Konfiguration muss neben der Bibliothek als
lib<name>-gadget.config.so benannt werden; die Testumgebung generiert und deployt diese Datei.
python -m pip install --requirement requirements-dev.txt
npm ci --ignore-scripts
python -m pytest
ruff check .
ruff format --check .
mypy build.py patches.py namegen.py scripts
node --check test_comprehensive.js
bash -n build-wsl.sh
go run github.com/rhysd/actionlint/cmd/[email protected]