
Cours pratique de développement de malwares Windows : hachage d'API, chargement latéral de DLL, exécution de shellcode, manipulation de PE, hébergement de payloads et laboratoires de livraison.
Desktop development with C++ lors de l'installationDe plus (optionnel), pour une expérience de rétro-ingénierie plus complète, configurez les symboles :
setx _NT_SYMBOL_PATH c:\Symbols;srv*c:\Symbols*https://msdl.microsoft.com/download/symbols
mkdir \symbols
Ouvrez PMD.sln dans Visual Studio.
Sélectionnez le projet setup et assurez-vous de pouvoir :
a. Compiler le projet
b. Voir l'instruction de débogage dans DebugView++.
Mettez à jour les options du compilateur et de l'éditeur de liens du projet template pour manipuler les entrées de l'IAT et d'autres propriétés PE.
a. Familiarisez-vous avec la résolution dynamique d'API et la documentation MSDN.
b. Y a-t-il d'autres propriétés qui ressortent ? Si vous exécutez Strings.exe sur le binaire, des chaînes ressortent-elles ?
c. Pouvez-vous les supprimer/mettre à jour ?
Utilisez l'outil de votre choix pour réaliser l'exercice (par exemple dumpbin/PE Bear). Un wrapper autour de pefile est fourni dans scripts\props.py (assurez-vous d'installer les dépendances).
Téléchargez quelques échantillons de malwares depuis VXUG
a. Quelles sont les principales différences entre les exécutables bénins et malveillants ?
b. Quelles sont les principales différences entre notre binaire et les exécutables bénins ?
L'algorithme de hachage d'API actuellement utilisé est fnv1a.
solution et appelez MessageBoxA en utilisant le framework de hachage d'API.Téléchargez Cisco Webex (https://www.webex.com/downloads.html)
Trouvez CiscoCollabHost et voyez quelles DLL sont chargées
Ouvrez CiscoCollabHost dans Ghidra et identifiez différentes façons d'obtenir l'exécution de code via le sideloading
Modifiez le dll_template pour effectuer un sideload de votre binaire cible. Vérifiez que vous pouvez voir la chaîne de débogage dans DebugView++.
Mettez à jour les LastWriteTime et CreationTime de dll_template.dll pour correspondre à la DLL cible.
Compilez et exécutez le projet utilitaire.
a. En outre, envisagez de l'exécuter sur votre système hôte.
Copiez la DLL identifiée dans le répertoire x64/{Debug,Release} et mettez à jour le code du chargeur.
Mettez à jour execute_sc pour exécuter votre shellcode avec une fonction différente via le framework de hachage d'API.
Inscrivez-vous auprès d'un fournisseur de stockage cloud (par exemple AWS/CloudFlare)
Empaquetez votre payload et téléversez-le
a. En outre, étudiez les moyens de limiter/auditer l'accès au téléchargement
Prenez un instantané de votre VM
Revenez à la VM de base et rejouez votre scénario de "livraison" complet
.github\workflows\build.yml pour effectuer des traitements pré/post supplémentaires de votre choix afin de gagner du temps. Voici quelques idées :
props.py et validez/incluez la sortieLastWriteTime et CreationTime pour correspondre à une cible