InternetOpenUrlA hook crasht



  • Hey,

    folgender versuch einen Hook auf InternetOpenUrlA zu setzen schlägt leider fehl.
    Die Zielapplikation crasht bei dem aufruf von InternetOpenUrlA.

    #include <windows.h>
    #include <WinInet.h>
    
    typedef HINTERNET (__stdcall *tInternetOpenUrlA)(HINTERNET hInternet, LPCTSTR lpszUrl,LPCTSTR lpszHeaders,DWORD dwHeadersLength,DWORD dwFlags,DWORD_PTR dwContext);
    tInternetOpenUrlA pInternetOpenUrlA;
    
    void* DetourFunc(BYTE *src, const BYTE *dst, const int len)
    {
    	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);
    }
    
    HINTERNET __stdcall hooked_InternetOpenUrlA(HINTERNET hInternet, LPCTSTR lpszUrl,LPCTSTR lpszHeaders,DWORD dwHeadersLength,DWORD dwFlags,DWORD_PTR dwContext)
    {
    	return pInternetOpenUrlA(hInternet, lpszUrl, lpszHeaders, dwHeadersLength, dwFlags, dwContext);
    }
    
    void Hook()
    {
    	FARPROC dwInetOpenUrlA = GetProcAddress(GetModuleHandle("Wininet.dll"), "InternetOpenUrlA");
    	pInternetOpenUrlA = (tInternetOpenUrlA)DetourFunc((BYTE*)dwInetOpenUrlA, (BYTE*)&hooked_InternetOpenUrlA, 5);
    }
    
    BOOL WINAPI DllMain(HINSTANCE hModule, DWORD dwReason, LPVOID lpvReserved)
    {
    	if (dwReason == DLL_PROCESS_ATTACH)
    	{
    		CreateThread(0, 0, (LPTHREAD_START_ROUTINE)Hook, 0, 0, 0);
    	}
    
    	return TRUE;
    }
    

    Hat jemand einen Rat, was daran falsch ist?

    Vielen Dank!



  • es könnte ein fastcall sein, dann passen die Parameter nicht oder (wahrscheinlich) stimmt die size = 5 beim Hooken nicht

    greetz KN4CK3R



  • Empfiehlt: MS Detours 2.1



  • dank euch, jungs!

    lag an der size - 7bytes wärens gewesen.

    lg


Anmelden zum Antworten