Accueil > > > INJECTION DE DLL DANS N'IMPORTE QUEL PROCESS
INJECTION DE DLL DANS N'IMPORTE QUEL PROCESS
Information sur la source
Description
Ce prog vous permettra d'injecter une dll dans (presque) n'importe quel processus. Pour ceux qui ne connaissent pas, injecter une dll est un moyen d'exécuter du code dans un autre exécutable (processus pour être précis). Cela a quelques avantages (ajout de fonctionnalité, détournement de certaines fonctions, h**k :), et bien d'autres). Pour ce faire, le programme injecte une dll (contenant notre code) dans le processus. Voici les étapes : Tout d'abord, rappelons que pour charger une dll, nous avons besoin de LoadLibrary(char * dll). Ce que nous allons donc faire, c'est injecter du code dans le processus qui appellera cette fonction : push offset dll_name call LoadLibraryA ret Il nous faudra donc injecter le nom et le chemin complet de notre dll dans la mémoire du processus, et insérer le bout de code ci-dessus. Pour ce se faire, on va : - Allouer de la mémoire avec VirtualAllocEx dans le processus distant. - Ouvrir le processus avec OpenProcessMemory. - Ecrire dans le processus, la string du chemin de la dll, et le bout de code. (aux endroits allouer avec VirtualAllocEx). - Utiliser CreateRemoteThread, pour lancer une nouvelle thread dans le processus distant, à l'endroit de notre code évidement. Le code une fois executer, chargera notre dll et le tour est joué ! Note : 1) J'ai ajouter le mode "privileg" qui permet d'injecter la casi totalité des processus (En passant par les privilège de debug). 2) Pour ceux qui ne connaissent pas l'assembleur : push offset Dll_path 'Pousse' sur la pile le pointeur vers notre string. C'est de cette manière que les arguments des fonctions son passés. call LoadLibraryA Appel de la fonction LoadLibraryA tout simplement. (Avec notre argument poussé précédemment). ret C'est le Return, en gros, c'est pour dire que la thread à fini son exécution :) 3) Il y a une méthode plus courte pour ceux qui on assimilé la matière : Au lieu d'injecter le code assembleur, on peut simplement faire une thread, qui a pour cible, LoadLibraryA et donner directement comme argument l'addres de notre string. CreateRemoteThread(Process,LoadLibraryA,(c har *) dll_path,...); Merci de m'avoir lu :) Ciao !
Source
- // Voici la fonction principale :
-
-
- // Loader assembleur.
- 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 DllInject(DWORD PID,char * dll){
- HANDLE hproc;
- LPVOID RStr,RShell;
- HANDLE RThread;
- DWORD RThreadId;
- FILE* file;
-
- int writtenbytes;
-
-
- if(!(file = fopen(dll,"r"))) return 0;
- fclose(file);
-
-
-
- /* 1 */
- hproc = OpenProcess(PROCESS_ALL_ACCESS,NULL,PID);
- if(!hproc) return 0;
-
- /* 2 */
- RStr = VirtualAllocEx(hproc,0,strlen(dll)+1,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
- if(!RStr) return 0;
-
- /* 3 */
- RShell = VirtualAllocEx(hproc,0,sizeof(aloader),MEM_COMMIT,PAGE_EXECUTE_READWRITE);
- if(!RShell) return 0;
-
- /* 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)) return 0;
-
- /* 6 */
-
- WriteProcessMemory(hproc,RStr,(LPCVOID) dll,(SIZE_T)strlen(dll) +1,(SIZE_T*)&writtenbytes);
- if(writtenbytes < strlen(dll) +1 ) return 0;
-
- /* 7 */
- RThread = CreateRemoteThread(hproc,NULL,0,(LPTHREAD_START_ROUTINE)RShell,0,0,&RThreadId);
- if(!RThread) return 0;
-
- return RThread;
-
- }
// Voici la fonction principale :
// Loader assembleur.
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 DllInject(DWORD PID,char * dll){
HANDLE hproc;
LPVOID RStr,RShell;
HANDLE RThread;
DWORD RThreadId;
FILE* file;
int writtenbytes;
if(!(file = fopen(dll,"r"))) return 0;
fclose(file);
/* 1 */
hproc = OpenProcess(PROCESS_ALL_ACCESS,NULL,PID);
if(!hproc) return 0;
/* 2 */
RStr = VirtualAllocEx(hproc,0,strlen(dll)+1,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
if(!RStr) return 0;
/* 3 */
RShell = VirtualAllocEx(hproc,0,sizeof(aloader),MEM_COMMIT,PAGE_EXECUTE_READWRITE);
if(!RShell) return 0;
/* 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)) return 0;
/* 6 */
WriteProcessMemory(hproc,RStr,(LPCVOID) dll,(SIZE_T)strlen(dll) +1,(SIZE_T*)&writtenbytes);
if(writtenbytes < strlen(dll) +1 ) return 0;
/* 7 */
RThread = CreateRemoteThread(hproc,NULL,0,(LPTHREAD_START_ROUTINE)RShell,0,0,&RThreadId);
if(!RThread) return 0;
return RThread;
}
Conclusion
Si question il y a, hésitez pas :)
Historique
- 13 avril 2007 10:21:58 :
- Petite modification du code :)
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
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
Données dans DLL accessibles à divers processus (sous dev-C++) [ par graig2 ]
Salut à tous, Voici ma toute première question sur ce forum, merci pour votre aide : Est ce qu'une DLL appelée par divers processus d
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
Injection et DirectX [ par wxccxw ]
Salut, voila j'ai une scene directX genre jeu, qui utilise des models.... et j'aimerai Injecter dedans un Dll qui change l'opaciter des models.quel st
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çais). Ce qui m'intéresse,
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
[Aide]Anti DLL Injection and API Hooking [ par belette321 ]
Bon voilla je tente presentement de creer un DLL qui lors qu'il est inclue a un programme, block les tentative de "DLL Injection" et de "API Hook", Un
Problème injection DLL. [ par Latino888 ]
Bien le bonjour, je vous écrit aujourd'hui pour un problème d'injection DLL, en effet je shouterais tester la sécurité d'un de mes serveurs sur BF2, e
Recherche d'adresse mémoire d'un DLL dans un processus [ par empathe ]
Bonjour, je recherche une fonction pouvant me retourner l'adresse mémoire Hexa d'ou est stocké une DLL d'un processus. le code: [code=cpp] #include
Injection dll et systray ? [ par mayti ]
Hello, Voilà 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.
|
Derniers Blogs
TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
SALUT!SALUT! par khaoulagenie
Cliquez pour lire la suite par khaoulagenie
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|