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
CallObfuscator — Obfuskiere bestimmte Windows-APIs mit anderen APIs. | Kitploit
Tools/GitHubGitHub/d35ha/callobfuscator
DefensivwerkzeugeStatische AnalyseDynamische Analyse (Sandboxing)IDS/IPS-UmgehungReverse EngineeringMalware-AnalyseBinäranalyse
GitHubd35ha/callobfuscator

CallObfuscator

Obfuskiere bestimmte Windows-APIs mit anderen APIs.

Repository anzeigen
1.0k1744vor 5 JahrenVon 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

CallObfuscator

Verschleiern (verstecken) der PE-Importe vor statischen/dynamischen Analysetools.

Theorie

Das ist recht einfach: Angenommen, ich habe VirtualProtect verwendet und möchte es mit Sleep verschleiern. Das Tool manipuliert die IAT, sodass der Thunk, der auf VirtualProtect zeigt, stattdessen auf Sleep zeigt. Beim Ausführen der Datei lädt der Windows-Loader Sleep anstelle von VirtualProtect und übergibt die Ausführung an den Einstiegspunkt. Von dort wird die Ausführung an den Shellcode umgeleitet, den das Tool zuvor platziert hat, um die Adresse von VirtualProtect zu finden und sie durch die Adresse von Sleep zu ersetzen, die zuvor vom Loader zugewiesen wurde.

Verwendung

Tool herunterladen
  • Es kann direkt als Bibliothek eingebunden werden, siehe folgenden Ausschnitt (basierend auf dem Beispiel). Sie können sich auch cli.cpp ansehen.
  • root@kitploit:~
    #include <cobf.hpp>
    
    int main() {
    	cobf obf_file = cobf("sample.exe");
    	obf_file.load_pe();
    	obf_file.obf_sym("kernel32.dll", "SetLastError", "Beep");
    	obf_file.obf_sym("kernel32.dll", "GetLastError", "GetACP");
    	obf_file.generate("sample_obfuscated.exe");
    	obf_file.unload_pe();
    	return 0;
    };
    
    • Es kann auch als Kommandozeilenwerkzeug verwendet werden, indem der Pfad zur Eingabe-PE, der Pfad zur Ausgabe-PE und optional der Pfad zur Konfigurationsdatei (Standard ist config.ini) angegeben werden.
      cobf.exe <Eingabedatei> <Ausgabedatei> [Konfigurationsdatei]
      Die Konfigurationsdatei enthält die benötigten Verschleierungen (DLLs, Symbole, ...).
      Hier ist eine Vorlage für den Inhalt der Konfigurationsdatei:
    root@kitploit:~
    ; Vorlage für die Konfigurationsdatei:
    ; 	* Abschnitte können wie folgt geschrieben werden:
    ; 		[dll_name]
    ; 		altes_sym=neues_sym
    ;	* Der DLL-Name ist nicht case-sensitiv, aber
    ;	die alten und neuen Symbole sind es.
    ; 	* Sie können den Platzhalter sowohl für den
    ;	DLL-Namen als auch für das alte Symbol verwenden.
    ; 	* Sie können '#' am Anfang des alten oder
    ;	neuen Symbols verwenden, um eine Ordinalzahl zu kennzeichnen.
    ;	* Das neue Symbol muss von der DLL exportiert
    ;	werden, damit der Windows-Loader es auflösen kann.
    ; Zum Beispiel:
    ; 	* Verschleiern aller Symbole,
    ;	die aus user32.dll mit der Ordinalzahl 1600 importiert wurden.
    [user32.dll]
    *=#1600
    ;	* Verschleiern von Symbolen, die sowohl aus
    ;	kernel32.dll als auch aus kernelbase.dll mit Sleep importiert wurden.
    [kernel*.dll]
    *=Sleep
    ;	* Verschleiern von fprintf mit exit.
    [*]
    fprintf=exit
    

    Beispiel

    Dieses Codebeispiel kompilieren

    root@kitploit:~
    #include <windows.h>
    #include <stdio.h>
    
    int main() {
    	SetLastError(5);
    	printf("Letzter Fehler ist %d\n", GetLastError());
    	return 0;
    };
    

    Nach dem Kompilieren sehen die kernel32-Importe so aus:

    pic1

    Nun verschleiern wir sowohl SetLastError als auch GetLastError mit Beep und GetACP (eigentlich ist jede API aus kernel32 in Ordnung, auch wenn sie überhaupt nicht importiert wird).
    Die verwendeten Konfigurationen sind:

    root@kitploit:~
    [kernel32.dll]
    SetLastError=Beep
    GetLastError=GetACP
    

    Hier ist die Ausgabe (Sie können die Bibliothek auch direkt wie oben gezeigt verwenden).

    pic2

    Schauen wir uns noch einmal die kernel32-Importe an:

    pic3

    Es gibt keine Spur von SetLastError oder GetLastError.
    Eine Bestätigung, dass beide Dateien korrekt funktionieren:

    pic4

    Auswirkung

    IDA HexRays Decompiler

    pic5

    IDA Debugger

    pic6

    Ghidra

    pic7

    ApiMonitor

    pic8

    Das liegt daran, dass alle statischen Analysetools auf den API-Namen angewiesen sind, der in der IAT geschrieben steht, und dieser kann wie gezeigt manipuliert werden.
    Bei ApiMonitor tritt aufgrund der Verwendung von IAT-Hooking dasselbe Problem auf.

    Auf der anderen Seite hängen bei Tools wie x64dbg die angezeigten API-Namen nur von dem ab, was tatsächlich aufgerufen wird (nicht von dem, was in der IAT steht).

    pic9

    Zusätzlich

    • Das Auslesen der verschleierten PE aus dem Speicher wird sie nicht entschleiern, da die manipulierte IAT dieselbe bleibt.
    • Der Hauptzweck dieses Tools ist es, den Analyseprozess zu stören (ihn zu verlangsamen).
    • Man kann jedes importierte Symbol (nach Name oder Ordinalzahl) mit einem anderen Symbol (Name oder Ordinalzahl) verschleiern.
    • Der Shellcode wird als erster TLS-Callback ausgeführt, um die verschleierten Symbole zu verarbeiten, die von den anderen TLS-Callbacks benötigt werden, bevor der Einstiegspunkt ausgeführt wird.
    • Der Shellcode wird als C-Code ausgeliefert, der beim Kompilieren des Tools generiert wird, um die Bearbeitung zu erleichtern.
    • Die Namen der verschleierten Symbole werden nicht direkt anhand ihres Namens, sondern anhand eines Hashs aufgelöst.
    • Das Tool deaktiviert die Relokationen und entfernt alle Debugsymbole.
    • Das Tool erstellt einen neuen rwx-Abschnitt namens .cobf, um den Shellcode und die anderen benötigten Daten aufzunehmen.
    • Es kann mehrfach auf derselben verschleierten PE verwendet werden.
    • Getestet nur unter Windows 10 x64.
    • Quellcode holen mit git clone https://github.com/d35ha/CallObfuscator.
    • Binärdateien herunterladen aus dem Release-Bereich.

    TODO

    • Shellcode-Verschleierung (wahrscheinlich mit obfusion).
    • Unterstützung für verzögert geladene Symbole.
    • Minimierung der Größe des erstellten Abschnitts.
    • Hash zur Kompilierzeit.
    • Bessere Tests.