begin process at 2012 02 09 14:38:42
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Système

 > INJECTION DE DLL DANS N'IMPORTE QUEL PROCESS

INJECTION DE DLL DANS N'IMPORTE QUEL PROCESS


 Information sur la source

Note :
9,57 / 10 - par 7 personnes
9,57 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Système Classé sous :dll, inject, injection, processus, assembleur Niveau :Initié Date de création :13/04/2007 Date de mise à jour :13/04/2007 10:21:58 Vu / téléchargé :25 150 / 1 668

Auteur : krust

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (17)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
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 :)

 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

13 avril 2007 10:21:58 :
Petite modification du code :)

 Sources du même auteur

Source avec Zip Source avec une capture LIRE LES INFOS DES HEADERS D'UN FICHIER BITMAP ET TARGA
Source avec Zip Source avec une capture CHEAT POUR PINBALL DE WINDOWS
Source avec Zip Source avec une capture CRÉATION D'UN TRAINER POUR CHEATER : ECRITURE DANS UN PROCES...

 Sources de la même categorie

Source avec Zip Source avec une capture UNE LISTE HÉTÉROGÈNE DOUBLEMENT CHAINÉE par pgl10
Source avec Zip Source avec une capture POUR AFFICHER LES CARACTÈRES ACCENTUÉS SOUS WINDOWS EN MODE ... par pgl10
Source avec Zip PETITE CLASSE DE GESTION DES PROCESSUS SOUS WINDOWS par wisar
Source avec Zip KEYLOGGER AVEC NOM DU PROCESSUS ET DE LA FENETRE QUI A LE FO... par wisar
Source avec Zip LINUX USB BOOT LEGER par patatalo

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture SOUS-CLASSEMENT DE FENÊTRE D'UN AUTRE PROCESS PAR INJECTION ... par racpp
Source avec Zip Source avec une capture SERVICE WINDOWS DANS UNE DLL LANCÉ PAR SVCHOST.EXE par racpp
Source avec Zip GÉNÉRE UN TABLEAU DE CARACTÉRE AU FORMAT C CONTENANT LE BYTE... par kertimanoff
Source avec Zip Source avec une capture [C/WIN32] INJECTION DE DLL 2 MÉTHODES (REMOTETHREAD PROPRE &... par deck_bsd
Source avec Zip INJECTION DE DLL DANS UN PROCESSUS par lilxam7

Commentaires et avis

Commentaire de deck_bsd le 13/04/2007 11:14:11

Yop,

Source très intéressante, je vai l'étudié de plus près :D

Commentaire de Ombitious_Developper le 13/04/2007 14:01:27

Salut:

Pas mieux, surtout j'apprécie l'explication des différentes étapes nécessaires pour comprendre comment faire l'injection de DLL. (8/10)

Commentaire de Pamaury le 13/04/2007 19:28:32

Il y a une manière beaucoup plus subtile d'injecter une dll dans un processus, c'est d'utiliser les Hook globaux de windows.

Commentaire de Xilofeon le 14/04/2007 12:49:50

Comment peut on faire ensuite pour utiliser ou récupérer des fonctions dans cette dll ? Car la si j'ai bien compris la dll est juste injecté mais rien ne ce passe, sauf celle ci a un code à l'atachement d'un thread(ou process).??

Sinon très bonne source. ;)

Commentaire de Pamaury le 14/04/2007 13:16:04

En fait, lorsque l'on crée une DLL de hook, celle-ci reçoit des messages du shell mais on peut aussi envoyer manuellement des messages donc il suffit d'envoyer un message de ce type au processus: celui sera intercepté par le hook et il pourra alors faire ce qu'il veut:
-soit il charge une autre dll
-soit le code est déjà inclue dans le DLL de hook.

C'est une méthode bien documentée, il suffit de chercher sur Google.

Commentaire de apxa le 14/04/2007 15:01:58

Salut,
C'est très intérressant en effet.
Crois tu que de la même maniere on puisse decharger une DLL en cours d'utilisation par un processus?

Have Fun.

Commentaire de Pamaury le 14/04/2007 16:13:18

En théorie, en utilisant cette technique tu peux faire un FreeLibrary sur n'importe qu'elle DLL mais il doit falloir faire attention à ce que l'on fait pour ne pas planter le processus, quoique en suspendant les autres thread du processus il doit y avoir moyen de bidouiller pas mal.

Commentaire de Taron31 le 14/04/2007 23:13:42

+1 pour Pamaury, effectivement tu places la fonction hook dans une dll, puis la dll sera chargée par les processus qui font appel à ces fonctions APIs hookées, c'est une bonne méthode.

Celle que tu présentes est aussi très connue, mais j'apprécie l'injection du shellcode asm, c est assez sympa, clairement expliqué en plus..

Good.

Commentaire de MaxSoldier le 20/05/2007 19:58:54

C'est propre, c'est simple, c'est ce que je voulais !
10/10.

Commentaire de lenanttais44 le 25/01/2008 08:57:42

ca a l'air bien
je cherche un code qui fait la même chose ou presque sous linux
si quelqu'un avait des indices, ca serait gentil

Commentaire de max12 le 05/02/2008 03:45:18 administrateur CS 10/10

10/10 car même moi j'ai compris :P

Commentaire de max12 le 06/02/2008 05:36:03 administrateur CS

Ce que je ne comprend pas trop c'est que si je crée un DLL qui fait un messagebox a son chargement il le fait plusieurs fois alors que le process a été threaded une seule fois. Quelqu'un a une petite explication ? :)

A+

Commentaire de ratala le 11/06/2008 14:44:31

Tres bien expliqué, merci pour ce code qui ma rendu service

Commentaire de darkpoulpo le 30/11/2009 10:19:00 10/10

Je te mets le maximum, parce que comparé à d'autres injections ou l'appelle du thread se fait direct sur l'api pour charger la librairie, celle-ci fonctionne même sous WINDOWS SEVEN 64...

d'ailleurs je ne sais pas si c'est moi qui me plante, mais pour l'autre type d'injection ça foire sous seven 64

Commentaire de darkpoulpo le 30/11/2009 10:27:12

hum, je rectifie ce que j'ai dit, avec ton code, en modifiant aussi pour appeller l'api directement, ça marche, ma fois....

Commentaire de excal le 28/12/2009 15:10:27

très intéressant mais comment faire pour que la dll s'exécute toute seule une fois charger ?

Commentaire de ghuysmans99 le 18/07/2010 08:48:39 10/10

Nickel comme programme !
10/10, of course.

 Ajouter un commentaire


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 &#224; tous, Voici ma toute premi&#232;re question sur ce forum, merci pour votre aide : Est ce qu'une DLL appel&#233;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&#231;ais). Ce qui m'int&#233;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&#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.


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

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 : 1,903 sec (4)

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