Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
View8 — Dekompiliert serialisierten V8-Bytecode (JSC-Dateien) in hochwertigen, lesbaren JavaScript-ähnlichen Code, mit Unterstützung für mehrere V8-Versionen, Baumausgabe und deterministischer Funktionsbenennung für die Malware-Analyse. | Kitploit
Tools/GitHubGitHub/suleram/view8
Statische AnalyseSchwachstellenanalyseReverse EngineeringMalware-AnalyseBinäranalyse
GitHubsuleram/view8

View8

Dekompiliert serialisierten V8-Bytecode (JSC-Dateien) in hochwertigen, lesbaren JavaScript-ähnlichen Code, mit Unterstützung für mehrere V8-Versionen, Baumausgabe und deterministischer Funktionsbenennung für die Malware-Analyse.

Repository anzeigen
375606vor 1 MonatVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

View8

View8 ist ein statisches Analysetool, das dazu entwickelt wurde, serialisierte V8-Bytecode-Objekte (JSC-Dateien) in hochwertigen, lesbaren Code zu dekompilieren. Um diese serialisierten Objekte zu parsen und zu disassemblieren, verwendet View8 eine gepatchte, kompilierte V8-Binärdatei. Dadurch erzeugt View8 eine textuelle Ausgabe, die JavaScript ähnelt.

Anforderungen

  • Python 3.x
  • Disassembler-Binärdatei. Verfügbare Versionen:
    • V8-Version 9.4.146.24 (verwendet in Node V16.x)
    • V8-Version 10.2.154.26 (verwendet in Node V18.x)
    • V8-Version 11.3.244.8 (verwendet in Node V20.x)

Für kompilierte Versionen besuchen Sie die Releases-Seite.

Verwendung

Kommandozeilenargumente

  • --inp, : Der Name der Eingabedatei.
