2010-11-23 8 views
0

J'utilise C# pour lire un fichier exe et injecter un code pour afficher une boîte de message lorsque l'exe fonctionne de sorte que le code que je utilise est le suivant:Convertir automatiquement l'adresse virtuelle en adresse mémoire?

6A 00    //push 0 
68 OXxxxx   //push Address of Message Title 
68 OXxxxx   //push Address of Message Body 
6A 00    //push 0 
FF 15 OXxxxx  //Call Address of User32.MessageBoxA 
E9 OXxxxx   // jmp to old entry point 

toutes les adresses que je utilise sont des adresses virtuelles, mais le nouvel exe ne peut pas fonctionner, je pense que les adresses devraient traduire en adresse mémoire (par Windows Loader), mais comment je peux le faire ??.

merci

Répondre

2

Les adresses virtuelles sont des adresses de mémoire.
Mais si .exe a une table de relocalisation, elle peut être déplacée vers une nouvelle adresse de base, et si vos instructions push et call n'ont pas d'entrées dans la table de relocalisation, elles seront brisées.

Aussi, je ne suis pas sûr que votre code est correct, car je ne vois pas où sont les chaînes utilisées dans votre code.

Pour assurer cette question est entrées manquantes dans le tableau de réinstallation, essayez la position indépendante code suivant:

6A 00   // push 0 
6A 00   // push 0 
E8 04 00 00 00 // call $+5+4 
31 32 33 00 // '123', 0 
6A 00   // push 0 
68 XX XX XX XX // push user32.MessageBoxA address, it's the same in all processes 
C3    // retn 
E9 XX XX XX XX // jmp OEP 

Upd: comme ruslik noté, si nous modifions un fichier, nous ne savons pas user32.MessageBoxA adresse, nous devrions donc le trouver d'une autre manière.

Si nous connaissons l'adresse de son entrée IAT, nous remplaçons FF 15 (__imp_MessageBoxA) à la base de quelque chose d'indépendant:

 E8 00 00 00 00 // call base: 
base: 
    58    // pop eax 
    05 XX XX XX XX // add eax, __imp_MessageBoxA - base 
    FF 10   // call dword ptr [eax] 
+0

2 questions: 1 - ce qui est (E8 04 00 00 00 // appelez $ + 5 + 2 31 32 33 00 // '123', 0 6A 00 // push 0) 2 - comment ajouter des entrées pour les instructions push et call dans la table de relocalisation – Radi

+0

@radi 1. - c'est un code d'assemblage. Vous devriez l'apprendre, avant d'essayer d'infecter PE. 2. - lire les spécifications de format PE. – Abyx

+0

Petite correction: Le 'call' n'a pas besoin d'une entrée de relocalisation, ce qu'il doit faire est se référer à la table d'importation. –

Questions connexes