3

マルウェア分析ソフトウェアを作成したいのですが、プロセスのさまざまな kernel32 関数にコードを挿入する必要があります。たとえば、マルウェアが作成しようとするスリープを上書きする Sleep や、プロセスを強制終了する前にメモリをダンプする ExitProcess などです。

プロセスを中断して開始しようとした後、kernel32 rva を取得できることを期待してライブラリを列挙しようとしましたが、プロセスを中断して開始すると、ライブラリがロードされていないようです。

4

1 に答える 1

5

達成しようとしていることは、EasyHook API を使用して簡単に実行できます。API は、

https://github.com/EasyHook/EasyHook

以下は、Kernel32.dll から CreateFile をオーバーライドするサンプルです。CreateAndInjectメソッドを実行する必要があります

EasyHook.RemoteHooking.CreateAndInject(
                    targetExe,          // executable to run
                    "",                 // command line arguments for target
                    0,                  // additional process creation flags to pass to CreateProcess
                    EasyHook.InjectionOptions.DoNotRequireStrongName, // allow injectionLibrary to be unsigned
                    injectionLibrary,   // 32-bit library to inject (if target is 32-bit)
                    injectionLibrary,   // 64-bit library to inject (if target is 64-bit)
                    out targetPID,      // retrieve the newly created process ID
                    channelName         // the parameters to pass into injected library
                                        // ...
                );

重要なのは、プロセスのメイン スレッド ID をフック DLL に送信し、その DLL がパッチを適用してメイン スレッドを起動することです。以下のようにEasyHookで行われます

if((hThread = OpenThread(THREAD_SUSPEND_RESUME, FALSE, ThreadID)) == NULL)
    THROW(STATUS_INTERNAL_ERROR, L"Unable to open wake up thread.");

if(!ResumeThread(hThread))
    THROW(STATUS_INTERNAL_ERROR, L"Unable to resume process main thread.");

残りのフッキング プロセスは、プロセスを開き、ペイロードを送信するためにそのメモリに書き込むことによって、他の Windows プロセスで行われるのと同じです。

PS: サンプル メモ帳アプリケーションのファイル監視に関する詳細な例が必要な場合は、以下を参照してください。

https://easyhook.github.io/tutorials/remotefilemonitor.html

その他のチュートリアルのソース コードは、次のサイトで入手できます

https://github.com/EasyHook/EasyHook-Tutorials

于 2017-10-26T17:10:00.217 に答える