Explication du code C

Quelqu’un pourrait-il m’aider à expliquer ces lignes de code?

char code[] = "paste your shellcode here"; int main(int argc, char **argv) { int (*func)(); func = (int (*)()) code; (int)(*func)(); } 

Le code que vous avez ici est un exemple de la façon de créer un pointeur de fonction sur une tranche de données arbitraire, puis de l’appeler.

Dans un sens très simple, nous allouons un tableau d’octets (char []) dans lequel la charge utile du shellcode binary est collée, généralement sous forme de valeurs hexadécimales masquées.

Cette ligne, int (*func)(); , déclare un pointeur de fonction qui retournera un entier. Ceci est typique car la plupart du code aura une sorte de code de sortie basé sur un nombre entier retourné dans EAX.

Cette ligne, func = (int (*)()) code; convertit le code de tableau d’octets en un pointeur de fonction et l’assigne à ‘func’, le pointeur de fonction défini précédemment.

Cette ligne (int)(*func)(); appelle en fait le shellcode, en transférant l’exécution vers le premier emplacement mémoire du tableau d’octets.

Ce code est en réalité extrêmement utile. Vous ne vous attendriez pas à le trouver utilisé pour exploiter un système; Au lieu de cela, ce code est utilisé pour tester, déboguer et expérimenter avec un shellcode pendant le développement. En l’utilisant, vous pouvez simplement coller le shellcode que vous essayez de tester, puis l’exécuter. Cela vous permet de garder votre shellcode très simple, en excluant toutes les exigences typiques d’un exécutable autonome complet, tout en vous permettant de le tester sans qu’il soit nécessaire d’identifier une vulnérabilité à exploiter. De cette façon, vous pouvez savoir si le code fonctionne sans être distrait par les divers problèmes qui surviennent lorsque vous essayez d’exploiter le code réel.

Avez-vous essayé Google pour “coller votre shellcode ici” ? Le résultat renvoyé en première seconde (maintenant que cette question est la première LOL) est la partie 9 du didacticiel Exploit d’écriture de Corelan Team: Introduction au shell Win32, dans laquelle tout est expliqué:

shellcode laboratoire

En un mot, il s’agit simplement d’un petit utilitaire C destiné à tester le shellcode qui sera utilisé ultérieurement dans les parties suivantes du didacticiel dans le même but. Le rest est expliqué dans le tutoriel.