Join Date: May 2011
Posts: 419
User-Rating:
|
hier C++ Pseudocode wie das extern geht, wenn du VB kannst, sollte der Kommentierte Code dir helfen:
GetModuleBase Funktion:
TEXT Code: DWORD GetModuleBase(const DWORD dwProcessId, const char *szModuleName) //name userer funktione + parameter prozess id + modulname { HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessId); //einen snapshot von unserem prozess machen... if (!hSnap) return 0; //wenns den prozess nich gibt, 0 zurückgeben MODULEENTRY32 me; //ein MODULEENTRY32 (structure) names "me" erstellen me.dwSize = sizeof(MODULEENTRY32); //dwSize ist die größe von MODULEENTRY32 DWORD dwReturn = 0; //rückgabewert erstellen if (Module32First(hSnap, &me)) //module32first muss gesetzt werden... { while (Module32Next(hSnap, &me)) //whileschlife die alle module durchgeht { if (lstrcmpi(me.szModule, szModuleName) == 0) //wenn der modulname übereinstimm dann... { dwReturn = (DWORD)me.modBaseAddr; //rückgabewert = als DWORD modBaseAddr break; //aus der whileschleife ausbrechen } } } CloseHandle(hSnap); //handle wieder closen return dwReturn; //wert zurückgeben }
Der eigentliche BHOP:
TEXT Code: HWND Fenster = FindWindow(NULL,"Counter-Strike Source" ); //fensterhandle finden DWORD ProzessID; //Variable ProzessID erstellen GetWindowThreadProcessId(Fenster, &ProzessID); //ProzessID herausfinden HANDLE ProcessHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProzessID); //prozesshandle herausfinden (brauchen wir für readprozessmemory) DWORD Adresse = GetModuleBase(ProzessID, client.dll) + 0x568804; //Adresse herausfinden //Die Variable die an der Adresse ist, ist immer 1 wenn man auf //dem Boden steht, und 0 wenn man in der Luft ist //jetzt müssen wie nurnoch den wert ständig auslesen, //und gegebenfalls einen leertastendruck senden bool is_on_ground = 0; while(1)//unendlichschleife { ReadProcessMemory(ProcessHandle ,(void*) (Adresse), &is_on_ground, sizeof(is_on_ground), 0); //Wert auslesen und in is_on_ground speichern if(is_on_ground == 1) //Wenn 1 dann... { SendMessage(Fenster, WM_KEYDOWN, VK_SPACE, 0x390000); //Taste drücken Sleep(10); //Kurz Abwarten (10ms); SendMessage(Fenster, WM_KEYUP, VK_SPACE, 0x390000); //Taste loslassen } Sleep(1); //Programm auf max. 1000 durchgänge pro Sekunde limitieren, wir wollen ja nicht 100% CPU-Last verursachen }
MSDN-Links, falls was nicht ganz klar ist: CreateToolhelp32Snapshot: http://msdn.microsoft.com/en-us/library/windows/desktop/ms682489%28v=vs.85%29.aspx ModuleEntry32: http://msdn.microsoft.com/en-us/library/windows/desktop/ms684225%28v=vs.85%29.aspx Module32First: http://msdn.microsoft.com/en-us/library/windows/desktop/ms684218%28v=vs.85%29.aspx Module32Next: http://msdn.microsoft.com/en-us/library/windows/desktop/ms684221%28v=vs.85%29.aspx
FindWindow: http://msdn.microsoft.com/en-us/library/windows/desktop/ms633499%28v=vs.85%29.aspx GetWindowThreadProcessId: http://msdn.microsoft.com/en-us/library/windows/desktop/ms633522%28v=vs.85%29.aspx OpenProcess:http://msdn.microsoft.com/en-us/library/windows/desktop/ms684320%28v=vs.85%29.aspx ReadProcessMemory: http://msdn.microsoft.com/en-us/library/windows/desktop/ms680553%28v=vs.85%29.aspx SendMessage: http://msdn.microsoft.com/en-us/library/windows/desktop/ms644950%28v=vs.85%29.aspx
mfg Dr_Pepper
__________________
Da unten ist ein Like-Button, benutze ihn doch
Last edited by Dr_Pepper (Fri 31. May 2013, 01:25)
Reason: no reason given
|