- C / C++ / C++.NET : Hooking sous nt avec createremotethread (vc++7, compilable ac le 6 aussi) - Cod
- C / C++ / C++.NET : Vc++7 ==> vc++6 convertisseur de projet devstudio - CodeS SourceS
- Dx8.1: créer un vertexbuffer pour dessiner (vc++7 et 6)
- Dx8.1: faire des transfos grâce aux matrices (vc++7 et 6)
- Dx8.1: faire des transfos grâce aux matrices (vc++ 7 et 6)
12 mai 2006 à 02:31
"
int cbCodeSize = ((LPBYTE) EndRemoteEntry - (LPBYTE) RemoteEntry);
"
Içi tu supposes l'ordre des fonctions en mémoire(l'une apres lautre). Cependant, le linker peut changer l'ordre des fonctions, il peut par exemple mettre RemoteEntry avant EndRemoteEntry. Ce qui planterait le process cible!
Malgrés l'option /ORDER cela reste considere "risque".
Bon code, 9/10, a+
22 nov. 2004 à 12:40
D'abord, le flag "MEM_COMMIT" est suffisant pour l'appel a VirtualAllocEx: la memoire sera reservee uniquement dans l'espace memoire virtuel du process cible.
Ensuite pour ne pas laisser de trace, il faut faire appel a VirtualFreeEx de cette facon:
VirtualFreeEx(hProc, CodeMem, 0, MEM_RELEASE);
VirtualFreeEx(hProc, DataMem, 0, MEM_RELEASE);
Mais attention, il faut etre sur que le remote thread ait bien termine son execution: pour cela on place un
WaitForSingleObject(hThread, INFINITE);
avant l'appel a VirtualFreeEx.
Enfin un CloseHandle(hProc); pour finir.
L'injection dans un process systeme fonctionne egalement - pas pour tous a priori et certains aiment pas du tout!.
Pour l'affichage de la MsgBox par ex, je recupere le hWnd de la TaskBar ( avec un FindWindow(TEXT("Shell_TrayWnd"),NULL); ) et je rajoute un champ HWND phWnd dans la struct InJack, par ex...
Pour finir je conseille a quiconque voulant *tout* savoir sur l'injection de code l'excellent article de Robert Kuster : "Three Ways to Inject Your Code into Another Process" a l'@: http://www.codeproject.com/threads/winspy.asp
18 nov. 2004 à 19:16
16 nov. 2004 à 11:14
Imo, ca c'est parsque le process cible n'a pas d'handle parent (genre pas de gestion des events/fenetres).
int MessageBox(
HWND hWnd,
LPCTSTR lpText,
LPCTSTR lpCaption,
UINT uType
);
le premier parametre doit être un handle vers une fenetre parent, j'ai eu des cas où en mettant null, cela ne fonctionnait pas... (probleme que tu décris)
15 nov. 2004 à 18:57
si tu libères ta propre mémoire, au retour du VirtualFreeEx, le pointeur d'execution pointera vers une adresse de la mémoire libérée, donc désormais inaccessible.
charger une dll puis appeler une fonction exportée qui libérerait la mémoire et ferait un ExitThread pour etre dur que le pointeur ne revienne jamais ?
mais la dll resterait chargée pour le processus hôte, on tourne en rond ...