Эзотерическое программирование
Здравствуйте, меня зовут Александр, мне 21 год и я наркоман программист.
В этом цикле статей не будет историй о эзотерических ЯП, но будет достаточно наглядный пример применения оккультных знаний в шарпе.
Managed Injection
Думаю как вы уже поняли, дальше речь пойдет о внедрении управляемого кода в адресное пространство другого приложения. Я полагаю вы понимаете какие границы это открывает для читера, и не только.
Для работы нам потребуется «прослойка» на плюсах, она будет выполнять роль посредника при загрузке нашего инжекта.
Код:
#include <Windows.h>
#include <mscoree.h>
#include <metahost.h>
#include <wchar.h>
#include <fstream>
#pragma comment(lib, "mscoree.lib")
DWORD WINAPI Inject_Thread(LPVOID lpParam)
{
ICLRMetaHost * lpMetaHost = NULL;
HRESULT hr = CLRCreateInstance(CLSID_CLRMetaHost, IID_ICLRMetaHost,
(LPVOID *)&lpMetaHost);
ICLRRuntimeInfo * lpRuntimeInfo = NULL;
hr = lpMetaHost->GetRuntime(
L"v4.0.30319", // Версия фреймворка
IID_ICLRRuntimeInfo,
(LPVOID *)&lpRuntimeInfo);
ICLRRuntimeHost * lpRuntimeHost = NULL;
hr = lpRuntimeInfo->GetInterface(CLSID_CLRRuntimeHost,IID_ICLRRuntimeHost,
(LPVOID *)&lpRuntimeHost);
hr = lpRuntimeHost->Start();
DWORD dwRetCode = 0;
hr = lpRuntimeHost->ExecuteInDefaultAppDomain(
L"DLL_PATH", // Абсолютный путь к сборке
L"Namespace.Class", // Пространство имен и класс
L"MethodName", // Имя статического метода
L"MethodParam", // Параметры метода
&dwRetCode);
return 0;
}
DWORD APIENTRY DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved)
{
switch (dwReason)
{
case DLL_PROCESS_ATTACH:
CreateThread(NULL, NULL, Inject_Thread, NULL, NULL, NULL);
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
default:
break;
}
return true;
}
Остается только заполнить прокомментированные строки в приведенном коде и скомпилировать библиотеку.
Теперь можно инжектить полученную библиотеку в нужный нам процесс любым инжектором, а она в свою очередь подтянет и запустит нужный нам код.
В следующей статье будет небольшое знакомство с «Белой магией», библиотекой на C# созданной что бы облегчить нам жизнь при работе с хуками.
Мини-пруф:
[Ссылки могут видеть только зарегистрированные пользователи. ]
Пример можно найти на GitHub'е [Ссылки могут видеть только зарегистрированные пользователи. ]
PDF версия [Ссылки могут видеть только зарегистрированные пользователи. ]