Pour répondre simplement, une technique couramment employée est de calculer un delta comme suit :
call Delta
Delta:
pop ebp ; ou n'importe quel registre en fait
sub ebp, Delta
...
push 0
lea eax, [ebp+Titre]
push eax
lea eax, [ebp+Texte]
push eax
push 0
call MessageBoxA
|
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.
Message édité par anordem le 26-01-2007 à 23:39:02