首先写一个注入用的 DLL:
// stdafx.h
#include <objbase.h>
#include <MetaHost.h>
#include <cassert>
// ProxyDll.cpp
#define ASSEMBLY_NAME L"Launcher.exe"
#define LOADER_TYPE L"moe.jixun.Inject"
#define LOADER_FUNCTION L"Init"
__declspec(dllexport) void Bootstrap() {
CoInitializeEx(0, COINIT_MULTITHREADED);
ICLRMetaHost *pMetaHost = nullptr;
HRESULT hr = CLRCreateInstance(CLSID_CLRMetaHost, IID_ICLRMetaHost, (LPVOID*)&pMetaHost);
ICLRRuntimeInfo *pRuntimeInfo = nullptr;
pMetaHost->GetRuntime(L"v4.0.30319", IID_ICLRRuntimeInfo, (LPVOID*)&pRuntimeInfo);
ICLRRuntimeHost *pClrRuntimeHost = nullptr;
pRuntimeInfo->GetInterface(CLSID_CLRRuntimeHost, IID_ICLRRuntimeHost, (LPVOID*)&pClrRuntimeHost);
pClrRuntimeHost->Start();
DWORD dReturnValue;
hr = pClrRuntimeHost->ExecuteInDefaultAppDomain(ASSEMBLY_NAME, LOADER_TYPE, LOADER_FUNCTION, L"Test", &dReturnValue);
assert(hr == S_OK);
}
因为 .net 的 exe 可以当做库来用,可以直接把代码写到我们的 exe 然后注入进去执行。
…
继续阅读 »