
Praktischer Kurs zur Windows-Malware-Entwicklung: API-Hashing, DLL-Sideloading, Shellcode-Ausführung, PE-Manipulation, Payload-Hosting und Delivery-Labs.
Desktop development with C++ bei der Installation ausZusätzlich (optional): Richten Sie für ein vollständigeres Reverse-Engineering-Erlebnis Symbole ein:
setx _NT_SYMBOL_PATH c:\Symbols;srv*c:\Symbols*https://msdl.microsoft.com/download/symbols
mkdir \symbols
Öffnen Sie PMD.sln in Visual Studio.
Wählen Sie das setup-Projekt aus und stellen Sie sicher, dass Sie:
a. das Projekt kompilieren können
b. die Debug-Ausgabe in DebugView++ anzeigen können.
Aktualisieren Sie die Compiler- und Linker-Flags des Projekts template, um die IAT-Einträge und andere PE-Eigenschaften zu manipulieren.
a. Machen Sie sich mit der dynamischen API-Auflösung und der MSDN-Dokumentation vertraut.
b. Gibt es noch andere Eigenschaften, die auffallen? Wenn Sie Strings.exe gegen die Binary ausführen, fallen Ihnen dann bestimmte Strings auf?
c. Können Sie diese entfernen/aktualisieren?
Verwenden Sie ein beliebiges Tool Ihrer Wahl, um die Übung abzuschließen (z. B. dumpbin/PE Bear). Ein Wrapper um pefile wurde unter scripts\props.py bereitgestellt (stellen Sie sicher, dass Sie die Abhängigkeiten installieren).
Laden Sie einige Malware-Beispiele von VXUG herunter.
a. Was sind die Hauptunterschiede zwischen gutartigen und bösartigen ausführbaren Dateien?
b. Was sind die Hauptunterschiede zwischen unserer Binary und gutartigen ausführbaren Dateien?
Der verwendete API-Hashing-Algorithmus ist fnv1a.
solution und rufen Sie MessageBoxA mithilfe des API-Hashing-Frameworks auf.Laden Sie Cisco Webex herunter (https://www.webex.com/downloads.html)
Finden Sie CiscoCollabHost und schauen Sie, welche DLLs geladen werden.
Öffnen Sie CiscoCollabHost in Ghidra und identifizieren Sie verschiedene Möglichkeiten, um durch Sideloading Codeausführung zu erlangen.
Bearbeiten Sie dll_template, um Ihre Ziel-Binary per Sideloading zu laden. Verifizieren Sie, dass Sie den Debug-String in DebugView++ sehen.
Aktualisieren Sie LastWriteTime und CreationTime von dll_template.dll, sodass sie mit der Ziel-DLL übereinstimmen.
Kompilieren Sie das Utility-Projekt und führen Sie es aus.
a. Ziehen Sie außerdem in Betracht, es auf Ihrem Host-System auszuführen.
Kopieren Sie die identifizierte DLL in das Verzeichnis x64/{Debug,Release} und aktualisieren Sie den Loader-Code.
Aktualisieren Sie execute_sc, um Ihren Shellcode mit einer anderen Funktion im API-Hashing-Framework auszuführen.
Melden Sie sich bei einem Cloud-Speicheranbieter an (z. B. AWS/CloudFlare)
Verpacken Sie Ihren Payload und laden Sie ihn hoch.
a. Untersuchen Sie außerdem Möglichkeiten, den Download-Zugriff einzuschränken/zu überwachen.
Erstellen Sie einen Snapshot Ihrer VM.
Stellen Sie die Basis-VM wieder her und spielen Sie Ihr vollständiges "Delivery"-Szenario durch.
.github\workflows\build.yml, um zusätzliche Vor-/Nachverarbeitung durchzuführen, die Ihnen Zeit spart. Hier sind einige Ideen:
props.py aus und validieren/inkludieren Sie die Ausgabe.LastWriteTime und CreationTime, sodass sie mit einem Ziel übereinstimmen.