injection de code dans fichier PE - C - Programmation
Marsh Posté le 26-01-2007 à 22:27:12
Tu fais ca en quel langage ? L'assembleur me parait obligatoire pour ce genre de manip, des que tu veux controler un peu le code genere ...
Marsh Posté le 26-01-2007 à 22:30:09
c'est du c, je pourrais peut-etre utiliser de l'assembleur in line, mais je suis pas sur : /
Marsh Posté le 26-01-2007 à 22:38:12
Avec de l'assembleur inline, tu seras sur de ce que tu injectes, sauf bien sur si tu appelles des fonctions externes dans ce code. Reste a reperer dans ton module ou se trouve ce que tu injectes.
Si tu veux appeler MessageBox, je te souhaite bien du plaisir, car il te faut reperer dans la table d'importation du PE l'entree qui correspond a MessageBox, et la rajouter au cas ou elle n'existe pas .... Une autre alternative consiste a reperer l'adresse ou reside user32 et te farcir la table d'exportation pour trouver MessageBox ...
Marsh Posté le 26-01-2007 à 23:03:04
jme suis deja amuse a parser la table d'exportation
mon probleme (pour le moment ) c'est juste de savoir ou son stockees mes datas pour la message box
Marsh Posté le 26-01-2007 à 23:27:17
Ouais, ben moi je dis : assembleur. Y'a un truc assez simple qui consiste a faire un call relatif vers l'instruction suivante qui est un pop. Ainsi tu reperes ou tu es dans la memoire. Apres, si tu sais par rapport a ce call ou se trouvent tes donnees, c'est gagne.
Marsh Posté le 26-01-2007 à 23:38:00
Pour répondre simplement, une technique couramment employée est de calculer un delta comme suit :
|
C'est ce qu'on appelle un code relogeable. Le delta se trouvant dans EBP, il suffit de l'ajouter à toutes tes adresses.
Edit : Comme le dit Ace17
Sinon, une méthode plus simple pour injecter du code sans se prendre la tête, est d'utiliser VirtualAllocEx pour créer une section virtuelle dans le processus distant puis d'écrire dedans avec WriteProcessMemory et enfin d'exécuter la fonction avec CreateRemoteThread. La fonction injectée étant simplement un LoadLibraryA qui va charger ta dll. Ainsi, tu n'as qu'à créer un petit bout de code relogeable en asm qui va récupérer l'adresse de LoadLibraryA et l'appeler en passant en paramètre le chemin de ta dll et tout le code que tu veux en C dans une dll.
Marsh Posté le 26-01-2007 à 23:44:12
bon, ben jvais chercher du cote de l'asm je crois...
merci a tous
Marsh Posté le 27-01-2007 à 00:09:23
y'a un excellent article ici : http://www.codeproject.com/system/ [...] sembler3_2
on devrait donner une médaille au créateur de CodeProject tellement ce site est précieux et une mine inépuisable de culture de programmation
Marsh Posté le 26-01-2007 à 21:34:01
Salut a tous, je cherche a injecter du code dans un fichier executable au format pe (sous xp 32bits)
le code ouvre simplement une message box qui affiche "salut".
le probleme est qu'une fois compile, les addresses utilises dans le code que je veux injecter ne sont pas valide dans le fichier cible
je voudrais donc (si cela est possible) creer un label qui me permettrait d'utiliser des addresses relatives et donc d'avoir des pointeurs valides
(j'ai teste avec goto, mais ca ne semble pas fonctionner)
voila voila
Message édité par _ky_ le 26-01-2007 à 21:36:20