今からでも間に合う

技術を学ぶのは今からでも遅くない

Friendlyを使って簡単にDLLインジェクション

昔からお世話になってるライブラリ

Codeer さんで開発されているFriendlyというライブラリ。
最近またお世話になったので紹介も込めて。

Friendlyって?

本家で紹介されてるので一言でいうと、変態ツール。

今回はこのライブラリを使ってDLLインジェクションを簡単に実現してみた。

環境

  • VS2022
  • .NET6

構成

プロジェクト 用途
Friendly_DLLInjection DLLを注入したい対象exe
InjectorApp DLLを注入するためのテストexe
InjectTarget 注入したいdll

それぞれのプロジェクトに依存関係はない。

説明

InjectTarget
namespace InjectTarget
{
    public class InjectTarget
    {
        public static void ShowMyself()
        {
            MessageBox.Show($"{Path.GetFileName(Application.ExecutablePath)}");
        }
    }
}

誰がロードしてるのかを確認するためのテストコード。
今回やるのはこれだけ。

Friendly_DLLInjection
public partial class Form1 : Form
{
    private void Form1_Load(object sender, EventArgs e)
    {
        AppDomain.CurrentDomain.AssemblyLoad += CurrentDomain_AssemblyLoad;
    }

    private void CurrentDomain_AssemblyLoad(object? sender, AssemblyLoadEventArgs args)
    {
        textBox1.Text += args.LoadedAssembly.FullName + Environment.NewLine;
    }
}

こちらも動作確認用。
DLLがロードされたらそれを表示するだけ。

InjectorApp

Codeer.Friendly.Windows(2.16.0)のnugetパッケージを追加

private void _buttonInject_Click(object sender, EventArgs e)
{
    //インジェクション対象のアプリを起動
    var p = Process.Start(@"C:\Users\ABC\source\repos\Friendly_DLLInjection\Friendly_DLLInjection\bin\Debug\net6.0-windows\Friendly_DLLInjection.exe");

    //起動したアプリをFriendlyでアタッチ
    var app = new WindowsAppFriend(p);

    //インジェクションしたいDLLをロード
    var asm = Assembly.LoadFrom(@"C:\Users\ABC\source\repos\Friendly_DLLInjection\InjectTarget\bin\Debug\net6.0-windows\InjectTarget.dll");

    //インジェクション対象アプリにDLLを注入
    WindowsAppExpander.LoadAssembly(app, asm);

    //対象アプリ内で、ロードさせたDLLのメソッドを呼び出す
    app.Type("InjectTarget.InjectTarget").ShowMyself();
}

メイン。だけどこれだけ。すごい。

実行してみる

目的のアプリ内でロード、実行されている

ソース

github.com

おしまい

楽ちん

プライバシーポリシー


d払いポイントGETモール