.NET Frameworkのマネージドコードを注入して実行(新型32ビット版「UsaMimi32.exe」および64ビット版「UsaMimi64.exe」用)
.NET Frameworkのマネージドコードを注入して実行の概要と基本操作
●概要と注意事項この機能では、対象プロセスにCLR(共通言語ランタイム)をロードさせ、さらに.NET
Framework用の任意のマネージドコードを注入して実行させます。 たとえば対象プロセスにマネージドコードを注入して、自作したデバッグ画面のようなウィンドウを表示させ、同ウィンドウから対象プロセスのプロセスメモリ書き換え等、各種操作を行うことが可能になります。当機能を簡単に試せるように、試行用サンプル「DotNETManagedcodeInjectSample.dll」を同梱しています。「DotNETManagedcodeInjectSample.dll」は、32ビットと64ビット両方のプロセスで使用できるよう「Any CPU」設定でコンパイルしています。 この機能で対象プロセスにロードさせるCLRは、システムにインストールされている.NET Framework4.xです。Windows 11ならばCLRが4.8に対応しているため、実行させるマネージドコードを含むアセンブリの対象フレームワークは、4でも4.8でも対応可能になります。一方、Windows 7ならば、プレインストールされていない.NET Framework4.xのインストールが必要になります。 当機能が適用可能なプロセスは、CLRが読み込まれていない非.NET Frameworkアプリケーションのプロセス、あるいはすでに.NET Framework4.xのCLRが読み込まれているプロセスです。当ソフトウェア同梱では、UsaTest2.EXE、UsaTest2_x64.exeおよび、ResStrView_DotNET40.exeなどのプロセスが該当します。また、.NET Frameworkではない.NET 6アプリケーションにも使用可能です。なお、仕様上は.NET Framework3.5/2.0/1.1用のCLRが読み込まれているプロセスにも使用可能ですが、その動作確認は行っていません。 注入したマネージドコードの再実行は可能ですが、その処理内容によっては、高頻度で再実行を繰り返すと動作不具合が生じる可能性があります。 |
●参考スクリーンショット
●基本的な操作の流れ
■同梱サンプルでの指定例を入力 「同梱サンプルでの指定例を入力」ボタンで、当ソフトウェア『うさみみハリケーン』に同梱しているサンプル「DotNETManagedcodeInjectSample.dll」を解析対象プロセスに読み込ませて、そのマネージドコードを実行させるために必要な入力を、自動で行います。このため、自作のマネージドコードを含むDLLでも、上記サンプルと同じタイプ名やメソッド名にすれば、入力の簡易化が図れます。「入力欄をクリア」ボタンで、入力欄をクリアします。 ■アセンブリ 解析対象プロセスに読み込ませるアセンブリのパスを指定します。アセンブリは32ビット/64ビット兼用の「Any CPU」設定でコンパイルしたものも指定可能です。 ■タイプ名 同梱サンプルの例を参考に、実行させるメソッドを含む namespace名+ピリオド+クラス名を指定してください。 ■実行させるメソッド名 同梱サンプルの例を参考に、実行させるメソッド名を指定してください。 このメソッドは、static int pwzMethodName (String pwzArgument) 形式が必須です。 ■指定メソッドに渡す引数文字列 上で指定したメソッドの引数文字列を指定します。引数文字列は必須ではありません。 ■対象プロセスでのCLRロード用DLL名 CLRをロードするための、対象プロセスのビット数に応じた「DotNETManagedcodeInjector.dll」(32ビット版)あるいは「DotNETManagedcodeInjector64.dll」(64ビット版)を指定します。このDLL名は当機能側であらかじめ入力していますが、解析対象プロセスの解析対策などが原因で支障が生じる場合には、当機能のダイアログを表示する前にDLL名をリネームしておき、そのリネームしたDLL名を指定します。 ■対象プロセスにCLRをロードさせてから上指定アセンブリのマネージドコードを注入してメソッド実行 入力された内容を基に、対象プロセスにCLRをロードさせ、さらに指定アセンブリ内の指定メソッドを実行させます。指定メソッドの再実行も可能です。 ■対象プロセスを実行停止/再開 必要に応じて、一連の処理の前後といった任意のタイミングで、対象プロセスの実行を停止および再開できるようにしています。「対象プロセスを実行停止/再開」チェックボックスでチェックをすれば停止、チェックを外せば再開です。 ■マルウェア対策 当ソフトウェアのメニュー「編集」→「オプション」にある「その他の設定」タブで、「マルウェア対策としてウィンドウタイトル/クラス名を変更(実行ファイル名の変更も推奨)」を有効にしておけば、当ダイアログのウィンドウタイトルをランダムな文字列に変更します。 |
●同梱サンプル「DotNETManagedcodeInjectSample.dll」のソースコード(Class1.cs)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; using LoadManagedInjectSample;//操作用画面Form1のnamespace namespace RunManaged { public class Program { static int CodeEntry(String pwzArgument) { System.Media.SystemSounds.Beep.Play(); //操作用画面を表示 Form1 form = new Form1(); form.pwzArgument = pwzArgument;//class Form1内に指定した public string pwzArgument; に引数を渡す Application.Run(form); /* //テスト用 MessageBox.Show( "このメッセージは注入されたマネージドコードで表示しています\n\n" + "注入対象プロセス: [" + System.Diagnostics.Process.GetCurrentProcess().ProcessName + "]\n\n" + (String.IsNullOrEmpty(pwzArgument) ? "メソッド引数文字列なし" : "メソッド引数文字列: [" + pwzArgument + "]"), "お知らせ", MessageBoxButtons.OK, MessageBoxIcon.Information); */ return 0; } static void Main(string[] args) { CodeEntry("Main()から呼び出されました"); } } } |