Trouver une ressource (Nouvelle version du moteur, plus rapide & pertinent, essayez le !)
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
INJECTION DE DLL DANS UN PROCESSUS
Information sur la source
Description
Bonjour/Bonsoir, Ce petit programme montre comment injecter une dll dans un processus. Ce n'est pas très original mais bon... Vous trouverez des explications ici : http://lilxam.blogspot.com/2008/01/injection-de-dll-dans-un-processus.html Have Fun ;) lilxam.
Source
- #include <iostream>
- #include <windows.h>
- #include <tlhelp32.h>
-
- using namespace std;
-
- void SetDebugPrivilege();
- DWORD GetPIDByProcess(char argv[]);
- int DllInject(char dll[], char process[]);
-
- //Privilege DEBUG
- void SetDebugPrivilege()
- {
- TOKEN_PRIVILEGES privilege;
- LUID Luid;
- HANDLE handle1;
- HANDLE handle2;
- handle1 = OpenProcess(PROCESS_ALL_ACCESS, FALSE, GetCurrentProcessId());
- OpenProcessToken(handle1, TOKEN_ALL_ACCESS, &handle2);
- LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &Luid);
- privilege.PrivilegeCount = 1;
- privilege.Privileges[0].Luid = Luid;
- privilege.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
- AdjustTokenPrivileges(handle2, FALSE, &privilege, sizeof(privilege), NULL, NULL);
- CloseHandle(handle2);
- CloseHandle(handle1);
- }
- //GetPIDByProcess
- DWORD GetPIDByProcess(char argv[])
- {
- HANDLE hSnapShot;
- PROCESSENTRY32 uProcess;
-
- hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
- uProcess.dwSize = (DWORD) sizeof(PROCESSENTRY32);
-
- int p = 0;
- DWORD PID;
-
- p = Process32First(hSnapShot, &uProcess);
-
- while(p)
- {
- if(strstr(uProcess.szExeFile, argv))
- {
- PID = uProcess.th32ProcessID;
- break;
- }
- p = Process32Next(hSnapShot, &uProcess);
- }
- CloseHandle(hSnapShot);
- return PID;
- }
-
- int DllInject(char dll[], char process[])
- {
- SetDebugPrivilege();
-
- // Etape 1 // On récupère l'adresse de LoadLibraryA() dans kernel32
- HMODULE module;
- module = GetModuleHandle("kernel32.dll");
-
- LPTHREAD_START_ROUTINE code;
- code = (LPTHREAD_START_ROUTINE)GetProcAddress(module, "LoadLibraryW");
- printf("\nAdresse de LoadLibrary() : %x", code);
-
- CloseHandle(module);
-
- // Etape2 // On récupère l'id de notre processus et on l'ouvre
- DWORD PID;
- PID = GetPIDByProcess(process);
- printf("\nProcess ID : %ld",PID);
- HANDLE hProcess = NULL;
- hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);
- if(hProcess == NULL)
- {
- printf("\n\n[-]Echec lors de l'ouverture du processus\n----Erreur : %x ", GetLastError());
- return 0;
- }
- else
- printf("\n\n[+]Processus ouvert : %x",hProcess);
-
-
- // Etape 3 // On alloue un espace de mémoire dans le processus
- char *data = NULL;
- data = (char*) VirtualAllocEx(hProcess, 0, strlen(dll)+1, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
- if(data == NULL)
- {
- printf("\n[-]Echec de l'allocation de la memoire\n----Erreur : %x ",GetLastError());
- return 0;
- }
- else
- printf("\n[+]Mémoire allouee : ");
- printf("%x", data);
-
- // Etape 4 // On écrit le nom de notre dll dans l'espace alloué
- DWORD nboctets;
- WriteProcessMemory(hProcess, data, dll, strlen(dll)+1, &nboctets);
-
- if(strlen(dll)+1 != nboctets)
- {
- printf("\n[-]Echec de l'ecriture dans le processus\n----Erreur : %x ", GetLastError());
- return 0;
- }
- else
- printf("\n[+]Ecriture dans le processus reussie\n----Avec %ld octets ecrits", nboctets);
-
- // Etape 5 // On créé un thread dans le processus qui executera LoadLibaryA() avec le nom de la dll comme parametre
- DWORD dwThreadID = 0;
- HANDLE hThread = NULL;
- hThread = CreateRemoteThread(hProcess, NULL, 0, code, data, 0, &dwThreadID);
- if(hThread == NULL)
- {
- printf("\n[-]Echec lors de l'execution des donnees\n----Erreur : %x ", GetLastError());
- return 0;
- }
- else
- printf("\n[+]Donnees executees");
- CloseHandle(hProcess);
- CloseHandle(hThread);
-
- return 1;
-
-
- }
-
- int main()
- {
- SetDebugPrivilege();
-
- char process[100];
- char dll[100];
-
- cout<<"Process : ";
- cin>>process;
-
- cout<<"\n\nDll : ";
- cin>>dll;
-
- DllInject(dll, process);
-
- system("pause");
- return 0;
- }
-
-
#include <iostream>
#include <windows.h>
#include <tlhelp32.h>
using namespace std;
void SetDebugPrivilege();
DWORD GetPIDByProcess(char argv[]);
int DllInject(char dll[], char process[]);
//Privilege DEBUG
void SetDebugPrivilege()
{
TOKEN_PRIVILEGES privilege;
LUID Luid;
HANDLE handle1;
HANDLE handle2;
handle1 = OpenProcess(PROCESS_ALL_ACCESS, FALSE, GetCurrentProcessId());
OpenProcessToken(handle1, TOKEN_ALL_ACCESS, &handle2);
LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &Luid);
privilege.PrivilegeCount = 1;
privilege.Privileges[0].Luid = Luid;
privilege.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(handle2, FALSE, &privilege, sizeof(privilege), NULL, NULL);
CloseHandle(handle2);
CloseHandle(handle1);
}
//GetPIDByProcess
DWORD GetPIDByProcess(char argv[])
{
HANDLE hSnapShot;
PROCESSENTRY32 uProcess;
hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
uProcess.dwSize = (DWORD) sizeof(PROCESSENTRY32);
int p = 0;
DWORD PID;
p = Process32First(hSnapShot, &uProcess);
while(p)
{
if(strstr(uProcess.szExeFile, argv))
{
PID = uProcess.th32ProcessID;
break;
}
p = Process32Next(hSnapShot, &uProcess);
}
CloseHandle(hSnapShot);
return PID;
}
int DllInject(char dll[], char process[])
{
SetDebugPrivilege();
// Etape 1 // On récupère l'adresse de LoadLibraryA() dans kernel32
HMODULE module;
module = GetModuleHandle("kernel32.dll");
LPTHREAD_START_ROUTINE code;
code = (LPTHREAD_START_ROUTINE)GetProcAddress(module, "LoadLibraryW");
printf("\nAdresse de LoadLibrary() : %x", code);
CloseHandle(module);
// Etape2 // On récupère l'id de notre processus et on l'ouvre
DWORD PID;
PID = GetPIDByProcess(process);
printf("\nProcess ID : %ld",PID);
HANDLE hProcess = NULL;
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);
if(hProcess == NULL)
{
printf("\n\n[-]Echec lors de l'ouverture du processus\n----Erreur : %x ", GetLastError());
return 0;
}
else
printf("\n\n[+]Processus ouvert : %x",hProcess);
// Etape 3 // On alloue un espace de mémoire dans le processus
char *data = NULL;
data = (char*) VirtualAllocEx(hProcess, 0, strlen(dll)+1, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
if(data == NULL)
{
printf("\n[-]Echec de l'allocation de la memoire\n----Erreur : %x ",GetLastError());
return 0;
}
else
printf("\n[+]Mémoire allouee : ");
printf("%x", data);
// Etape 4 // On écrit le nom de notre dll dans l'espace alloué
DWORD nboctets;
WriteProcessMemory(hProcess, data, dll, strlen(dll)+1, &nboctets);
if(strlen(dll)+1 != nboctets)
{
printf("\n[-]Echec de l'ecriture dans le processus\n----Erreur : %x ", GetLastError());
return 0;
}
else
printf("\n[+]Ecriture dans le processus reussie\n----Avec %ld octets ecrits", nboctets);
// Etape 5 // On créé un thread dans le processus qui executera LoadLibaryA() avec le nom de la dll comme parametre
DWORD dwThreadID = 0;
HANDLE hThread = NULL;
hThread = CreateRemoteThread(hProcess, NULL, 0, code, data, 0, &dwThreadID);
if(hThread == NULL)
{
printf("\n[-]Echec lors de l'execution des donnees\n----Erreur : %x ", GetLastError());
return 0;
}
else
printf("\n[+]Donnees executees");
CloseHandle(hProcess);
CloseHandle(hThread);
return 1;
}
int main()
{
SetDebugPrivilege();
char process[100];
char dll[100];
cout<<"Process : ";
cin>>process;
cout<<"\n\nDll : ";
cin>>dll;
DllInject(dll, process);
system("pause");
return 0;
}
Fichier Zip
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
Télécharger le zip
Historique
- 20 janvier 2008 19:05:55 :
- Correction des fuites de mémoire.
- 20 janvier 2008 19:34:53 :
- Correction d'une erreur.
- 08 février 2008 18:49:17 :
- Correction d'une erreur
Sources de la même categorie
Commentaires
Discussions en rapport avec ce code source
|
CalendriCode
| | | L | M | M | J | V | S | D |
| | 1 | 2 | 3 | 4 | 5 | 6 |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 | | | |
|
Téléchargements
Logiciels à télécharger sur le même thème :
|