begin process at 2010 03 20 08:12:36
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Application

 > INJECTION DE DLL DANS UN PROCESSUS

INJECTION DE DLL DANS UN PROCESSUS


 Information sur la source

Note :
Aucune note
Catégorie :Application Classé sous :Injection, Dll, Processus, WriteProcessMemory, Thread Niveau :Initié Date de création :13/01/2008 Date de mise à jour :08/02/2008 18:49:17 Vu / téléchargé :6 317 / 216

Auteur : lilxam7

Ecrire un message privé
Site perso
Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note

 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-dl l-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

Les Membres Club peuvent 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 du même auteur

Source avec une capture STACK WATCHER
Source avec Zip Source avec une capture SNIFFER TCP AVEC LES RAW SOCKETS
PROCESS DUMPER
PE ANALYSER

 Sources de la même categorie

CONSTRUCTION D'UNE AUTOMATE FINIS DETERMINISTE par skible
COMPILATEUR BF VERS BF-BYTECODE par Davy974
GESTIONNAIRE DE BIBLIOTHEQUE par eishtein
FICHIER ALBUM MUSICAL par imenouuuuuuuuuche
LOUISDU81 HTTP EDITOR par louisdu81

 Sources en rapport avec celle ci

Source avec Zip GÉNÉRE UN TABLEAU DE CARACTÉRE AU FORMAT C CONTENANT LE BYTE... par kertimanoff
Source avec Zip DLLMAKER V2.0 par Altaris
Source avec Zip Source avec une capture [C/WIN32] INJECTION DE DLL 2 MÉTHODES (REMOTETHREAD PROPRE &... par deck_bsd
Source avec Zip Source avec une capture ALGO DE PATHFINDING AVEC PETIT JEU par kts_system
Source avec Zip Source avec une capture INJECTION DE DLL DANS N'IMPORTE QUEL PROCESS par krust

Commentaires et avis

Commentaire de BruNews le 13/01/2008 23:18:13 administrateur CS

C'est pour un concours de fuites mémoire ?

CreateToolhelp32Snapshot, si réussit CloseHandle.
OpenProcess et CreateRemoteThread idem.
VirtualAllocEx => VirtualFreeEx.

Commentaire de lilxam7 le 20/01/2008 19:06:58

J'ai corrigé ça.

Commentaire de BruNews le 20/01/2008 19:28:38 administrateur CS

Oui je vois....

return 1;
tout ce qui suit est supprimé par le compilo.

Commentaire de lilxam7 le 20/01/2008 19:36:54

Voilà, désolé j'avais voulu aller un peu trop vite.

Commentaire de deck_bsd le 07/02/2008 19:38:22

Yop,


Es-tu sur de ceci ?

nbdebits *= 8;
    if(strlen(dll)+1 != nbdebits)

Pour moi nbdebits sera tjrs différent car WriteProcessMemory renvoie le nombre de Bytes écrit et non de bit. 1 Bytes = 8 bits, donc pas besoin de faire * 8 .

Commentaire de lilxam7 le 08/02/2008 18:50:15

Salut, tu as tout à fait raison, je corrige ça tout de suite.

Commentaire de ironzorg le 21/02/2008 17:39:43

C'est possible de faire de l'injection de DLL en POSIX ? C4est a dire pas avec les API Win32 quoi...

Commentaire de Bleys le 10/01/2009 19:13:32

Bonsoir à tous,
Désole de faire remonter un ci vieux topic, mais en voulant réutiliser la méthode SetDebugPrivilege() j'ai une erreur lors de l'exécution de CloseHandle(handle2) ...
L'erreur est : invalid handle was specified

Une idée ?


Merci d'avance

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Creer un hook dans une dll [ par zinotron ] Je n'ai pas tout compris moi ...j'ai fait une rechercher dans les systeme de creation de hook dans l'API win32, et je compris cela : RIEN.enfin si j'a Thread dans une dll [ par angel ] Est-il possible de créer un thread dans une dll ? PATCH DLL NT/9X [ par ouranos ] Bonjour à tous,J'ai réalisé un programme fonctionnant sous win NT/XP/2000 qui détourne des APIwindows afin de pouvoir contrôler le système (limitation 1 dll - 2 exe (3 possibilités ;o) ) [ par sena ] Bonjour,voila j'ai construit une dll.Au chargement de cette dll un thread est lancer pour pouvoir effectuer une réception UDP en permanence.Mon pb est tutos injection de DLL ? [ par XenonGP ] Bonjour tout le monde, j'aimerais avoir quelques liens vers des tutos sur l'injection de DLL(en anglais ou en fran&#231;ais). Ce qui m'int&#233;resse, HOOKING [ par Fuckly94 ] Salut tout le monde,c'&#233;tait juste pour savoir un truk tout b&#233;te!!je veux faire un HOOK sur le niveau SYSTEM!!il me faut donc une DLL <B Injection dll et systray ? [ par mayti ] Hello, Voil&#224; j'injecte une dll dans un exe et je voudrais afficher une bulle dans le systray (balloon tip) mais en utilisant l'icon de cet exe. detection d'un messageBox et fermeture automatique [ par elroulianito ] J'aimerai utiliser une fonction issue d'une dll. Le probl&#232;me est qu'&#224; l'execution de celle-ci une fen&#234;tre de type messagebox apparait m Injection de Richter ? [ par albert0 ] Bonjour, Voila, j'ai lut le chapitre 22 du bouc. de Richter, qui parle des Injections (methode avec CreateRemoteThread) Comme d'hab, j'aime bien tes Plantage CreateRemoteThread [ par NeoUmbrella ] Bonjour, j'ai un soucis avec l'API CreateRemoteThread. Je m'en sert pour décharger de force une dll d'un processus. Pour se faire, j'injecte une fonct


Nos sponsors


Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,998 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales