備忘録

備忘録

C#でDLLをInjectする方法

Ⅰ. はじめに

タイトルの通り「C#でDLLをInjectする方法」です。

2019/05/12時点で以下3つのインジェクト方法に対応してます。

  • CreateRemoteThread
  • ManualMap
  • ThreadHijack

Ⅱ. やり方

1. NuGetから Bleak をインストールする
Install-Package Bleak
2. サンプルプログラムを書く

TestDll.cpp

#include <Windows.h>

BOOL WINAPI DllMain(HINSTANCE hinstModule, DWORD dwReason, LPVOID lpvReserved)
{
  if (dwReason == DLL_PROCESS_ATTACH)
  {
    MessageBox(NULL, L"Hello world", L"Info", NULL);

    DisableThreadLibraryCalls(hinstModule);
  }
  return TRUE;
}

Program.cs

static void Main(string[] args)
{
  var injector = new Injector(InjectionMethod.ManualMap, "notepad", "TestDLL.dll");
  injector.InjectDll();
  injector.RandomiseDllHeaders();
}

実行結果

f:id:kagasu:20190512192339p:plain