Dump RAM & simulation touche clavier
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 :roll:). 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 8O8O. 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 ?
Code:
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); |
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:
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); |
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...
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.