Persistente Frida-Skripte

FIRERPA bietet Ihnen die Möglichkeit, Frida-Skripte persistent zu machen. Sie können Skripte bequem über die entsprechenden Schnittstellen injizieren, und der Skript-Manager von FIRERPA verwaltet die injizierten Skripte automatisch für Sie. Selbst wenn Ihr Skript unerwartet beendet wird oder der App-Prozess beendet wird, wird FIRERPA das Skript beim nächsten Öffnen Ihrer App automatisch erneut injizieren. Diese Funktion wurde in Version 7.80 eingeführt.

Skript installieren

Sie können diese Schnittstelle verwenden, um Ihr Skript in die entsprechende Anwendung zu installieren. Das in die Anwendung installierte Skript wird sofort nach der Installation in die Anwendung injiziert. Das installierte Skript wird automatisch in den Skript-Manager aufgenommen, der es für Sie ständig überwacht und bei Bedarf erneut injiziert.

Achtung

Der Skript-Manager erlaubt nur die Injektion eines Skripts pro App zur gleichen Zeit. Sie können nicht mehrere Skripte gleichzeitig in dieselbe Anwendung injizieren.
app = d.application("com.android.settings")
app.attach_script(script, runtime=ScriptRuntime.RUNTIME_QJS, standup=5)

Der Parameter script ist der Inhalt des zu injizierenden Frida-Skripts (unterstützt Bytecode), runtime ist die entsprechende Laufzeitumgebung, standardmäßig qjs. Der Parameter standup bedeutet, dass die Injektion erst 5 Sekunden nach dem Start des App-Prozesses erfolgt (die Zeit wird ab der Prozesserstellung berechnet). Dieser Parameter hat einen Mindestwert von 1 Sekunde und einen Höchstwert von 300 Sekunden, um Abstürze und andere Race-Condition-Probleme zu vermeiden, die durch eine zu frühe Injektion in den Anwendungsprozess verursacht werden können. Im Spawn-Modus sollte dieser Parameter immer 0 sein.

Diese Schnittstelle unterstützt auch die Injektion im Spawn-Modus. Beachten Sie jedoch, dass die Verwendung des Spawn-Modus Ihren UI-Ablauf unterbrechen kann (falls Sie gleichzeitig die Benutzeroberfläche bedienen müssen). Denn sobald Sie den Spawn-Modus verwenden, wird die Anwendung bei einer Skript-Ausnahme oder einem Beenden der App automatisch neu gestartet, was Ihre Interaktionen mit der Benutzeroberfläche stören kann. Wenn Sie den Spawn-Modus verwenden möchten, verwenden Sie bitte die folgenden Parameter.

app = d.application("com.android.settings")
app.attach_script(script, runtime=ScriptRuntime.RUNTIME_QJS, spawn=True, standup=0)

Es ist zu beachten, dass es einen Unterschied zwischen dem Spawn-Modus und dem normalen Modus gibt. Im normalen Modus wird, wenn die Anwendung aus irgendeinem Grund beendet wird, gewartet, bis die Anwendung gestartet wird, bevor die Injektion durchgeführt wird; die Anwendung wird nicht von selbst gestartet. Daher müssen Sie die Anwendung möglicherweise selbst per Code oder manuell starten, damit die Injektion fortgesetzt wird. Im Spawn-Modus hingegen wird die Anwendung auch nach dem Beenden automatisch gestartet und die Injektion durchgeführt.

Deinstallieren

Diese Schnittstelle entfernt das bereits in der Anwendung installierte Frida-Skript. Das Skript wird auch vom Anwendungsprozess getrennt, und der Skript-Manager von FIRERPA wird den Zustand des Skripts nicht mehr überwachen und nach einer Skript-Ausnahme keine erneute Injektion oder ähnliche Aktionen mehr durchführen.

app = d.application("com.android.settings")
app.detach_script()

Installationsstatus prüfen

Diese Schnittstelle dient zur Überprüfung, ob bereits ein Skript in der Anwendung installiert ist. Anhand dieses Status können Sie prüfen, ob eine Neuinstallation erforderlich ist.

app = d.application("com.android.settings")
app.is_attached_script()

Injektionsstatus prüfen

