Injection de DLL avec CreateRemoteThread

Si vous jetez un oeil à la suite de code de travail d'une simple injection de DLL:

  //Open the target process with read , write and execute priviledges
   Process = OpenProcess(PROCESS_CREATE_THREAD|PROCESS_QUERY_INFORMATION|PROCESS_VM_READ|PROCESS_VM_WRITE|PROCESS_VM_OPERATION, FALSE, ID); 

   //Get the address of LoadLibraryA
   LoadLibrary = (LPVOID)GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA"); 

   //Allocate space in the process for our DLL 
   Memory = (LPVOID)VirtualAllocEx(Process, NULL, strlen(dll)+1, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); 

   //Write the string name of our DLL in the memory allocated 
   WriteProcessMemory(Process, (LPVOID)Memory, dll, strlen(dll)+1, NULL); 

   //Load our DLL 
   CreateRemoteThread(Process, NULL, NULL, (LPTHREAD_START_ROUTINE)LoadLibrary, (LPVOID)Memory, NULL, NULL); 

   //Let the program regain control of itself
   CloseHandle(Process); 

La chose qui me confond, c'est que GetProcAddress renvoie la LoadLibraryA fucntion adresse de le processus actuel, comment pouvez-vous passer en tant que paramètre à CreateRemoteThread et attendre le processus cible pour le faire fonctionner?

Parce que CreateRemoteThread prend LoadLibrary en tant que paramètre et l'appelle. Depuis il prend également Memory comme un paramètre, le paramètre passe à LoadLibrary.
Qui ne peuvent toujours pas expliquer pourquoi vous avez besoin de la LoadLibrary fonction de l'adresse de le processus actuel. Le Memory est l'adresse pour le nom de la dll, Pourquoi ne pas simplement passer LoadLibrary comme un string tout simplement si vous voulez l'appeler?
Parce que le décalage est exactement la même dans les autres processus. Si l'autre est x32 et de votre processus x32, le décalage de kernel32 est le même. Si votre processus est de 64 bits et l'autre processus est de 64 bits, le décalage est encore la même chose. Si l'autre est x32 et le vôtre est de 64 bits ou vice-versa, le décalage sera différente et l'injection sera un échec. Je crois User32.dll est toujours aussi chargé en même décalage. Semblable à Kernel32.dll

OriginalL'auteur James King | 2014-03-30