winhttp劫持dll

转发类

#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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值