|
Trouver une ressource
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 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,(char *) 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 :)
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
- 13 avril 2007 10:21:58 :
- Petite modification du code :)
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
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
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.
message de la pile [ par cyber_al ]
bonjoursj'ai une petitte question a poser concernant les messages de la pile ,explications:mon application principale me permet de lancer une dll avec
Objet COM [ par mayouma ]
Bonjour à tous;je suis entrain d'implementer des DLL en VC++.Net, je voudrais connaitre comment faire un appel d'une methode d'une DLL à une
DLL [ par polo3 ]
Bonjour, Je recherche une personne capable de faire une dll (pour 3d game studio ) qui permetterait d'effectuer une liaison de type TCP/IPmerci
|
Téléchargements
Logiciels à télécharger sur le même thème :
|