RelocAlloc : Utiliser la section .reloc pour remplacer les appels d'allocation typiques
Explication du code :
- Nous localisons d'abord les adresses de toutes les dll mappées dans notre processus.
- Nous construisons ensuite un tableau de structs que nous remplissons avec des données, c'est la fonction Initialize().
- Maintenant que nous avons un tableau complet, l'étape suivante consiste à rechercher la bonne adresse.
- appeler GetSuitableAddress(SIZE_T ShellcodeSize) fera le travail ; c'est-à-dire trouver la bonne code cave (emplacement vide en mémoire, correspondant à la taille du shellcode)
- si elle est trouvée, elle sera retournée.
- pour l'utiliser, nous devons ajuster la protection mémoire pour qu'elle soit accessible en écriture/exécution ... (le poc est directement rwx)
Démo :
img1
img2
Remarque : cela ne fonctionne qu'avec de petits shellcodes, car cela dépend des dll mappées ; plus la section .reloc est grande, plus les chances d'obtenir une adresse valide sont élevées. De plus, cela n'est testé que sur une machine x64, mais cela devrait fonctionner pour x86 (je pense :p)
# RESTEZ À L'ÉCOUTE POUR PLUS
120064592-a5c83480-c075-11eb-89c1-78732ecaf8d3