Bonjour / bonsoir,
Je viens tout doucement sur les forums suite � mes recherches nombreuses (trop ou mauvaise) sur un probl�me que j'ai depuis pas mal de jour (heures devant le pc). Je suis actuellement en train de r�aliser un petit programme doit me permettre de faire 2 choses. Simuler des appuis de touches claviers et lire une partie de la m�moire d'un processus. Je me suis donc pench� sur le C++ et la winAPI
. Gros poissons bien compliqu�.
Dans un premier temps, mon programme peut simuler les appuis de touches claviers (en cliquant sur un bouton, une recherche du process, un focus, un envoi est r�alis�). J'utilise FindWindow, SetForegroundWindow et keybd_event. Cette partie l� fonctionne tr�s bien sauf si je d�cide de ne plus focus mon process.... Du coup premi�re petite question, est-il possible d'injecter dans un process / dans une fen�tre non focus, l'appui du touche clavier. Je suis passer par PostMessage, mais sans succ�s. Y a-t-il un autre moyen ?
Mon deuxi�me probl�me est l�g�rement plus compliquer (ou pas). J'arrive � trouver mon processus, et � r�cup�rer l'adresse m�moire "basse". Je la compare avec OllyDbg et je trouve une adresse identique. Par contre, et c'est l� que je me paume un peu, sur OllyDbg, on peut voir les diff�rentes Adresse, taille, section, "contains",... Je souhaiterai pouvoir faire la m�me chose avec mon programme mais pour mon processus.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 HWND myWindow; uint keyCode; const TCHAR str[11] = TEXT("MonProcessChercher"); LPCTSTR h =(const TCHAR *)str; myWindow = ::FindWindow(NULL,h); if(myWindow == NULL) qDebug() << "failed to find"; if(!SetForegroundWindow(myWindow)) qDebug() << "Unsucessful foreground window"; keyCode = VK_CONTROL; keybd_event(VK_CONTROL, 0x9D, 0, 0); keybd_event(0x2E, 0x2E, 0, 0); ::Sleep(1); keybd_event(VK_CONTROL, 0x9D, KEYEVENTF_KEYUP, 0); keybd_event(0x2E, 0x2E, KEYEVENTF_KEYUP, 0);
Comment peut-on d�terminer la taille que prend une application (adresse "basse" et adresse "haute"), comment peut-on la "parser",comme par exemple OllyDbg, pour retrouver les diff�rentes sections tel que les Data, Ressources, Relocations...
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 hwnd = FindWindow(NULL,L"MonProcessChercher"); if(!hwnd) qDebug() << "not found!"; // Get Process GetWindowThreadProcessId(hwnd, &pid); // Get the process id and place it in the PID HANDLE phandle = OpenProcess(PROCESS_ALL_ACCESS, 0, pid); // Get permission to Read & Write if(!phandle) qDebug() << "Could not get handle !"; DWORD_PTR base = GetModuleBase(pid); qDebug() << " nouvelle base :" << QString::number(base,16); ReadProcessMemory(phandle,(void*)base,&value,sizeof(double),0); // read what is in "address" and store it in "value" ReadProcessMemory(phandle,(void*)base,&myValue,sizeof(myValue),0);
Je sais que je demande beaucoup de choses et que je fournis peu... Je comprendrai aussi tr�s bien si des personnes me redirige vers un sujet d�j� existant ou des tutos "bien fait" � sur ces sujets. J'ai pas mal cherch� et j'ai eu un peu de mal � trouver (je cherche peut-�tre mal aussi mais c'est une autre histoire).
D'avance merci pour vos r�ponses et votre aide.
Naevis.
Partager