Join Date: Mar 2011
Posts: 978
User-Rating:
|
Habe dir mal ne beispiel dll geschrieben. habe direkt auch ne logfunktion eingebaut, da erwartungsgemäß fehler auftreten werden... ist nen ordner "kompiliert" drin, da ist die kompilierte dll mit dem holzigto injektor von igromanru aka blackslayer drin. *ausprobiert in league of legends*
hier der dl link: http://www.xup.in/dl,14847428/BeispielDLL.rar/
und hier der source für die google finder in ein paar wochen/monaten/jahren?:
CPP Code: #pragma once #define _CRT_SECURE_NO_WARNINGS // ignore some warnings... #define _CRT_NON_CONFORMING_SWPRINTFS // ... #include <Windows.h> #include <cstdio> #include <time.h> #include <dinput.h> const DWORD GDS_OFFSET = 0x62B1; DWORD WINAPI HookThread(); void* DetourFunc(BYTE *src, const BYTE *dst, const int len); void add_log(char* format, ...); typedef HRESULT(__stdcall* GetDeviceState_t)(LPDIRECTINPUTDEVICE, DWORD, LPVOID); HRESULT __stdcall hkGetDeviceState(LPDIRECTINPUTDEVICE pDevice, DWORD cbData, LPVOID lpvData); HANDLE tmpHandle = NULL; HMODULE hModDInput8 = NULL; FARPROC dwGetDeviceState = NULL; FARPROC dwDirectInput8Create = NULL; GetDeviceState_t pGetDeviceState; BOOL WINAPI DllMain(HINSTANCE hinstDll,DWORD Reason,LPVOID Reserved) { switch(Reason) { case DLL_PROCESS_ATTACH: add_log("==========LOG START=========="); add_log("DLL Attached"); add_log("Creating Thread..."); tmpHandle = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)&HookThread, 0, 0, 0); if (!tmpHandle) { add_log("ThreadCreation Failed!"); } break; case DLL_PROCESS_DETACH: add_log("DLL Detached"); add_log("==========LOG END==========\n\n\n"); break; } return 1; } DWORD WINAPI HookThread() { add_log("Thread Created"); while (!hModDInput8) { add_log("Searching dinput8.dll..."); hModDInput8 = GetModuleHandle(L"dinput8.dll"); Sleep(100); } add_log("Found dinput8.dll: %x !", hModDInput8); while (!dwDirectInput8Create) { add_log("Searching GetDeviceState..."); dwDirectInput8Create = GetProcAddress(hModDInput8, "DirectInput8Create"); Sleep(100); } add_log("Found DirectInput8Create: %x !", dwDirectInput8Create); dwGetDeviceState = (FARPROC) ((DWORD)dwDirectInput8Create - GDS_OFFSET); add_log("GetDevicestate is here (DirectInput8Create - 0x62B1): %x", dwGetDeviceState); add_log("Hooking GetDeviceState..."); pGetDeviceState = (GetDeviceState_t) DetourFunc((PBYTE) dwGetDeviceState, (PBYTE) hkGetDeviceState, 5); add_log("Hooked GetDeviceState - Trampolin: %x - New: %x !", pGetDeviceState, hkGetDeviceState); add_log("Going into Main Loop..."); while (true) { // ... Sleep(1000); } return 0; } HRESULT __stdcall hkGetDeviceState(LPDIRECTINPUTDEVICE lpDevice, DWORD cbData, LPVOID lpvData) // Parameter: die device - die größe der daten - der buffer in den geschrieben wird { HRESULT temp = NULL; char* ptr = (char*) lpvData; temp = pGetDeviceState(lpDevice, cbData, lpvData); // originalfunktion aufrufen if (cbData == 256) // wenn eine keyboard abfrage stattfindet... siehe: http://msdn.microsoft.com/en-us/library/microsoft.directx_sdk.idirectinputdevice8.idirectinputdevice8.getdevicestate%28v=VS.85%29.aspx { // memset(lpvData, 0, cbData); // buffer leeren -> keine taste gedrückt ptr[DIK_E] = 0; // um z.b. die taste E komplett zu blocken... } return temp; } void* DetourFunc(BYTE *src, const BYTE *dst, const int len) //saved <len> bytes in ein trampolin, überschreibt die ersten 5 bytes der originalfunktion mit einem jump auf die hookfunktion und gibt einen pointer auf das trampolin zurück, der die gesicherten bytes und einen jump auf die originalfunktion NACH dem hook beinhaltet. { BYTE *jmp = (BYTE*)malloc(len+5); DWORD dwback; VirtualProtect(src, len, PAGE_READWRITE, &dwback); memcpy(jmp, src, len); jmp += len; jmp[0] = 0xE9; *(DWORD*)(jmp+1) = (DWORD)(src+len - jmp) - 5; src[0] = 0xE9; *(DWORD*)(src+1) = (DWORD)(dst - src) - 5; VirtualProtect(src, len, dwback, &dwback); return (jmp-len); } void add_log(char* format, ...) { HANDLE filehandle; DWORD dwReadBytes; char buffer[2048]; char writebuffer[2048]; va_list args; va_start(args, format); vsprintf (buffer, format, args); filehandle = CreateFile(L"Log.txt", GENERIC_WRITE, 0, 0, OPEN_ALWAYS, 0, 0); SetFilePointer(filehandle, 0, 0, FILE_END); char date[18]; _strdate(date); date[8] = ' '; _strtime(date+9); sprintf_s(writebuffer, 2048, "Log Added (%s): %s\ ", date, buffer); WriteFile(filehandle, writebuffer, strlen(writebuffer), &dwReadBytes, 0); CloseHandle(filehandle); }
blockt alle E tastendrücke.
der log der im spieleordner erstellt wurde könnte z.b. so aussehen:
CPP Code: Log Added (12/25/11 01:08:06): ==========LOG START========== Log Added (12/25/11 01:08:06): DLL Attached Log Added (12/25/11 01:08:06): Creating Thread... Log Added (12/25/11 01:08:06): Thread Created Log Added (12/25/11 01:08:06): Searching dinput8.dll... Log Added (12/25/11 01:08:07): Found dinput8.dll: 693d0000 ! Log Added (12/25/11 01:08:07): Searching GetDeviceState... Log Added (12/25/11 01:08:07): Found DirectInput8Create: 693dcc8e ! Log Added (12/25/11 01:08:07): GetDevicestate is here (DirectInput8Create - 0x62B1): 693d69dd Log Added (12/25/11 01:08:07): Hooking GetDeviceState... Log Added (12/25/11 01:08:07): Hooked GetDeviceState - Trampolin: 1d3e07d0 - New: 6f1a11f0 ! Log Added (12/25/11 01:08:07): Going into Main Loop... Log Added (12/25/11 01:08:26): DLL Detached Log Added (12/25/11 01:08:26): ==========LOG END==========
gl & hf.
EDIT: die hooking methode setzt keine execute rechte auf das trampolin, musst also entweder dep deaktivieren ( https://www.youtube.com/watch?v=PpFVpIzmPqE ), oder das mit virtualprotect fixxen...
__________________
SpoilerVids: Zitate: SpoilerQuote from xst Vater KN4CK3R, der du hängst im irc, geheiligt werde dein Botnet, dein P7 v1.337 komme, die Bannwelle geschehe, wie in CS:S als auch in CS:GO, führe uns nicht in Versuchung, sondern erlöse uns von all dem c+p-Shit. Quote from f4gsh0t_h4x VAC ist an,immer,überall Quote from gibson.w Ich mag braune Würstchen Quote from irc <SilverDeath> KN4CK3R bistn nub <~KN4CK3R> kk Quote from irc <OrkSchamane> das prob is das viele dieser eig. recht guten bücher englisch sind ... <OrkSchamane> da habe ich's ja doppelt schwer <~KN4CK3R> falsch <~KN4CK3R> das prob is dass du programmieren willst ohne englisch zu können Quote from irc <SilverDeath> Ich schwöre dir Dr_Pepper Ich bumms deine Mutter tot Mann! <Dr_Pepper> danke. <SilverDeath> bitte Quote from irc <~KN4CK3R> dann liegts wenigstens an mir <~KN4CK3R> nur noch rausfinden warum -.- <SilverDeath> ja sicher <SilverDeath> an wem sonst? * You were kicked by KN4CK3R (kick) Quote from Dr_Pepper ihr seit beide dumm Tutorials: Releases: Gifs:
|