begin process at 2012 05 29 03:46:37
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

System

 > 

injection dll qui fait planter le processus cible


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

injection dll qui fait planter le processus cible

mercredi 26 mai 2010 à 11:14:08 | injection dll qui fait planter le processus cible

wisar

Salut

Alors j'ai récupérer un bout de code pour faire une injection d'une dll dans un processus tout semble bien se passer tout me dit que c'est ok mais voila sa fait planter le processus dans lequel j'essaye d'injecter le code.
J'ai essayer plusieurs processus mais toujours pareil(gnegne ne répond plus) et le code contenu dans la dll n'est pas exécute (ouvrir une simple msg box).
Voila le code du programme pour effectuer l'injection:
Code C/C++ :
#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;
 }

 HANDLE DllInject(char dll[], DWORD PID)
 {
 SetDebugPrivilege();

 char aloader[] = "\xB8\x00\x00\x00\x00" //Mov eax, LoadLibraryA
 "\x68\x00\x00\x00\x00" //PUSH OFFSET szDLL_PATH
 "\xFF\xD0" //Call EAX
 "\xC3"; //RETN

 // Note; il y a plus simple, CreateReamoteThread(,,LoadLibraryA,OFFSET szDLL_PATH,,,);
 // Mais j'avais envie de le faire avec un peu d'assembleur :)


 /* DLL INJECT :
 inject the dll to the target process !
 1) OpenProcess
 2) VirtualAlloc shellcode
 3) VirtualAlloc string
 4) Create Shell
 5) WriteMemory Shell
 6) WriteMemory String
 7) CreatRemoteThread
 */

 HANDLE hproc;
 LPVOID RStr,RShell;
 HANDLE RThread;
 DWORD RThreadId;
 FILE* file=NULL;

 int writtenbytes;


 file = fopen(dll,"r");
 if(file==NULL)
 {
printf("Impossible de localiser le fichier DLL\n");

 fclose(file);
 }
 else
 {
     printf("Dll localiser avec succes!!!\n");
 }



 /* 1 */
 hproc = OpenProcess(PROCESS_ALL_ACCESS,NULL,PID);
 if(hproc) printf("Processus ouvert avec succes!!\n");
 else
 {
     printf("Impossible d'ouvrir le processus\n");

 }


 /* 2 */
 RStr = VirtualAllocEx(hproc,0,strlen(dll)+1,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
 if(RStr) printf("Memoire allouer pour le code avec succes!!\n");
 else
 {
     printf("Impossible d'allouer la memoire\n");

 }

 /* 3 */
 RShell = VirtualAllocEx(hproc,0,sizeof(aloader),MEM_COMMIT,PAGE_EXECUTE_READWRITE);
 if(RShell) printf("Memoire allouer avec succes!!\n");
 else
 {
     printf("Impossible d'allouer la memoire\n");

 }

 /* 4 */
 DWORD *PTR;
 PTR = (DWORD*)(aloader + 1);
 *PTR = (DWORD)LoadLibrary;
 PTR = (DWORD*)(aloader + 6);
 *PTR = (DWORD)RStr;

 /* 5 */
 WriteProcessMemory(hproc,RShell,(LPCVOID) aloader,(SIZE_T)sizeof(aloader),(SIZE_T*)&writtenbytes);
 if(writtenbytes < sizeof(aloader))
 {
     printf("Impossible d'ecrire dans la memoire du processus\n");

 }
 else
 {
     printf("code ecrit dans la Memoire du processus avec succes!!\n");
 }


 /* 6 */

 WriteProcessMemory(hproc,RStr,(LPCVOID) dll,(SIZE_T)strlen(dll) +1,(SIZE_T*)&writtenbytes);
 if(writtenbytes < strlen(dll) +1 )
 {
     printf("erreur\n");

 }
 else
 {
     printf("writeProcessMemory string ok!!\n");
 }

 /* 7 */
 RThread = CreateRemoteThread(hproc,NULL,0,(LPTHREAD_START_ROUTINE)RShell,0,0,&RThreadId);
 if(RThread) printf("Execution des donnees dans un thread avec succes!!\n");
 else
 {
     printf("Impossible d'execute des donnees\n");

 }
fclose(file);
 return RThread;



 }

 int main()
 {
 SetDebugPrivilege();

 char dll[100];
DWORD PID;
printf("PID=0 pour quitter\n");
do
{

 cout<<"\nPID:";
 cin>>PID;
 cout<<"DLL:";
 cin>>dll;

 DllInject(dll, PID);
}while(PID!=0);

 system("pause");
 return 0;
 }


et voici maintenant le code de la dll(elle doit juste ouvrir un msgbox)
Code C/C++ :
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>

BOOL APIENTRY DllMain( HANDLE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
					 )
{
    switch (ul_reason_for_call)
	{
		case DLL_PROCESS_ATTACH:
		case DLL_THREAD_ATTACH:
		case DLL_THREAD_DETACH:
		case DLL_PROCESS_DETACH:
			break;
    }
    return TRUE;
}


extern "C" __declspec(dllexport) int fonction()
{

    MessageBox (NULL, "Bonjour" , "Bonjour", 0 + MB_ICONEXCLAMATION);


}


voila merci d'avance de votre aide
bonne journée.
jeudi 27 mai 2010 à 10:34:00 | Re : injection dll qui fait planter le processus cible

wisar

Personne pour m'aider


Cette discussion est classée dans : code, dll, dword, pid, privilege


Répondre à ce message

Sujets en rapport avec ce message

Dll en c++ dans du code C [ par rurouni41 ] bonjour, je dois integrer une DLL codee en C++ dans un programme en c...Donc je voulais savoir s'il y avait moyen(et comment faire) d ouvrir et d'util Lien explicite de DLL [ par garslouche ] Bonjour,j'aimerai savoir si quelqu'un sait comment on accède à une variable (et pas à une fonction) en ayant lié explicitement une DLL ? En gros mon c (MS VCpp) Problème de variables [ par YS1 ] J'ai créé une DLL C+PP que je souhaite utiliser dans un programe VB.La fonction principale de la DLL renvoie un certain nombre de variables, qui sont gestion des exceptions dans Visual C++ 6 [ par devmail ] Bonjour a tous,je suis en cours de developpement d'un programme compose d'un prg principale et de plusieurs dll. J'ai terminer les traitements et souh DLL activeX [ par guiguimac ] Bonjour,n'ayant jamais rien fait de trés poussé en C++, j'aimerai savoir si qq'un dispose d'un tut ou d'un exemple de code permettant la réalisation d Prob de thread [ par sebastienbro ] Bonjour, j'ai un problème avec des thread, je n'arrive pas a en créer un :(Voici mon code : HANDLE hThread1;DWORD dwThreadId1;DWORD WINAPI T Pb de variable (enfin je croi) [ par Xilofeon ] Regardé ce code :#define PIDVALIDE "6.0.2800.1106"...<b Communications exe / dll [ par Nebula ] Re-bonjour ...J'utilise ce code dans une dll :#define WIN32_LEAN_AND_MEAN#include HWND hApp = NULL;LRESULT CALLBACK Idle - Hook - dll [ par Manson ] Bonjour,voila, j'ai trouve le code d'une dll permettant de savoirdepuis combien de temps le PC est inactif.Mais voila, elle a un probleme, quelque foi Problème de compilation d'une Dll [ par DrUn ] Bonjour, J'ai une Dll qui a été compilée par visual c++ il y a quelques temps. Cette Dll fait du WinHTTP. Elle n'a pas été modifiée et mon SDK non plu


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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,390 sec (3)

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