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