-i
  • --out, -o: Pfad zur Ausgabe. Abhängig von den gewählten Optionen kann die Ausgabe eine einzelne Datei oder eine Verzeichnisstruktur sein.
  • --input_format, -f: Gibt das Eingabeformat an. Optionen sind:
    • raw: Die Eingabe ist eine rohe JSC-Datei.
    • disassembled: Die Eingabedatei ist bereits disassembliert.
    • serialized: Die Eingabe ist bereits dekompiliert und in einem serialisierten Format gespeichert. Das aktuelle serialisierte Format ist Python pickle; verwenden Sie nur vertrauenswürdige Eingaben.
  • --export_format, -e: Gibt das/die Exportformat(e) an. Optionen sind v8_opcode, translated, decompiled und serialized. Mehrere Optionen können kombiniert werden. Standard: decompiled.
  • --path, -p: Pfad zur Disassembler-Binärdatei. Erforderlich, wenn die Eingabe im Raw-Format vorliegt und View8 den passenden Disassembler nicht automatisch finden kann.
  • --scope: Bereichsargumente propagieren. Standard: 1.
  • --normalize: Ersetzt adressbasierte Funktionsbezeichner durch deterministische Namen, die auf der Parse-Reihenfolge basieren.
  • --normalize-map [CSV]: Schreibt bei Verwendung von --normalize eine CSV-Zuordnung von jedem ursprünglichen Funktionsnamen zu seinem normalisierten Namen. Wenn der Pfad weggelassen wird, leitet View8 <output>.name_map.csv aus --out ab, oder aus --inp, wenn kein Ausgabepfad festgelegt ist.
  • --tree, -t: Teilt die Ausgabe in eine Baumstruktur auf, anstatt alle Funktionen in einer Datei zu speichern. Geben Sie die Funktion an, die als Baumwurzel verwendet werden soll. Um mit der standardmäßigen Hauptfunktion zu beginnen, verwenden Sie start.
  • --split_mode: Baum-Aufteilungsmodus. Optionen sind declarers, calls und references. Standard: declarers.
  • --inline_depth, -d: In den Modi calls und references werden Funktionen, die von der gewählten Baumwurzel bis zur Tiefe N erreichbar sind, in die Hauptbaumdatei aufgenommen. Tiefe 0 bedeutet nur die gewählte Wurzel; Tiefe 1 umfasst direkte Aufgerufene/Referenzen; Tiefe 2 umfasst deren Kinder. Wird nicht mit declarers verwendet.
  • --inline_branch_limit, -l: Im Baummodus werden vollständige untergeordnete Zweige mit höchstens N Funktionen in die Hauptbaumdatei eingefügt, wenn untergeordnete Zweige durch --inline_depth eingeschlossen werden. Größere Zweige werden separat gespeichert.
  • --split_depth: In den Modi calls und references wird begrenzt, wie tief exportierte Nutzungszweige durchlaufen werden. Standard: 4.
  • --include, -n: Datei, die Funktionen enthält, die in die Ausgabe aufgenommen werden sollen.
  • --exclude, -x: Datei, die Funktionen enthält, die von der Ausgabe ausgeschlossen werden sollen.
  • --func: Zeigt eine ausgewählte Funktion an.
  • --show_all: Zeigt im Funktionsanzeigemodus auch Zeilen an, die als verborgen markiert sind.
  • --verbosity, -v: Ausführlichkeitsgrad. Akzeptierter Bereich: 0 bis 3.
  • Grundlegende Verwendung

    Um eine V8-Bytecode-Datei zu dekompilieren und den dekompilierten Code zu exportieren:

    root@kitploit:~
    python view8.py -i input_file -o output_file

    Disassembler-Pfad

    Standardmäßig erkennt View8 die V8-Bytecode-Version der Eingabedatei mit VersionDetector.exe und sucht automatisch nach einer kompatiblen Disassembler-Binärdatei im Ordner Bin. Dies kann geändert werden, indem Sie mit der Option --path oder -p eine andere Disassembler-Binärdatei angeben:

    root@kitploit:~
    python view8.py -i input_file -o output_file --path /path/to/disassembler

    Verarbeitung disassemblierter Dateien

    Um den Disassemblierungsprozess zu überspringen und eine bereits disassemblierte Datei als Eingabe bereitzustellen, verwenden Sie die Option --input_format disassembled oder -f disassembled:

    root@kitploit:~
    python view8.py -i input_file -o output_file -f disassembled

    Deterministische Funktionsnamen und Mapping-CSV

    Verwenden Sie --normalize, um adressbasierte Funktionsnamen durch deterministische Bezeichner zu ersetzen. Um die Beziehung zwischen den ursprünglichen und normalisierten Namen zu bewahren, fügen Sie --normalize-map hinzu:

    root@kitploit:~
    python view8.py \
      --input_format disassembled \
      --inp sample.jsc.disasm.txt \
      --normalize \
      --normalize-map \
      --out decompiled/sample.dec.txt \
      --export_format decompiled serialized

    Dies schreibt decompiled/sample.dec.name_map.csv mit den folgenden Spalten:

    root@kitploit:~
    original_name,normalized_name
    func_start_0x268514e9dcd9,func_start_0x100000000
    func_rne_0x268514eb0779,func_rne_0x100000001

    Ein expliziter CSV-Pfad kann ebenfalls angegeben werden:

    root@kitploit:~
    python view8.py \
      --input_format disassembled \
      --inp sample.jsc.disasm.txt \
      --normalize \
      --normalize-map mappings/sample.names.csv \
      --out decompiled/sample.dec.txt

    Erstellen und Verarbeiten serialisierter Dateien

    Manchmal ist es nützlich, die Datei in ein serialisiertes Format zu dekompilieren, das die geparsten Objekte und Strukturen bewahrt. Diese Art der Ausgabe kann einfacher nachzuverarbeiten sein als ein Textformat, beispielsweise während einer weiteren Entschleierung. Um eine serialisierte Ausgabe zu erstellen, verwenden Sie das Exportformat serialized:

    root@kitploit:~
    python view8.py -i input_file -o output_file -e serialized

    Sicherheitswarnung: Das aktuelle serialisierte Format ist eine Python-pickle-Datei (.pkl). Das Entpacken von Daten aus nicht vertrauenswürdigen Quellen kann beliebigen Code ausführen. Laden Sie nur serialisierte Dateien, die Sie selbst erstellt haben.

    Um eine serialisierte Ausgabe zurückzuladen und in einem anderen Format zu exportieren, verwenden Sie --input_format serialized oder -f serialized:

    root@kitploit:~
    python view8.py -i input_file -o output_file -f serialized

    Exportformate

    Geben Sie das/die Exportformat(e) mit der Option --export_format oder -e an. Sie können mehrere Formate kombinieren:

    • v8_opcode
    • translated
    • decompiled
    • serialized

    Um beispielsweise sowohl V8-Opcodes als auch dekompilierten Code nebeneinander zu exportieren:

    root@kitploit:~
    python view8.py -i input_file -o output_file -e v8_opcode decompiled

    Standardmäßig wird das Format decompiled verwendet.

    Baumausgabe

    Bei großen gebündelten Payloads kann das Schreiben aller dekompilierten Funktionen in eine einzige Datei die Analyse erschweren. Die Baumausgabe teilt die gewählte Wurzel und verwandte Funktionen in eine Verzeichnisstruktur auf.

    Verwenden Sie --tree, um die Baumwurzel auszuwählen:

    root@kitploit:~
    python view8.py \
      --inp input.pkl \
      --input_format serialized \
      --out ./tree_out/ \
      --tree start

    Der spezielle Wert start bedeutet die standardmäßige Hauptfunktion, die von View8 wiederhergestellt wurde.

    Baum-Aufteilungsmodi

    Der Baum kann mit einem von drei Modi aufgeteilt werden:

    • declarers: Folgt lexikalischen Deklarationsbeziehungen, d. h. welche Funktionen innerhalb oder unter einer anderen Funktion deklariert sind. Dies ist nützlich, um gebündelte oder modulartige Strukturen zu verstehen, stellt jedoch keinen Ausführungsfluss dar.
    • calls: Folgt direkten Funktionsaufrufen, wie z. B. func_x(...). Dies ist nützlich, um das Ausführungsgerüst aus einer gewählten Wurzel wiederherzustellen.
    • references: Folgt allen sichtbaren Funktionsreferenzen, nicht nur direkten Aufrufen. Dies umfasst Callbacks, exportierte Handler, Routen-Handler, Objekteigenschaften und andere zugewiesene Funktionen. Dieser Modus ist nützlich, um Fähigkeitsoberflächen zu entdecken, kann aber viel größere Bäume erzeugen als calls.

    Beispiel:

    root@kitploit:~
    python view8.py \
      --inp input.pkl \
      --input_format serialized \
      --out ./tree_calls/ \
      --tree start \
      --split_mode calls

    Inline-Einfügung in die Hauptdatei

    Die Hauptbaumdatei enthält immer die gewählte Wurzelfunktion.

    In den Modi calls und references steuert --inline_depth, wie viele Graphebenen in die Hauptdatei aufgenommen werden:

    root@kitploit:~
    --inline_depth 0  -> nur Wurzel
    --inline_depth 1  -> Wurzel + direkte Aufgerufene/Referenzen
    --inline_depth 2  -> Wurzel + direkte Aufgerufene/Referenzen + deren Kinder

    Der folgende Befehl erstellt beispielsweise eine kompakte Ausführungsübersicht, die die Wurzel und ihre direkten Aufgerufenen enthält:

    root@kitploit:~
    python view8.py \
      --inp input.pkl \
      --input_format serialized \
      --out ./tree_calls/ \
      --tree start \
      --split_mode calls \
      --inline_depth 1

    Um eine zusätzliche Aufrufebene einzuschließen:

    root@kitploit:~
    python view8.py \
      --inp input.pkl \
      --input_format serialized \
      --out ./tree_calls/ \
      --tree start \
      --split_mode calls \
      --inline_depth 2

    --inline_depth wird nur mit den Modi calls und references unterstützt. Es wird nicht mit declarers verwendet.

    Zweigaufteilung

    Große untergeordnete Zweige werden in separate Dateien gespeichert. In den Modi calls und references steuert --split_depth, wie tief exportierte Nutzungszweige durchlaufen werden:

    root@kitploit:~
    python view8.py \
      --inp input.pkl \
      --input_format serialized \
      --out ./tree_calls/ \
      --tree start \
      --split_mode calls \
      --inline_depth 1 \
      --split_depth 5

    Die Option --inline_branch_limit steuert, ob kleine vollständige untergeordnete Zweige ebenfalls in die Hauptdatei aufgenommen werden:

    root@kitploit:~
    --inline_branch_limit 3

    Dies bedeutet, dass vollständige untergeordnete Zweige mit höchstens 3 Funktionen in die Hauptdatei eingefügt werden können. Größere Zweige werden separat gespeichert.

    In den Modi calls und references werden untergeordnete Zweige nur eingefügt, wenn das gewählte --inline_depth bereits untergeordnete Funktionen einschließt. Beispielsweise bedeutet --inline_depth 0 nur Wurzel, sodass untergeordnete Zweige nicht eingefügt werden, selbst wenn sie klein sind.

    Empfohlene Baum-Workflows

    Für eine kompakte Ausführungsübersicht:

    root@kitploit:~
    python view8.py \
      --inp input.pkl \
      --input_format serialized \
      --out ./tree_calls/ \
      --tree start \
      --split_mode calls \
      --inline_depth 1 \
      --split_depth 5

    Für eine breitere architektonische Übersicht:

    root@kitploit:~
    python view8.py \
      --inp input.pkl \
      --input_format serialized \
      --out ./tree_calls/ \
      --tree start \
      --split_mode calls \
      --inline_depth 2 \
      --split_depth 5

    Für exportierte Callbacks, Handler, Routen und Fähigkeitsoberflächen:

    root@kitploit:~
    python view8.py \
      --inp input.pkl \
      --input_format serialized \
      --out ./tree_refs/ \
      --tree start \
      --split_mode references \
      --inline_depth 1 \
      --split_depth 3

    Für lexikalische oder modulartige Strukturen:

    root@kitploit:~
    python view8.py \
      --inp input.pkl \
      --input_format serialized \
      --out ./tree_declarers/ \
      --tree start \
      --split_mode declarers \
      --split_depth 3

    Funktionsanzeigemodus

    Um eine ausgewählte Funktion anzuzeigen, verwenden Sie --func:

    root@kitploit:~
    python view8.py \
      --inp input.pkl \
      --input_format serialized \
      --func func_name

    Um auch Zeilen anzuzeigen, die als verborgen markiert sind:

    root@kitploit:~
    python view8.py \
      --inp input.pkl \
      --input_format serialized \
      --func func_name \
      --show_all

    VersionDetector.exe

    Die V8-Bytecode-Version wird als Hash am Anfang der Datei gespeichert. Im Folgenden sind die Optionen für VersionDetector.exe aufgeführt:

    • -h: Ruft eine Version ab und gibt deren Hash zurück.
    • -d: Ruft einen Hash im Little-Endian-Format ab und gibt die entsprechende Version per Brute-Force zurück.
    • -f: Ruft eine Datei ab und gibt deren Version zurück.
    Tool herunterladen