#include <windows.h> #include <stdio.h> HMODULE GetProcessModuleHandle(HANDLE hProcess, char* lpModuleName) { HMODULE hKernel32; LPTHREAD_START_ROUTINE lpGetModuleHandleAddress; DWORD nModuleNameSize; char* lpRemoteModuleName; DWORD nWritten; HANDLE hThread; HMODULE hResult; hResult = NULL; nModuleNameSize = lstrlen(lpModuleName) + 1; /* Récupération de l'adresse de GetModuleHandle dans le processus courant */ /* En pratique, c'est toujours la même dans le processus cible */ hKernel32 = GetModuleHandle("kernel32.dll"); lpGetModuleHandleAddress = (LPTHREAD_START_ROUTINE)GetProcAddress(hKernel32, "GetModuleHandleA"); /* Allocation d'une zone dans le processus cible, qui va contenir le nom de la dll à trouver */ lpRemoteModuleName = (char*)VirtualAllocEx(hProcess, NULL, nModuleNameSize, MEM_COMMIT, PAGE_READWRITE); if (! lpRemoteModuleName) goto the_end; /* Ecriture du nom de la dll dans le processus distant */ if (! WriteProcessMemory(hProcess, lpRemoteModuleName, lpModuleName, nModuleNameSize, &nWritten)) goto free_memory; /* Création du thread */ hThread = CreateRemoteThread(hProcess, NULL, 0, lpGetModuleHandleAddress, lpRemoteModuleName, 0, NULL); if (! hThread) goto free_memory; /* Attente du thread */ WaitForSingleObject(hThread, INFINITE); /* Récupération du résultat de GetModuleHandle */ GetExitCodeThread(hThread, (DWORD*)&hResult); CloseHandle(hThread); free_memory: VirtualFreeEx(hProcess, lpRemoteModuleName, 0, MEM_RELEASE); the_end: return hResult; } int main() { STARTUPINFO startupInfo; PROCESS_INFORMATION processInfo; HMODULE hModule; ZeroMemory(&startupInfo, sizeof(startupInfo)); startupInfo.cb = sizeof(startupInfo); startupInfo.dwFlags = STARTF_USESHOWWINDOW; startupInfo.wShowWindow = SW_SHOW; CreateProcess(NULL, "calc", NULL, NULL, FALSE, 0, NULL, NULL, &startupInfo, &processInfo); /* Très moche, mais dans le cas de la question, le jeu est lancé séparément */ Sleep(500); hModule = GetProcessModuleHandle(processInfo.hProcess, "ole32.dll"); printf("%#08x\n", (unsigned int)hModule); CloseHandle(processInfo.hThread); CloseHandle(processInfo.hProcess); return 0; }
DWORD GetPidByName(char *szProcName) { PROCESSENTRY32 pe = {sizeof(PROCESSENTRY32)}; HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if(hSnap != INVALID_HANDLE_VALUE) { if(Process32First(hSnap, &pe)) { do { if(strcmpi(pe.szExeFile, szProcName) == 0) { dwPID = pe.th32ProcessID; break; } } while(Process32Next(hSnap, &pe)); } CloseHandle(hSnap); } return dwPID; }
if (GetPidByName("Aion.bin") != 0){// OK }else{}//rien trouvé
DWORD GetDLL(char* DllName, DWORD tPid){ HANDLE snapMod; MODULEENTRY32 me32; if (tPid == 0) return 0; snapMod = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, tPid); me32.dwSize = sizeof(MODULEENTRY32); if (Module32First(snapMod, &me32)){ do{ if (strcmp(DllName,me32.szModule) == 0){ CloseHandle(snapMod); return (DWORD) me32.modBaseAddr; } }while(Module32Next(snapMod,&me32)); } CloseHandle(snapMod); return 0; }
gameDll = GetDLL("Game.dll", dwPID); if(gameDll == 0) { textcolor(1); printf("erreur: gameDll non trouve\n"); textcolor(6); Sleep(5000); exit(0); } printf("gameDll %x\n", gameDll); int timee=11; while(timee--){ system("cls"); printf("Depart du BoT dans %d s!\n",timee); Sleep(1000); }
gameDll = (DWORD)GetModuleHandle(TEXT("game.dll")); //et gameDll = (DWORD)GetModuleHandle("game.dll"); printf("res %x\n", gameDll);
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question