Accueil > Forum > > > > injection dll qui fait planter le processus cible
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
Livres en rapport
|
Derniers Blogs
JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|