hacktricks/reversing/reversing-tools/README.md
2023-06-03 13:10:46 +00:00

15 KiB

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Décompilateur Wasm / Compilateur Wat

En ligne :

Logiciel :

Décompilateur .Net

https://github.com/icsharpcode/ILSpy
Plugin ILSpy pour Visual Studio Code : Vous pouvez l'avoir dans n'importe quel système d'exploitation vous pouvez l'installer directement depuis VSCode, pas besoin de télécharger le git. Cliquez sur **Extensions** et **recherchez ILSpy**.
Si vous avez besoin de décompiler, modifier et recompiler à nouveau, vous pouvez utiliser : https://github.com/0xd4d/dnSpy/releases **Clic droit -> Modifier la méthode** pour changer quelque chose à l'intérieur d'une fonction.
Vous pouvez également essayer https://www.jetbrains.com/es-es/decompiler/

Journalisation DNSpy

Pour faire en sorte que DNSpy enregistre certaines informations dans un fichier, vous pouvez utiliser ces lignes de code .Net :

using System.IO;
path = "C:\\inetpub\\temp\\MyTest2.txt";
File.AppendAllText(path, "Password: " + password + "\n");

Débogage avec DNSpy

Pour déboguer du code en utilisant DNSpy, vous devez :

Tout d'abord, changer les attributs d'Assembly liés au débogage :

De :

[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]

Je suis prêt à vous aider. Que puis-je traduire pour vous ?

[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default |
DebuggableAttribute.DebuggingModes.DisableOptimizations |
DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints |
DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]

Et cliquez sur compiler :

Ensuite, enregistrez le nouveau fichier sur Fichier >> Enregistrer le module... :

Ceci est nécessaire car si vous ne le faites pas, à l'exécution plusieurs optimisations seront appliquées au code et il pourrait être possible qu'en déboguant un point d'arrêt ne soit jamais atteint ou que certaines variables n'existent pas.

Ensuite, si votre application .Net est exécutée par IIS, vous pouvez la redémarrer avec :

iisreset /noforce

Ensuite, pour commencer le débogage, vous devez fermer tous les fichiers ouverts et dans l'onglet Débogage, sélectionnez Attacher au processus... :

Ensuite, sélectionnez w3wp.exe pour vous connecter au serveur IIS et cliquez sur Joindre :

Maintenant que nous déboguons le processus, il est temps de l'arrêter et de charger tous les modules. Tout d'abord, cliquez sur Débogage >> Interrompre tout puis cliquez sur Débogage >> Fenêtres >> Modules :

Cliquez sur n'importe quel module dans Modules et sélectionnez Ouvrir tous les modules :

Cliquez avec le bouton droit sur n'importe quel module dans Explorateur d'assemblage et cliquez sur Trier les assemblages :

Décompilateur Java

https://github.com/skylot/jadx
https://github.com/java-decompiler/jd-gui/releases

Débogage des DLL

Utilisation d'IDA

  • Chargez rundll32 64 bits dans C:\Windows\System32\rundll32.exe et 32 bits dans C:\Windows\SysWOW64\rundll32.exe
  • Sélectionnez le débogueur Windbg
  • Sélectionnez "Suspendre lors du chargement/déchargement de la bibliothèque"

  • Configurez les paramètres de l'exécution en mettant le chemin d'accès à la DLL et la fonction que vous voulez appeler :

Ensuite, lorsque vous commencez le débogage, l'exécution s'arrêtera lorsque chaque DLL sera chargée, puis, lorsque rundll32 chargera votre DLL, l'exécution s'arrêtera.

Mais comment pouvez-vous accéder au code de la DLL qui a été chargée ? En utilisant cette méthode, je ne sais pas comment.

Utilisation de x64dbg/x32dbg

  • Chargez rundll32 64 bits dans C:\Windows\System32\rundll32.exe et 32 bits dans C:\Windows\SysWOW64\rundll32.exe
  • Modifiez la ligne de commande _Fichier --> Modifier la ligne de commande_ et définissez le chemin de la DLL et la fonction que vous voulez appeler, par exemple : "C:\Windows\SysWOW64\rundll32.exe" "Z:\shared\Cybercamp\rev2\14.ridii_2.dll",DLLMain
  • Changez Options --> Paramètres et sélectionnez "Entrée DLL".
  • Ensuite, démarrez l'exécution, le débogueur s'arrêtera à chaque dll principale, à un moment donné, vous vous arrêterez dans l'entrée de la DLL de votre DLL. À partir de là, recherchez simplement les points où vous voulez mettre un point d'arrêt.

Notez que lorsque l'exécution est arrêtée pour une raison quelconque dans win64dbg, vous pouvez voir dans quel code vous êtes en regardant en haut de la fenêtre win64dbg :

