備忘録

備忘録

C#でDLLをInjectする方法

Ⅰ. はじめに

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

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

  • CreateRemoteThread
  • ManualMap
  • ThreadHijack

Ⅱ. やり方

1. NuGetから Bleak をインストールする
dotnet add package Bleak --version 3.1.1
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

using Bleak;

var injector = new Injector("notepad", "TestDLL.dll", InjectionMethod.ManualMap, InjectionFlags.RandomiseDllHeaders);
injector.InjectDll();

実行結果