转发类
#include "pch.h"
#include "WinHttpForward.h"
void WinHttpForward::InitWinHttpForward() {
HMODULE hValve = LoadLibrary(L"winhttp.dll");//导入系统路径下的
if (GetLastError() != ERROR_MOD_NOT_FOUND && hValve != NULL) {
GetFileVersionInfoA = GetProcAddress(hValve, "GetFileVersionInfoA");//获取所有的导出函数地址
GetFileVersionInfoByHandle = GetProcAddress(hValve, "GetFileVersionInfoByHandle");//获取所有的导出函数地址
GetFileVersionInfoExA = GetProcAddress(hValve, "GetFileVersionInfoExA");//获取所有的导出函数地址
GetFileVersionInfoExW = GetProcAddress(hValve, "GetFileVersionInfoExW");//获取所有的导出函数地址
GetFileVersionInfoSizeA = GetProcAddress(hValve, "GetFileVersionInfoSizeA");//获取所有的导出函数地址
GetFileVersionInfoSizeExA = GetProcAddress(hValve, "GetFileVersionInfoSizeExA");//获取所有的导出函数地址
GetFileVersionInfoSizeExW = GetProcAddress(hValve, "GetFileVersionInfoSizeExW");//获取所有的导出函数地址
GetFileVersionInfoSizeW = GetProcAddress(hValve, "GetFileVersionInfoSizeW");//获取所有的导出函数地址
GetFileVersionInfoW = GetProcAddress(hValve, "GetFileVersionInfoW");//获取所有的导出函数地址
Private1 = GetProcAddress(hValve, "Private1");//获取所有的导出函数地址
SvchostPushServiceGlobals = GetProcAddress(hValve, "SvchostPushServiceGlobals");//获取所有的导出函数地址
VerFindFileA = GetProcAddress(hValve, "VerFindFileA");//获取所有的导出函数地址
VerFindFileW = GetProcAddress(hValve, "VerFindFileW");//获取所有的导出函数地址
VerInstallFileA = GetProcAddress(hValve, "VerInstallFileA");//获取所有的导出函数地址
VerInstallFileW = GetProcAddress(hValve, "VerInstallFileW");//获取所有的导出函数地址
VerLanguageNameA = GetProcAddress(hValve, "VerLanguageNameA");//获取所有的导出函数地址
VerLanguageNameW = GetProcAddress(hValve, "VerLanguageNameW");//获取所有的导出函数地址
VerQueryValueA = GetProcAddress(hValve, "VerQueryValueA");//获取所有的导出函数地址
VerQueryValueW = GetProcAddress(hValve, "VerQueryValueW");//获取所有的导出函数地址
WinHttpAddRequestHeaders = GetProcAddress(hValve, "WinHttpAddRequestHeaders");//获取所有的导出函数地址
WinHttpAutoProxySvcMain = GetProcAddress(hValve, "WinHttpAutoProxySvcMain");//获取所有的导出函数地址
WinHttpCheckPlatform = GetProcAddress(hValve, "WinHttpCheckPlatform");//获取所有的导出函数地址
WinHttpCloseHandle = GetProcAddress(hValve, "WinHttpCloseHandle");//获取所有的导出函数地址
WinHttpConnect = GetProcAddress(hValve, "WinHttpConnect");//获取所有的导出函数地址
WinHttpConnectionDeletePolicyEntries = GetProcAddress(hValve, "WinHttpConnectionDeletePolicyEntries");//获取所有的导出函数地址
WinHttpConnectionDeleteProxyInfo = GetProcAddress(hValve, "WinHttpConnectionDeleteProxyInfo");//获取所有的导出函数地址
WinHttpConnectionFreeNameList = GetProcAddress(hValve, "WinHttpConnectionFreeNameList");//获取所有的导出函数地址
WinHttpConnectionFreeProxyInfo = GetProcAddress(hValve, "WinHttpConnectionFreeProxyInfo");//获取所有的导出函数地址
WinHttpConnectionFreeProxyList = GetProcAddress(hValve, "WinHttpConnectionFreeProxyList");//获取所有的导出函数地址
WinHttpConnectionGetNameList = GetProcAddress(hValve, "WinHttpConnectionGetNameList");//获取所有的导出函数地址
WinHttpConnectionGetProxyInfo = GetProcAddress(hValve, "WinHttpConnectionGetProxyInfo");//获取所有的导出函数地址
WinHttpConnectionGetProxyList = GetProcAddress(hValve, "WinHttpConnectionGetProxyList");//获取所有的导出函数地址
WinHttpConnectionSetPolicyEntries = GetProcAddress(hValve, "WinHttpConnectionSetPolicyEntries");//获取所有的导出函数地址
WinHttpConnectionSetProxyInfo = GetProcAddress(hValve, "WinHttpConnectionSetProxyInfo");//获取所有的导出函数地址
WinHttpConnectionUpdateIfIndexTable = GetProcAddress(hValve, "WinHttpConnectionUpdateIfIndexTable");//获取所有的导出函数地址
WinHttpCrackUrl = GetProcAddress(hValve, "WinHttpCrackUrl");//获取所有的导出函数地址
WinHttpCreateProxyResolver = GetProcAddress(hValve, "WinHttpCreateProxyResolver");//获取所有的导出函数地址
WinHttpCreateUrl = GetProcAddress(hValve, "WinHttpCreateUrl");//获取所有的导出函数地址
WinHttpDetectAutoProxyConfigUrl = GetProcAddress(hValve, "WinHttpDetectAutoProxyConfigUrl");//获取所有的导出函数地址
WinHttpFreeProxyResult = GetProcAddress(hValve, "WinHttpFreeProxyResult");//获取所有的导出函数地址
WinHttpFreeProxyResultEx = GetProcAddress(hValve, "WinHttpFreeProxyResultEx");//获取所有的导出函数地址
WinHttpFreeProxySettings = GetProcAddress(hValve, "WinHttpFreeProxySettings");//获取所有的导出函数地址
WinHttpGetDefaultProxyConfiguration = GetProcAddress(hValve, "WinHttpGetDefaultProxyConfiguration");//获取所有的导出函数地址
WinHttpGetIEProxyConfigForCurrentUser = GetProcAddress(hValve, "WinHttpGetIEProxyConfigForCurrentUser");//获取所有的导出函数地址
WinHttpGetProxyForUrl = GetProcAddress(hValve, "WinHttpGetProxyForUrl");//获取所有的导出函数地址
WinHttpGetProxyForUrlEx = GetProcAddress(hValve, "WinHttpGetProxyForUrlEx");//获取所有的导出函数地址
WinHttpGetProxyForUrlEx2 = GetProcAddress(hValve, "WinHttpGetProxyForUrlEx2");//获取所有的导出函数地址
WinHttpGetProxyForUrlHvsi = GetProcAddress(hValve, "WinHttpGetProxyForUrlHvsi");//获取所有的导出函数地址
WinHttpGetProxyResult = GetProcAddress(hValve, "WinHttpGetProxyResult");//获取所有的导出函数地址
WinHttpGetProxyResultEx = GetProcAddress(hValve, "WinHttpGetProxyResultEx");//获取所有的导出函数地址
WinHttpGetProxySettingsVersion = GetProcAddress(hValve, "WinHttpGetProxySettingsVersion");//获取所有的导出函数地址
WinHttpGetTunnelSocket = GetProcAddress(hValve, "WinHttpGetTunnelSocket");//获取所有的导出函数地址
WinHttpOpen = GetProcAddress(hValve, "WinHttpOpen");//获取所有的导出函数地址
WinHttpOpenRequest = GetProcAddress(hValve, "WinHttpOpenRequest");//获取所有的导出函数地址
WinHttpPacJsWorkerMain = GetProcAddress(hValve, "WinHttpPacJsWorkerMain");//获取所有的导出函数地址
WinHttpProbeConnectivity = GetProcAddress(hValve, "WinHttpProbeConnectivity");//获取所有的导出函数地址
WinHttpQueryAuthSchemes = GetProcAddress(hValve, "WinHttpQueryAuthSchemes");//获取所有的导出函数地址
WinHttpQueryDataAvailable = GetProcAddress(hValve, "WinHttpQueryDataAvailable");//获取所有的导出函数地址
WinHttpQueryHeaders = GetProcAddress(hValve, "WinHttpQueryHeaders");//获取所有的导出函数地址
WinHttpQueryOption = GetProcAddress(hValve, "WinHttpQueryOption");//获取所有的导出函数地址
WinHttpReadData = GetProcAddress(hValve, "WinHttpReadData");//获取所有的导出函数地址
WinHttpReadProxySettings = GetProcAddress(hValve, "WinHttpReadProxySettings");//获取所有的导出函数地址
WinHttpReadProxySettingsHvsi = GetProcAddress(hValve, "WinHttpReadProxySettingsHvsi");//获取所有的导出函数地址
WinHttpReceiveResponse = GetProcAddress(hValve, "WinHttpReceiveResponse");//获取所有的导出函数地址
WinHttpResetAutoProxy = GetProcAddress(hValve, "WinHttpResetAutoProxy");//获取所有的导出函数地址
WinHttpSaveProxyCredentials = GetProcAddress(hValve, "WinHttpSaveProxyCredentials");//获取所有的导出函数地址
WinHttpSendRequest = GetProcAddress(hValve, "WinHttpSendRequest");//获取所有的导出函数地址
WinHttpSetCredentials = GetProcAddress(hValve, "WinHttpSetCredentials");//获取所有的导出函数地址
WinHttpSetDefaultProxyConfiguration = GetProcAddress(hValve, "WinHttpSetDefaultProxyConfiguration");//获取所有的导出函数地址
WinHttpSetOption = GetProcAddress(hValve, "WinHttpSetOption");//获取所有的导出函数地址
WinHttpSetStatusCallback = GetProcAddress(hValve, "WinHttpSetStatusCallback");//获取所有的导出函数地址
WinHttpSetTimeouts = GetProcAddress(hValve, "WinHttpSetTimeouts");//获取所有的导出函数地址
WinHttpTimeFromSystemTime = GetProcAddress(hValve, "WinHttpTimeFromSystemTime");//获取所有的导出函数地址
WinHttpTimeToSystemTime = GetProcAddress(hValve, "WinHttpTimeToSystemTime");//获取所有的导出函数地址
WinHttpWebSocketClose = GetProcAddress(hValve, "WinHttpWebSocketClose");//获取所有的导出函数地址
WinHttpWebSocketCompleteUpgrade = GetProcAddress(hValve, "WinHttpWebSocketCompleteUpgrade");//获取所有的导出函数地址
WinHttpWebSocketQueryCloseStatus = GetProcAddress(hValve, "WinHttpWebSocketQueryCloseStatus");//获取所有的导出函数地址
WinHttpWebSocketReceive = GetProcAddress(hValve, "WinHttpWebSocketReceive");//获取所有的导出函数地址
WinHttpWebSocketSend = GetProcAddress(hValve, "WinHttpWebSocketSend");//获取所有的导出函数地址
WinHttpWebSocketShutdown = GetProcAddress(hValve, "WinHttpWebSocketShutdown");//获取所有的导出函数地址
WinHttpWriteData = GetProcAddress(hValve, "WinHttpWriteData");//获取所有的导出函数地址
WinHttpWriteProxySettings = GetProcAddress(hValve, "WinHttpWriteProxySettings");//获取所有的导出函数地址
}
}
FARPROC WinHttpForward::GetFileVersionInfoA;
FARPROC WinHttpForward::GetFileVersionInfoByHandle;
FARPROC WinHttpForward::GetFileVersionInfoExA;
FARPROC WinHttpForward::GetFileVersionInfoExW;
FARPROC WinHttpForward::GetFileVersionInfoSizeA;
FARPROC WinHttpForward::GetFileVersionInfoSizeExA;
FARPROC WinHttpForward::GetFileVersionInfoSizeExW;
FARPROC WinHttpForward::GetFileVersionInfoSizeW;
FARPROC WinHttpForward::GetFileVersionInfoW;
FARPROC WinHttpForward::Private1;
FARPROC WinHttpForward::SvchostPushServiceGlobals;
FARPROC WinHttpForward::VerFindFileA;
FARPROC WinHttpForward::VerFindFileW;
FARPROC WinHttpForward::VerInstallFileA;
FARPROC WinHttpForward::VerInstallFileW;
FARPROC WinHttpForward::VerLanguageNameA;
FARPROC WinHttpForward::VerLanguageNameW;
FARPROC WinHttpForward::VerQueryValueA;
FARPROC WinHttpForward::VerQueryValueW;
FARPROC WinHttpForward::WinHttpAddRequestHeaders;
FARPROC WinHttpForward::WinHttpAutoProxySvcMain;
FARPROC WinHttpForward::WinHttpCheckPlatform;
FARPROC WinHttpForward::WinHttpCloseHandle;
FARPROC WinHttpForward::WinHttpConnect;
FARPROC WinHttpForward::WinHttpConnectionDeletePolicyEntries;
FARPROC WinHttpForward::WinHttpConnectionDeleteProxyInfo;
FARPROC WinHttpForward::WinHttpConnectionFreeNameList;
FARPROC WinHttpForward::WinHttpConnectionFreeProxyInfo;
FARPROC WinHttpForward::WinHttpConnectionFreeProxyList;
FARPROC WinHttpForward::WinHttpConnectionGetNameList;
FARPROC WinHttpForward::WinHttpConnectionGetProxyInfo;
FARPROC WinHttpForward::WinHttpConnectionGetProxyList;
FARPROC WinHttpForward::WinHttpConnectionSetPolicyEntries;
FARPROC WinHttpForward::WinHttpConnectionSetProxyInfo;
FARPROC WinHttpForward::WinHttpConnectionUpdateIfIndexTable;
FARPROC WinHttpForward::WinHttpCrackUrl;
FARPROC WinHttpForward::WinHttpCreateProxyResolver;
FARPROC WinHttpForward::WinHttpCreateUrl;
FARPROC WinHttpForward::WinHttpDetectAutoProxyConfigUrl;
FARPROC WinHttpForward::WinHttpFreeProxyResult;
FARPROC WinHttpForward::WinHttpFreeProxyResultEx;
FARPROC WinHttpForward::WinHttpFreeProxySettings;
FARPROC WinHttpForward::WinHttpGetDefaultProxyConfiguration;
FARPROC WinHttpForward::WinHttpGetIEProxyConfigForCurrentUser;
FARPROC WinHttpForward::WinHttpGetProxyForUrl;
FARPROC WinHttpForward::WinHttpGetProxyForUrlEx;
FARPROC WinHttpForward::WinHttpGetProxyForUrlEx2;
FARPROC WinHttpForward::WinHttpGetProxyForUrlHvsi;
FARPROC WinHttpForward::WinHttpGetProxyResult;
FARPROC WinHttpForward::WinHttpGetProxyResultEx;
FARPROC WinHttpForward::WinHttpGetProxySettingsVersion;
FARPROC WinHttpForward::WinHttpGetTunnelSocket;
FARPROC WinHttpForward::WinHttpOpen;
FARPROC WinHttpForward::WinHttpOpenRequest;
FARPROC WinHttpForward::WinHttpPacJsWorkerMain;
FARPROC WinHttpForward::WinHttpProbeConnectivity;
FARPROC WinHttpForward::WinHttpQueryAuthSchemes;
FARPROC WinHttpForward::WinHttpQueryDataAvailable;
FARPROC WinHttpForward::WinHttpQueryHeaders;
FARPROC WinHttpForward::WinHttpQueryOption;
FARPROC WinHttpForward::WinHttpReadData;
FARPROC WinHttpForward::WinHttpReadProxySettings;
FARPROC WinHttpForward::WinHttpReadProxySettingsHvsi;
FARPROC WinHttpForward::WinHttpReceiveResponse;
FARPROC WinHttpForward::WinHttpResetAutoProxy;
FARPROC WinHttpForward::WinHttpSaveProxyCredentials;
FARPROC WinHttpForward::WinHttpSendRequest;
FARPROC WinHttpForward::WinHttpSetCredentials;
FARPROC WinHttpForward::WinHttpSetDefaultProxyConfiguration;
FARPROC WinHttpForward::WinHttpSetOption;
FARPROC WinHttpForward::WinHttpSetStatusCallback;
FARPROC WinHttpForward::WinHttpSetTimeouts;
FARPROC WinHttpForward::WinHttpTimeFromSystemTime;
FARPROC WinHttpForward::WinHttpTimeToSystemTime;
FARPROC WinHttpForward::WinHttpWebSocketClose;
FARPROC WinHttpForward::WinHttpWebSocketCompleteUpgrade;
FARPROC WinHttpForward::WinHttpWebSocketQueryCloseStatus;
FARPROC WinHttpForward::WinHttpWebSocketReceive;
FARPROC WinHttpForward::WinHttpWebSocketSend;
FARPROC WinHttpForward::WinHttpWebSocketShutdown;
FARPROC WinHttpForward::WinHttpWriteData;
FARPROC WinHttpForward::WinHttpWriteProxySettings;
转发头文件
#ifndef WinHttpForward_H
#define WinHttpForward_H
class WinHttpForward
{
public:
static void InitWinHttpForward();
static FARPROC GetFileVersionInfoA;
static FARPROC GetFileVersionInfoByHandle;
static FARPROC GetFileVersionInfoExA;
static FARPROC GetFileVersionInfoExW;
static FARPROC GetFileVersionInfoSizeA;
static FARPROC GetFileVersionInfoSizeExA;
static FARPROC GetFileVersionInfoSizeExW;
static FARPROC GetFileVersionInfoSizeW;
static FARPROC GetFileVersionInfoW;
static FARPROC Private1;
static FARPROC SvchostPushServiceGlobals;
static FARPROC VerFindFileA;
static FARPROC VerFindFileW;
static FARPROC VerInstallFileA;
static FARPROC VerInstallFileW;
static FARPROC VerLanguageNameA;
static FARPROC VerLanguageNameW;
static FARPROC VerQueryValueA;
static FARPROC VerQueryValueW;
static FARPROC WinHttpAddRequestHeaders;
static FARPROC WinHttpAutoProxySvcMain;
static FARPROC WinHttpCheckPlatform;
static FARPROC WinHttpCloseHandle;
static FARPROC WinHttpConnect;
static FARPROC WinHttpConnectionDeletePolicyEntries;
static FARPROC WinHttpConnectionDeleteProxyInfo;
static FARPROC WinHttpConnectionFreeNameList;
static FARPROC WinHttpConnectionFreeProxyInfo;
static FARPROC WinHttpConnectionFreeProxyList;
static FARPROC WinHttpConnectionGetNameList;
static FARPROC WinHttpConnectionGetProxyInfo;
static FARPROC WinHttpConnectionGetProxyList;
static FARPROC WinHttpConnectionSetPolicyEntries;
static FARPROC WinHttpConnectionSetProxyInfo;
static FARPROC WinHttpConnectionUpdateIfIndexTable;
static FARPROC WinHttpCrackUrl;
static FARPROC WinHttpCreateProxyResolver;
static FARPROC WinHttpCreateUrl;
static FARPROC WinHttpDetectAutoProxyConfigUrl;
static FARPROC WinHttpFreeProxyResult;
static FARPROC WinHttpFreeProxyResultEx;
static FARPROC WinHttpFreeProxySettings;
static FARPROC WinHttpGetDefaultProxyConfiguration;
static FARPROC WinHttpGetIEProxyConfigForCurrentUser;
static FARPROC WinHttpGetProxyForUrl;
static FARPROC WinHttpGetProxyForUrlEx;
static FARPROC WinHttpGetProxyForUrlEx2;
static FARPROC WinHttpGetProxyForUrlHvsi;
static FARPROC WinHttpGetProxyResult;
static FARPROC WinHttpGetProxyResultEx;
static FARPROC WinHttpGetProxySettingsVersion;
static FARPROC WinHttpGetTunnelSocket;
static FARPROC WinHttpOpen;
static FARPROC WinHttpOpenRequest;
static FARPROC WinHttpPacJsWorkerMain;
static FARPROC WinHttpProbeConnectivity;
static FARPROC WinHttpQueryAuthSchemes;
static FARPROC WinHttpQueryDataAvailable;
static FARPROC WinHttpQueryHeaders;
static FARPROC WinHttpQueryOption;
static FARPROC WinHttpReadData;
static FARPROC WinHttpReadProxySettings;
static FARPROC WinHttpReadProxySettingsHvsi;
static FARPROC WinHttpReceiveResponse;
static FARPROC WinHttpResetAutoProxy;
static FARPROC WinHttpSaveProxyCredentials;
static FARPROC WinHttpSendRequest;
static FARPROC WinHttpSetCredentials;
static FARPROC WinHttpSetDefaultProxyConfiguration;
static FARPROC WinHttpSetOption;
static FARPROC WinHttpSetStatusCallback;
static FARPROC WinHttpSetTimeouts;
static FARPROC WinHttpTimeFromSystemTime;
static FARPROC WinHttpTimeToSystemTime;
static FARPROC WinHttpWebSocketClose;
static FARPROC WinHttpWebSocketCompleteUpgrade;
static FARPROC WinHttpWebSocketQueryCloseStatus;
static FARPROC WinHttpWebSocketReceive;
static FARPROC WinHttpWebSocketSend;
static FARPROC WinHttpWebSocketShutdown;
static FARPROC WinHttpWriteData;
static FARPROC WinHttpWriteProxySettings;
};
#endif //PCH_H
进入主函数
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "pch.h"
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
//设置导出函数
//DLLEXPORT void GetFileVersionInfoA() { WinHttpForward::GetFileVersionInfoA(); };
DLLEXPORT void GetFileVersionInfoByHandle() { WinHttpForward::GetFileVersionInfoByHandle(); };
//DLLEXPORT void GetFileVersionInfoExA() { WinHttpForward::GetFileVersionInfoExA(); };
//DLLEXPORT void GetFileVersionInfoExW() { WinHttpForward::GetFileVersionInfoExW(); };
//DLLEXPORT void GetFileVersionInfoSizeA() { WinHttpForward::GetFileVersionInfoSizeA(); };
//DLLEXPORT void GetFileVersionInfoSizeExA() { WinHttpForward::GetFileVersionInfoSizeExA(); };
//DLLEXPORT void GetFileVersionInfoSizeExW() { WinHttpForward::GetFileVersionInfoSizeExW(); };
//DLLEXPORT void GetFileVersionInfoSizeW() { WinHttpForward::GetFileVersionInfoSizeW(); };
//DLLEXPORT void GetFileVersionInfoW() { WinHttpForward::GetFileVersionInfoW(); };
DLLEXPORT void Private1() { WinHttpForward::Private1(); };
DLLEXPORT void SvchostPushServiceGlobals() { WinHttpForward::SvchostPushServiceGlobals(); };
//DLLEXPORT void VerFindFileA() { WinHttpForward::VerFindFileA(); };
//DLLEXPORT void VerFindFileW() { WinHttpForward::VerFindFileW(); };
//DLLEXPORT void VerInstallFileA() { WinHttpForward::VerInstallFileA(); };
//DLLEXPORT void VerInstallFileW() { WinHttpForward::VerInstallFileW(); };
//DLLEXPORT void VerLanguageNameA() { WinHttpForward::VerLanguageNameA(); };
//DLLEXPORT void VerLanguageNameW() { WinHttpForward::VerLanguageNameW(); };
//DLLEXPORT void VerQueryValueA() { WinHttpForward::VerQueryValueA(); };
//DLLEXPORT void VerQueryValueW() { WinHttpForward::VerQueryValueW(); };
DLLEXPORT void WinHttpAddRequestHeaders() { WinHttpForward::WinHttpAddRequestHeaders(); };
DLLEXPORT void WinHttpAutoProxySvcMain() { WinHttpForward::WinHttpAutoProxySvcMain(); };
DLLEXPORT void WinHttpCheckPlatform() { WinHttpForward::WinHttpCheckPlatform(); };
DLLEXPORT void WinHttpCloseHandle() { WinHttpForward::WinHttpCloseHandle(); };
DLLEXPORT void WinHttpConnect() { WinHttpForward::WinHttpConnect(); };
DLLEXPORT void WinHttpConnectionDeletePolicyEntries() { WinHttpForward::WinHttpConnectionDeletePolicyEntries(); };
DLLEXPORT void WinHttpConnectionDeleteProxyInfo() { WinHttpForward::WinHttpConnectionDeleteProxyInfo(); };
DLLEXPORT void WinHttpConnectionFreeNameList() { WinHttpForward::WinHttpConnectionFreeNameList(); };
DLLEXPORT void WinHttpConnectionFreeProxyInfo() { WinHttpForward::WinHttpConnectionFreeProxyInfo(); };
DLLEXPORT void WinHttpConnectionFreeProxyList() { WinHttpForward::WinHttpConnectionFreeProxyList(); };
DLLEXPORT void WinHttpConnectionGetNameList() { WinHttpForward::WinHttpConnectionGetNameList(); };
DLLEXPORT void WinHttpConnectionGetProxyInfo() { WinHttpForward::WinHttpConnectionGetProxyInfo(); };
DLLEXPORT void WinHttpConnectionGetProxyList() { WinHttpForward::WinHttpConnectionGetProxyList(); };
DLLEXPORT void WinHttpConnectionSetPolicyEntries() { WinHttpForward::WinHttpConnectionSetPolicyEntries(); };
DLLEXPORT void WinHttpConnectionSetProxyInfo() { WinHttpForward::WinHttpConnectionSetProxyInfo(); };
DLLEXPORT void WinHttpConnectionUpdateIfIndexTable() { WinHttpForward::WinHttpConnectionUpdateIfIndexTable(); };
DLLEXPORT void WinHttpCrackUrl() { WinHttpForward::WinHttpCrackUrl(); };
DLLEXPORT void WinHttpCreateProxyResolver() { WinHttpForward::WinHttpCreateProxyResolver(); };
DLLEXPORT void WinHttpCreateUrl() { WinHttpForward::WinHttpCreateUrl(); };
DLLEXPORT void WinHttpDetectAutoProxyConfigUrl() { WinHttpForward::WinHttpDetectAutoProxyConfigUrl(); };
DLLEXPORT void WinHttpFreeProxyResult() { WinHttpForward::WinHttpFreeProxyResult(); };
DLLEXPORT void WinHttpFreeProxyResultEx() { WinHttpForward::WinHttpFreeProxyResultEx(); };
DLLEXPORT void WinHttpFreeProxySettings() { WinHttpForward::WinHttpFreeProxySettings(); };
DLLEXPORT void WinHttpGetDefaultProxyConfiguration() { WinHttpForward::WinHttpGetDefaultProxyConfiguration(); };
DLLEXPORT void WinHttpGetIEProxyConfigForCurrentUser() { WinHttpForward::WinHttpGetIEProxyConfigForCurrentUser(); };
DLLEXPORT void WinHttpGetProxyForUrl() { WinHttpForward::WinHttpGetProxyForUrl(); };
DLLEXPORT void WinHttpGetProxyForUrlEx() { WinHttpForward::WinHttpGetProxyForUrlEx(); };
DLLEXPORT void WinHttpGetProxyForUrlEx2() { WinHttpForward::WinHttpGetProxyForUrlEx2(); };
DLLEXPORT void WinHttpGetProxyForUrlHvsi() { WinHttpForward::WinHttpGetProxyForUrlHvsi(); };
DLLEXPORT void WinHttpGetProxyResult() { WinHttpForward::WinHttpGetProxyResult(); };
DLLEXPORT void WinHttpGetProxyResultEx() { WinHttpForward::WinHttpGetProxyResultEx(); };
DLLEXPORT void WinHttpGetProxySettingsVersion() { WinHttpForward::WinHttpGetProxySettingsVersion(); };
DLLEXPORT void WinHttpGetTunnelSocket() { WinHttpForward::WinHttpGetTunnelSocket(); };
DLLEXPORT void WinHttpOpen() { WinHttpForward::WinHttpOpen(); };
DLLEXPORT void WinHttpOpenRequest() { WinHttpForward::WinHttpOpenRequest(); };
DLLEXPORT void WinHttpPacJsWorkerMain() { WinHttpForward::WinHttpPacJsWorkerMain(); };
DLLEXPORT void WinHttpProbeConnectivity() { WinHttpForward::WinHttpProbeConnectivity(); };
DLLEXPORT void WinHttpQueryAuthSchemes() { WinHttpForward::WinHttpQueryAuthSchemes(); };
DLLEXPORT void WinHttpQueryDataAvailable() { WinHttpForward::WinHttpQueryDataAvailable(); };
DLLEXPORT void WinHttpQueryHeaders() { WinHttpForward::WinHttpQueryHeaders(); };
DLLEXPORT void WinHttpQueryOption() { WinHttpForward::WinHttpQueryOption(); };
DLLEXPORT void WinHttpReadData() { WinHttpForward::WinHttpReadData(); };
DLLEXPORT void WinHttpReadProxySettings() { WinHttpForward::WinHttpReadProxySettings(); };
DLLEXPORT void WinHttpReadProxySettingsHvsi() { WinHttpForward::WinHttpReadProxySettingsHvsi(); };
DLLEXPORT void WinHttpReceiveResponse() { WinHttpForward::WinHttpReceiveResponse(); };
DLLEXPORT void WinHttpResetAutoProxy() { WinHttpForward::WinHttpResetAutoProxy(); };
DLLEXPORT void WinHttpSaveProxyCredentials() { WinHttpForward::WinHttpSaveProxyCredentials(); };
DLLEXPORT void WinHttpSendRequest() { WinHttpForward::WinHttpSendRequest(); };
DLLEXPORT void WinHttpSetCredentials() { WinHttpForward::WinHttpSetCredentials(); };
DLLEXPORT void WinHttpSetDefaultProxyConfiguration() { WinHttpForward::WinHttpSetDefaultProxyConfiguration(); };
DLLEXPORT void WinHttpSetOption() { WinHttpForward::WinHttpSetOption(); };
DLLEXPORT void WinHttpSetStatusCallback() { WinHttpForward::WinHttpSetStatusCallback(); };
DLLEXPORT void WinHttpSetTimeouts() { WinHttpForward::WinHttpSetTimeouts(); };
DLLEXPORT void WinHttpTimeFromSystemTime() { WinHttpForward::WinHttpTimeFromSystemTime(); };
DLLEXPORT void WinHttpTimeToSystemTime() { WinHttpForward::WinHttpTimeToSystemTime(); };
DLLEXPORT void WinHttpWebSocketClose() { WinHttpForward::WinHttpWebSocketClose(); };
DLLEXPORT void WinHttpWebSocketCompleteUpgrade() { WinHttpForward::WinHttpWebSocketCompleteUpgrade(); };
DLLEXPORT void WinHttpWebSocketQueryCloseStatus() { WinHttpForward::WinHttpWebSocketQueryCloseStatus(); };
DLLEXPORT void WinHttpWebSocketReceive() { WinHttpForward::WinHttpWebSocketReceive(); };
DLLEXPORT void WinHttpWebSocketSend() { WinHttpForward::WinHttpWebSocketSend(); };
DLLEXPORT void WinHttpWebSocketShutdown() { WinHttpForward::WinHttpWebSocketShutdown(); };
DLLEXPORT void WinHttpWriteData() { WinHttpForward::WinHttpWriteData(); };
DLLEXPORT void WinHttpWriteProxySettings() { WinHttpForward::WinHttpWriteProxySettings(); };
hook mono函数
#ifndef _MonoFun_H_
#define _MonoFun_H_
class MonoFun
{
public:
static FARPROC mono_fun_init(HMODULE hModule);
static FARPROC InitVerionApiDebug(HMODULE hModule, LPCSTR lpString1);
//--------------成员------------
static Mono_thread_current_Fun mono_thread_current ;
static Mono_thread_set_main_Fun mono_thread_set_main;
static Mono_jit_init_version_Fun mono_jit_init_version ;
static Mono_domain_assembly_open_Fun mono_domain_assembly_open ;
static Mono_assembly_get_image_Fun mono_assembly_get_image ;
static Mono_runtime_invoke_Fun mono_runtime_invoke;
static Mono_method_desc_new_Fun mono_method_desc_new;
static Mono_method_desc_search_in_image_Fun mono_method_desc_search_in_image ;
static Mono_method_desc_free_Fun mono_method_desc_free;
static Mono_method_signature_Fun mono_method_signature;
static Mono_signature_get_param_count_Fun mono_signature_get_param_count ;
static Mono_domain_set_config_Fun mono_domain_set_config ;
static Mono_array_new_Fun mono_array_new ;
static Mono_get_string_class_Fun mono_get_string_class;
static Mono_assembly_getrootdir_Fun mono_assembly_getrootdir ;
static Mono_set_dirs_Fun mono_set_dirs ;
static Mono_config_parse_Fun mono_config_parse ;
static Mono_set_assemblies_path_Fun mono_set_assemblies_path ;
static Mono_object_to_string_Fun mono_object_to_string;
static Mono_string_to_utf8_Fun mono_string_to_utf8 ;
static Mono_free_Fun mono_free;
static Mono_image_open_from_data_with_name_Fun mono_image_open_from_data_with_name ;
static Mono_assembly_load_from_full_Fun mono_assembly_load_from_full ;
static Mono_jit_parse_options_Fun mono_jit_parse_options ;
static Mono_debug_init_Fun mono_debug_init ;
static Mono_debug_domain_create_Fun mono_debug_domain_create;
static Mono_debug_enabled_Fun mono_debug_enabled ;
};
#endif
hook 头文件
#include "pch.h"
#include "Mono.h"
#include "MonoFun.h"
Mono_thread_current_Fun MonoFun::mono_thread_current;
Mono_thread_set_main_Fun MonoFun::mono_thread_set_main;
Mono_jit_init_version_Fun MonoFun::mono_jit_init_version;
Mono_domain_assembly_open_Fun MonoFun::mono_domain_assembly_open;
Mono_assembly_get_image_Fun MonoFun::mono_assembly_get_image;
Mono_runtime_invoke_Fun MonoFun::mono_runtime_invoke;
Mono_method_desc_new_Fun MonoFun::mono_method_desc_new;
Mono_method_desc_search_in_image_Fun MonoFun::mono_method_desc_search_in_image;
Mono_method_desc_free_Fun MonoFun::mono_method_desc_free;
Mono_method_signature_Fun MonoFun::mono_method_signature;
Mono_signature_get_param_count_Fun MonoFun::mono_signature_get_param_count;
Mono_domain_set_config_Fun MonoFun::mono_domain_set_config;
Mono_array_new_Fun MonoFun::mono_array_new;
Mono_get_string_class_Fun MonoFun::mono_get_string_class;
Mono_assembly_getrootdir_Fun MonoFun::mono_assembly_getrootdir;
Mono_set_dirs_Fun MonoFun::mono_set_dirs;
Mono_config_parse_Fun MonoFun::mono_config_parse;
Mono_set_assemblies_path_Fun MonoFun::mono_set_assemblies_path;
Mono_object_to_string_Fun MonoFun::mono_object_to_string;
Mono_string_to_utf8_Fun MonoFun::mono_string_to_utf8;
Mono_free_Fun MonoFun::mono_free;
Mono_image_open_from_data_with_name_Fun MonoFun::mono_image_open_from_data_with_name;
Mono_assembly_load_from_full_Fun MonoFun::mono_assembly_load_from_full;
Mono_jit_parse_options_Fun MonoFun::mono_jit_parse_options;
Mono_debug_init_Fun MonoFun::mono_debug_init;
Mono_debug_domain_create_Fun MonoFun::mono_debug_domain_create;
Mono_debug_enabled_Fun MonoFun::mono_debug_enabled;
FARPROC MonoFun::mono_fun_init(HMODULE hModule) {
FARPROC result =NULL; // eax
mono_thread_current =(Mono_thread_current_Fun) GetProcAddress(hModule, "mono_thread_current");
mono_thread_set_main = (Mono_thread_set_main_Fun)GetProcAddress(hModule, "mono_thread_set_main");
mono_jit_init_version = (Mono_jit_init_version_Fun)GetProcAddress(hModule, "mono_jit_init_version");
mono_domain_assembly_open = (Mono_domain_assembly_open_Fun)GetProcAddress(hModule, "mono_domain_assembly_open");
mono_assembly_get_image = (Mono_assembly_get_image_Fun)GetProcAddress(hModule, "mono_assembly_get_image");
mono_runtime_invoke = (Mono_runtime_invoke_Fun)GetProcAddress(hModule, "mono_runtime_invoke");
mono_method_desc_new = (Mono_method_desc_new_Fun)GetProcAddress(hModule, "mono_method_desc_new");
mono_method_desc_search_in_image = (Mono_method_desc_search_in_image_Fun)GetProcAddress(hModule, "mono_method_desc_search_in_image");
mono_method_desc_free = (Mono_method_desc_free_Fun)GetProcAddress(hModule, "mono_method_desc_free");
mono_method_signature = (Mono_method_signature_Fun)GetProcAddress(hModule, "mono_method_signature");
mono_signature_get_param_count = (Mono_signature_get_param_count_Fun)GetProcAddress(hModule, "mono_signature_get_param_count");
mono_domain_set_config = (Mono_domain_set_config_Fun)GetProcAddress(hModule, "mono_domain_set_config");
mono_array_new = (Mono_array_new_Fun)GetProcAddress(hModule, "mono_array_new");
mono_get_string_class = (Mono_get_string_class_Fun)GetProcAddress(hModule, "mono_get_string_class");
mono_assembly_getrootdir = (Mono_assembly_getrootdir_Fun)GetProcAddress(hModule, "mono_assembly_getrootdir");
mono_set_dirs = (Mono_set_dirs_Fun)GetProcAddress(hModule, "mono_set_dirs");
mono_config_parse = (Mono_config_parse_Fun)GetProcAddress(hModule, "mono_config_parse");
mono_set_assemblies_path = (Mono_set_assemblies_path_Fun)GetProcAddress(hModule, "mono_set_assemblies_path");
mono_object_to_string = (Mono_object_to_string_Fun)GetProcAddress(hModule, "mono_object_to_string");
mono_string_to_utf8 = (Mono_string_to_utf8_Fun)GetProcAddress(hModule, "mono_string_to_utf8");
mono_free = (Mono_free_Fun)GetProcAddress(hModule, "mono_free");
mono_image_open_from_data_with_name = (Mono_image_open_from_data_with_name_Fun)GetProcAddress(hModule, "mono_image_open_from_data_with_name");
mono_assembly_load_from_full = (Mono_assembly_load_from_full_Fun)GetProcAddress(hModule, "mono_assembly_load_from_full");
mono_jit_parse_options = (Mono_jit_parse_options_Fun)GetProcAddress(hModule, "mono_jit_parse_options");
mono_debug_init = (Mono_debug_init_Fun)GetProcAddress(hModule, "mono_debug_init");
mono_debug_domain_create = (Mono_debug_domain_create_Fun)GetProcAddress(hModule, "mono_debug_domain_create");
mono_debug_enabled = (Mono_debug_enabled_Fun)GetProcAddress(hModule, "mono_debug_enabled");
return result;
}
FARPROC MonoFun::InitVerionApiDebug(HMODULE hModule, LPCSTR lpString1) {
bool IsglobaFlag = false;
if (lstrcmpA(lpString1, "il2cpp_init"))
{
if (lstrcmpA(lpString1, "mono_jit_init_version"))
{
if (lstrcmpA(lpString1, "mono_image_open_from_data_with_name"))
{
if (lstrcmpA(lpString1, "mono_jit_parse_options"))
{
if (lstrcmpA(lpString1, "mono_debug_init"))
{
return GetProcAddress(hModule, lpString1);
}
else
{
if (!IsglobaFlag)
{
IsglobaFlag = true;
//sub_10001BA1(hModule);
mono_fun_init(hModule);
}
//return sub_100026B7;
}
}
else
{
if (!IsglobaFlag)
{
IsglobaFlag = true;
//sub_10001BA1(hModule);
mono_fun_init(hModule);
}
//return (FARPROC)&sub_100027D1;
}
}
else
{
if (!IsglobaFlag)
{
IsglobaFlag = true;
//sub_10001BA1(hModule);
mono_fun_init(hModule);
}
//return (FARPROC)sub_100026C7;
}
}
else
{
if (!IsglobaFlag)
{
IsglobaFlag = true;
//sub_10001BA1(hModule);
mono_fun_init(hModule);
}
//return (FARPROC)sub_10002AA7;
}
}
else
{
if (!IsglobaFlag)
{
IsglobaFlag = true;
//sub_10001EEB(hModule);
}
//return sub_10002A7F;
}
return GetProcAddress(hModule, lpString1);
}
hook 函数声明
#ifndef _MONO_H_
#define _MONO_H_
typedef bool gboolean;
typedef unsigned short guint16;
typedef unsigned int guint32;
typedef bool mono_bool;
typedef int int32_t;
typedef struct _MonoMethodDesc {
char* name_space;
char* klass;
char* name;
char* args;
} MonoMethodDesc;
typedef struct _MonoImage {
int ref_count;
void* raw_data_handle;
char* raw_data;
unsigned int raw_data_len;
//Others...
} MonoImage;
typedef struct _MonoAssembly {
//Others...
} MonoAssembly;
typedef struct _MonoMethod {
guint16 flags; /* method flags */
guint16 iflags; /* method implementation flags */
guint32 token;
void* klass; /* To what class does this method belong */
void* signature;
/* name is useful mostly for debugging */
const char* name;
/* this is used by the inlining algorithm */
unsigned int inline_info : 1;
unsigned int inline_failure : 1;
unsigned int wrapper_type : 5;
unsigned int string_ctor : 1;
unsigned int save_lmf : 1;
unsigned int dynamic : 1; /* created & destroyed during runtime */
unsigned int sre_method : 1; /* created at runtime using Reflection.Emit */
unsigned int is_generic : 1; /* whenever this is a generic method definition */
unsigned int is_inflated : 1; /* whether we're a MonoMethodInflated */
unsigned int skip_visibility : 1; /* whenever to skip JIT visibility checks */
unsigned int _unused : 2; /* unused */
signed int slot : 16;
} MonoMethod;
typedef struct _MonoMethodSignature {
void* ret;
} MonoMethodSignature;
typedef enum {
MONO_DEBUG_FORMAT_NONE,
MONO_DEBUG_FORMAT_MONO,
/* Deprecated, the mdb debugger is not longer supported. */
MONO_DEBUG_FORMAT_DEBUGGER
} MonoDebugFormat;
typedef struct _MonoObject {
void* vtable;
void* synchronisation;
} MonoObject;
typedef enum {
MONO_IMAGE_OK,
MONO_IMAGE_ERROR_ERRNO,
MONO_IMAGE_MISSING_ASSEMBLYREF,
MONO_IMAGE_IMAGE_INVALID
} MonoImageOpenStatus;
typedef MonoImage* (*Mono_image_open_from_data_with_name_Fun) (char* data, unsigned int data_len, bool need_copy, MonoImageOpenStatus* status, bool refonly, const char* name);
typedef MonoAssembly* (*Mono_assembly_load_from_full_Fun) (MonoImage* image, const char* fname, MonoImageOpenStatus* status, gboolean refonly);
typedef void (*Mono_jit_parse_options_Fun)(int argc, char* argv[]);
typedef MonoMethodDesc* (*Mono_method_desc_new_Fun)(const char* name, gboolean include_namespace);
typedef MonoMethod* (*Mono_method_desc_search_in_image_Fun)(MonoMethodDesc* desc, MonoImage* image);
typedef void (*Mono_method_desc_free_Fun)(MonoMethodDesc* desc);
typedef MonoMethodSignature* (*Mono_method_signature_Fun)(MonoMethod* method);
typedef guint32 (*Mono_signature_get_param_count_Fun)(MonoMethodSignature* sig);
typedef struct _MonoDomain {
} MonoDomain;
typedef struct _MonoThread {
MonoObject obj;
void* *internal_thread;
MonoObject *start_obj;
void* pending_exception;
} MonoThread;
typedef struct _MonoArray {
MonoObject obj;
/* bounds is NULL for szarrays */
void *bounds;
/* total number of elements of the array */
} MonoArray;
typedef struct _MonoClass {
void* element_class;
void* cast_class;
} MonoClass;
typedef struct _MonoString {
MonoObject object;
int32_t length;
} MonoString;
typedef MonoObject* (*Mono_runtime_invoke_Fun)(MonoMethod* method, void* obj, void** params,MonoObject** exc);
typedef void (*Mono_debug_init_Fun)(MonoDebugFormat format);
typedef void (*Mono_debug_domain_create_Fun)(MonoDomain* domain);
typedef mono_bool (*Mono_debug_enabled_Fun)(void);
typedef void (*Mono_config_parse_Fun)(const char* filename);
typedef void (*Mono_set_assemblies_path_Fun)(const char* path);
typedef void (*Mono_free_Fun) (void *);
typedef MonoImage* (*Mono_assembly_get_image_Fun) (MonoAssembly *assembly);
typedef void (*Mono_domain_set_config_Fun)(MonoDomain *domain, const char *base_dir, const char *config_file_name);
typedef MonoArray* (*Mono_array_new_Fun) (MonoDomain *domain, MonoClass *eclass, uintptr_t n);
typedef MonoClass* (*Mono_get_string_class_Fun) (void);
typedef char* (*Mono_assembly_getrootdir_Fun) (void);
typedef void (*Mono_set_dirs_Fun) (const char *assembly_dir, const char *config_dir);
typedef MonoThread* (*Mono_thread_current_Fun) (void);
typedef void (*Mono_thread_set_main_Fun) (MonoThread *thread);
typedef MonoDomain* (*Mono_jit_init_version_Fun)(const char *root_domain_name, const char *runtime_version);
typedef MonoAssembly* (*Mono_domain_assembly_open_Fun) (MonoDomain* domain, const char* name);
typedef MonoString* (*Mono_object_to_string_Fun) (MonoObject *obj, MonoObject **exc);
typedef char* (*Mono_string_to_utf8_Fun) (MonoString* s);
#endif