Ensuite, en regardant cela, vous pouvez voir quand l'exécution a été arrêtée dans la DLL que vous voulez déboguer.

ARM & MIPS

{% embed url="https://github.com/nongiach/arm_now" %}

Shellcodes

Débogage d'un shellcode avec blobrunner

Blobrunner va allouer le shellcode dans un espace de mémoire, vous indiquer l'adresse mémoire où le shellcode a été alloué et arrêter l'exécution.
Ensuite, vous devez attacher un débogueur Ida ou x64dbg au processus et mettre un point d'arrêt à l'adresse mémoire indiquée et reprendre l'exécution. De cette façon, vous déboguez le shellcode.

La page des versions publiées contient des fichiers zip contenant les versions compilées : https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5
Vous pouvez trouver une version légèrement modifiée de Blobrunner dans le lien suivant. Pour la compiler, il suffit de créer un projet C/C++ dans Visual Studio Code, de copier et coller le code et de le compiler.

{% page-ref page="blobrunner.md" %}

Débogage d'un shellcode avec jmp2it

jmp2it est très similaire à blobrunner. Il va allouer le shellcode dans un espace de mémoire et démarrer une boucle éternelle. Vous devez ensuite attacher le débogueur au processus, démarrer, attendre 2 à 5 secondes et appuyer sur stop et vous vous retrouverez dans la boucle éternelle. Sautez à l'instruction suivante de la boucle éternelle car ce sera un appel au shellcode, et enfin vous vous retrouverez à exécuter le shellcode.

Vous pouvez télécharger une version compilée de jmp2it dans la page des versions.

Débogage de shellcode à l'aide de Cutter

Cutter est l'interface graphique de radare. Avec Cutter, vous pouvez émuler le shellcode et l'inspecter dynamiquement.

Notez que Cutter vous permet d'ouvrir un fichier et un shellcode. Dans mon cas, lorsque j'ai ouvert le shellcode en tant que fichier, il l'a décompilé correctement, mais lorsque je l'ai ouvert en tant que shellcode, il ne l'a pas fait :

Pour démarrer l'émulation à l'endroit où vous le souhaitez, définissez un point d'arrêt là-bas et apparemment Cutter démarrera automatiquement l'émulation à partir de là :

Vous pouvez voir la pile, par exemple, dans un dump hexadécimal :

Désobfuscation de shellcode et obtention des fonctions exécutées

Vous devriez essayer scdbg.
Il vous indiquera les fonctions que le shellcode utilise et si le shellcode se décode lui-même en mémoire.

scdbg.exe -f shellcode # Get info
scdbg.exe -f shellcode -r #show analysis report at end of run
scdbg.exe -f shellcode -i -r #enable interactive hooks (file and network) and show analysis report at end of run
scdbg.exe -f shellcode -d #Dump decoded shellcode
scdbg.exe -f shellcode /findsc #Find offset where starts
scdbg.exe -f shellcode /foff 0x0000004D #Start the executing in that offset

scDbg dispose également d'un lanceur graphique où vous pouvez sélectionner les options que vous souhaitez et exécuter le shellcode.

L'option Create Dump permettra de déverser le shellcode final si des modifications sont apportées au shellcode dynamiquement en mémoire utile pour télécharger le shellcode décodé. L'offset de départ peut être utile pour démarrer le shellcode à un offset spécifique. L'option Debug Shell est utile pour déboguer le shellcode en utilisant le terminal scDbg cependant, je trouve que toutes les options expliquées précédemment sont meilleures pour cette question car vous pourrez utiliser Ida ou x64dbg.

Désassemblage à l'aide de CyberChef

Téléchargez votre fichier shellcode en tant qu'entrée et utilisez la recette suivante pour le décompiler: https://gchq.github.io/CyberChef/#recipe=To_Hex('Space',0)Disassemble_x86('32','Full%20x86%20architecture',16,0,true,true)

Movfuscator

Cet obscurcisseur change toutes les instructions pour movoui, vraiment cool. Il utilise également des interruptions pour changer les flux d'exécution. Pour plus d'informations sur son fonctionnement:

Si vous avez de la chance, demovfuscator déofusquera le binaire. Il a plusieurs dépendances.

apt-get install libcapstone-dev
apt-get install libz3-dev

Et installez keystone `apt-get install cmake; mkdir build; cd build; ../make-share.sh; make install`

Si vous jouez à un CTF, cette solution de contournement pour trouver le flag pourrait être très utile: https://dustri.org/b/defeating-the-recons-movfuscator-crackme.html

Delphi

Pour les binaires compilés en Delphi, vous pouvez utiliser https://github.com/crypto2011/IDR

Cours

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