
Fermion, an electron wrapper for Frida & Monaco.
Fermion ist eine Electron-Anwendung, die frida-node und monaco-editor umschließt. Sie bietet eine vollständig integrierte Umgebung zum Prototypisieren, Testen und Verfeinern von Frida-Skripten über eine einzige Benutzeroberfläche. Mit der Integration von Monaco kommen alle Funktionen, die man von Visual Studio Code erwarten würde: Linting, IntelliSense, Tastenkombinationen usw. Darüber hinaus enthält Fermion eine TypeScript-Sprachdefinition für die Frida-API, sodass sich Frida-Skripte leicht schreiben lassen.
Was es mit dem Namen auf sich hat: Ein Fermion kann ein Elementarteilchen wie das Elektron oder ein zusammengesetztes Teilchen wie das Proton sein. Zu den Fermionen gehören alle Quarks und Leptonen sowie alle zusammengesetzten Teilchen, die aus einer ungeraden Anzahl dieser bestehen, wie etwa alle Baryonen und viele Atome und Kerne.
Laden Sie das Repository herunter und navigieren Sie im Terminal zum Ordner Fermion. Setzen Sie dort die folgenden Umgebungsvariablen.
# Windows
set npm_config_runtime=electron
set npm_config_target=21.0.0
# Linux / OSX
export npm_config_runtime=electron
export npm_config_target=21.0.0
Installieren Sie danach die Pakete, die zum Ausführen von Fermion erforderlich sind, mit:
npm install
Sobald dies abgeschlossen ist, können Sie Fermion ausführen, indem Sie Folgendes eingeben:
npm start
Führen Sie die obigen Schritte aus und geben Sie anschließend den folgenden Befehl im Terminal ein:
# Windows
electron-packager . --icon .\src\images\fermion-ico.ico
# Linux
electron-packager . --icon ./src/images/fermion-ico.png
# OSX
electron-packager . --icon ./src/images/fermion-ico.icns
Sie können die neueste vorkompilierte Fermion-Version für x64 Windows und Linux unter releases erhalten.
Fermion, die Ihnen sagt, was das Problem ist und wie Sie es lösen können. Im Allgemeinen können Sie Fermion oder den Frida Server jedoch als root ausführen oder alternativ den folgenden Befehl ausführen: sudo sysctl kernel.yama.ptrace_scope=0.F: Ich möchte meine eigene Version von Fermion gegen eine neue Version von Frida/Electron bauen. Wie kann ich herausfinden, welche prebuild’s derzeit existieren?
ELECTRON_TARGETS_DEFAULT bzw. ELECTRON_TARGETS_FREEBSD überprüfen.F: Ich möchte die im Monaco-Editor verwendeten Typdefinitionen überprüfen/ändern/aktualisieren. Wie kann ich das tun?
node_modules/@types/frida-gum/index.d.ts.F: Warum ist trace nicht stabil, Mann (╯°□°)╯︵ ┻━┻
hot pointer verfolgen und/oder der Trace Graphen mit Tausenden von Knoten erzeugt, werden Sie wahrscheinlich feststellen, dass das trace window hinterherhinkt, während es Daten empfängt. Außerdem kann es, wie bei jeder Art von Tracing, zu Prozessinstabilität / Abstürzen / Einfrieren führen.Sie sehen unten ein Beispiel für Fermion in Aktion, in diesem Fall bei der Instrumentierung von kernel32!ReadFile.

Fermion verfügt über Auto-Vervollständigung, Linting und Frida-API-Symbolunterstützung.

Fermion kann sich über das device-Kontextmenü mit einem Frida-Server verbinden, um Remote-Anwendungen zu debuggen. In vielen Fällen, etwa beim USB-Debugging oder beim Anhängen an mobile Anwendungen über Emulatoren wie genymotion, erkennt Fermion den Server automatisch als verfügbar. Es ist jedoch auch möglich, einen Remote-Server über eine Kombination aus IP und Port anzugeben.

Fermion hat integrierte Unterstützung für Thread-CALL-Tracing.

Dies tut möglicherweise nicht genau das, was Sie erwarten. Wenn Sie entweder eine pointer- oder module/Symbol-Kombination definieren, attachet sich der Tracer an diese Stelle, und jedes Mal, wenn ein thread an dieser Stelle ausgeführt wird, beginnt er, alle CALL-Anweisungen zu verfolgen, die dieser Thread ausführt, bis er zurückkehrt. Das bedeutet, dass verschiedene Ausführungen unterschiedliche Graphen erzeugen können. Es bedeutet auch, dass Sie möglicherweise nicht alles sehen, was eine Funktion tut (z. B. wenn innerhalb der Funktion ein anderer Thread erzeugt wird).

Fermion konvertiert diese Traces mit dot in ein Graphviz SVG-Format, das Sie dann erkunden können. Dies ist eine Funktion, die ich gelegentlich bei explorativen Arbeiten nützlich finde (Was macht eine Funktion? Wie komplex ist diese Ausführung?). Abgesehen davon ist dies eine Prototyp-Funktion, die ich auf Fermion aufgebaut habe und die wahrscheinlich noch etwas mehr Liebe benötigt, um produktionsreifer zu sein.
Fermion verfügt außerdem über eine integrierte Dokumentation für die JavaScript API von Frida. Wie jeder andere erinnere ich mich auch nicht immer daran, wie alles funktioniert, und die Dokumentation in der App macht es überflüssig, ein Browserfenster offen zu haben.

Weitere Details zu versionsspezifischen Änderungen finden Sie im changelog.
Wenn Sie Fermion in Ihren Workflow integrieren und nützlich finden, ermutige ich Sie, Pull Requests zu erstellen, Fehlerberichte einzureichen und Funktionen zu fordern, um die Anwendung zu verbessern. Ich bin nicht gerade ein Node-Entwickler, daher bin ich sicher, dass Leute Wege finden werden, einige der Komponenten zu optimieren und zu überarbeiten.
Frida v15.0+ integriert sind.Ich möchte mich bei einigen Leuten besonders bedanken!