Diese Schnittstelle dient zur Überprüfung, ob Ihr installiertes Skript aktuell in den Anwendungsprozess injiziert ist. Denn selbst wenn Sie die Skriptinstallation durchgeführt haben, kann es sein, dass das Skript aufgrund eines nicht gestarteten Programms oder eines Fehlers im Skript nicht in den Anwendungsprozess injiziert wurde. Anhand des Rückgabewertes können Sie entscheiden, ob Sie die entsprechende Anwendung starten oder das injizierte Skript auf Syntaxfehler überprüfen müssen.

app = d.application("com.android.settings")
app.is_script_alive()

Skript-Logs anzeigen

Konsolenprotokolle wie console.log in Ihrem Skript sowie Fehlermeldungen des Skripts können eingesehen werden. Sie müssen dies jedoch vorab beim Start konfigurieren. Bitte lesen Sie das Kapitel Logs anzeigen, um zu erfahren, wie Sie die Log-Datei einrichten. Im Folgenden gehen wir davon aus, dass Sie die Log-Datei korrekt auf /data/local/tmp/server.log gesetzt haben. Wenn Sie dann die Skript-Logs einsehen müssen, führen Sie den folgenden Befehl aus. Dieser filtert alle Log-Informationen des injizierten Skripts heraus. Sie können auch andere Befehle wie tail -f verwenden, um die Logs kontinuierlich zu verfolgen.

grep SCRIPT /data/local/tmp/server.log

Offline-Persistenz

Offline-Persistenz bedeutet, dass Sie Ihr FRIDA-Skript als Konfigurationsdatei auf dem Telefon ablegen können, und FIRERPA wird Ihr FRIDA-Skript nach dem Start automatisch laden. Sie müssen die oben genannten API-Schnittstellen für Injektion, Deinstallation usw. überhaupt nicht verwenden. Sie müssen lediglich die Skriptdatei in einem bestimmten Format erstellen und in einem festen Verzeichnis ablegen. Diese Funktion unterstützt die Überwachung von Verzeichnissen, das Laden in Echtzeit sowie das Deinstallieren und Aktualisieren von Skripten. Direkte Bearbeitungen und Änderungen im Skriptverzeichnis werden ebenfalls in Echtzeit angewendet. Unten sehen Sie eine einfache YAML-Konfiguration für die Skript-Persistenz. Der Inhalt des Skripts in dieser Konfiguration ist console.log("Hello From Yaml Script").

enable: true
application: "com.android.settings"
version: "2.10"
user: 0
runtime: "qjs"
script: !!binary "Y29uc29sZS5sb2coIkhlbGxvIEZyb20gWWFtbCBTY3JpcHQiKQ=="
emit: "http://myserver/reportData"
encode: "none"
standup: 10
spawn: false

Detaillierte Erklärung der einzelnen Konfigurationsoptionen im obigen Beispielskript

FeldBeschreibung
enableIst dieses Skript aktiviert
applicationAnwendungs-ID für die Skriptinjektion (z.B. com.android.setting)
versionUnterstützte Anwendungsversion für die Skriptinjektion ("N/A" bedeutet keine Versionsbeschränkung)
userWenn es sich um eine geklonte App handelt, geben Sie die Benutzer-ID der geklonten App an (normalerweise 999)
scriptSkriptinhalt als Base64, unterstützt Text oder Binärdaten (bitte gemäß Vorlage erstellen)
runtimeSkript-Laufzeitumgebung (qjs, v8)
standupVerzögerungszeit für die Injektion (berechnet ab dem Prozessstart)
spawnSpawn-Modus verwenden (ignoriert standup)
encodeWenn das Skript Daten meldet, geben Sie hier die Kodierung an (zlib/none)
emitWenn das Skript Daten meldet, geben Sie hier das Ziel an

Weitere Informationen zur emit-Datenmeldefunktion finden Sie im Kapitel Daten mit Frida melden.

Das obige ist ein vollständiges Beispiel für ein Offline-Skript. Speichern Sie nach dem Erstellen die Konfigurationsdatei mit dem oben genannten Inhalt unter dem Namen {file_name}.yaml und legen Sie sie im Ordner /data/usr/modules/script auf dem Gerät ab. Das System lädt Ihre Konfiguration automatisch. Das System erkennt automatisch Änderungen im Verzeichnis /data/usr/modules/script. Wenn Sie die YAML-Konfiguration aktualisieren oder löschen, wird das System die Injektion Ihres Skripts ebenfalls automatisch aktualisieren oder aufheben.