diff --git a/Wavebreaker-Hook/Wavebreaker-Hook.vcxproj b/Wavebreaker-Hook/Wavebreaker-Hook.vcxproj index 3409437..8c73a81 100644 --- a/Wavebreaker-Hook/Wavebreaker-Hook.vcxproj +++ b/Wavebreaker-Hook/Wavebreaker-Hook.vcxproj @@ -84,6 +84,7 @@ Windows true false + $(CoreLibraryDependencies);%(AdditionalDependencies);wininet.lib @@ -104,6 +105,7 @@ true true false + $(CoreLibraryDependencies);%(AdditionalDependencies);wininet.lib diff --git a/Wavebreaker-Hook/dllmain.cpp b/Wavebreaker-Hook/dllmain.cpp index e205af9..3c7042b 100644 --- a/Wavebreaker-Hook/dllmain.cpp +++ b/Wavebreaker-Hook/dllmain.cpp @@ -7,6 +7,9 @@ SafetyHookInline g_getserverunicode_hook{}; SafetyHookInline g_getserver_hook{}; +SafetyHookInline g_internetconnecta_hook{}; +SafetyHookInline g_httpopenrequesta_hook{}; + mINI::INIFile file("Wavebreaker-Hook.ini"); mINI::INIStructure ini; @@ -29,18 +32,55 @@ char* __fastcall GetTargetServerHook(void* thisptr, uintptr_t edx) return rewriteTargetServer(server); } +HINTERNET WINAPI InternetConnectHook(HINTERNET hInternet, + LPCSTR lpszServerName, + INTERNET_PORT nServerPort, + LPCSTR lpszUserName, + LPCSTR lpszPassword, + DWORD dwService, + DWORD dwFlags, + DWORD_PTR dwContext) +{ + if (nServerPort == 80) + nServerPort = 443; + return g_internetconnecta_hook.stdcall(hInternet, lpszServerName, nServerPort, lpszUserName, lpszPassword, dwService, dwFlags, dwContext); +} + +HINTERNET WINAPI OpenRequestHook(HINTERNET hConnect, + LPCSTR lpszVerb, + LPCSTR lpszObjectName, + LPCSTR lpszVersion, + LPCSTR lpszReferrer, + LPCSTR* lplpszAcceptTypes, + DWORD dwFlags, + DWORD_PTR dwContext) +{ + if (!dwFlags) + dwFlags = INTERNET_FLAG_SECURE; + return g_httpopenrequesta_hook.stdcall(hConnect, + lpszVerb, + lpszObjectName, + lpszVersion, + lpszReferrer, + lplpszAcceptTypes, + dwFlags, + dwContext); +} + uint32_t __stdcall init(void* args) { while (!GetModuleHandleA("HTTP_Fetch_Unicode.dll") || !GetModuleHandleA("17C5B19F-4273-423C-A158-CA6F73046D43.dll")) Sleep(100); file.read(ini); if (ini["Config"].has("server")) newServer = ini.get("Config").get("server"); else MessageBoxA(nullptr, "Wavebreaker hook config error!", "Error", MB_OK | MB_ICONERROR); - + FARPROC targetServerUnicodeHandle = GetProcAddress(GetModuleHandleA("HTTP_Fetch_Unicode.dll"), "?GetTargetServer@HTTP_Fetch_Unicode@@UAEPADXZ"); FARPROC targetServerHandle = GetProcAddress(GetModuleHandleA("17C5B19F-4273-423C-A158-CA6F73046D43.dll"), "?GetTargetServer@Aco_HTTP_Fetch@@UAEPADXZ"); g_getserverunicode_hook = safetyhook::create_inline((uintptr_t)targetServerUnicodeHandle, (uintptr_t)GetTargetServerUnicodeHook); g_getserver_hook = safetyhook::create_inline((uintptr_t)targetServerHandle, (uintptr_t)GetTargetServerHook); - if (!g_getserver_hook || !g_getserverunicode_hook) + g_internetconnecta_hook = safetyhook::create_inline((uintptr_t)InternetConnectA, (uintptr_t)InternetConnectHook); + g_httpopenrequesta_hook = safetyhook::create_inline((uintptr_t)HttpOpenRequestA, (uintptr_t)OpenRequestHook); + if (!g_getserver_hook || !g_getserverunicode_hook || !g_internetconnecta_hook || !g_httpopenrequesta_hook) { MessageBoxA(nullptr, "Wavebreaker hook failed!", "Error", MB_OK | MB_ICONERROR); return 1; diff --git a/Wavebreaker-Hook/framework.h b/Wavebreaker-Hook/framework.h index 417f412..085ec30 100644 --- a/Wavebreaker-Hook/framework.h +++ b/Wavebreaker-Hook/framework.h @@ -4,3 +4,4 @@ // Windows headers #include +#include \ No newline at end of file