2

C++ で DLL インジェクションを実行しようとしています。ただし、VirtualFreeEx は常に失敗するため、コードをクリーンアップできません。

ここに私がやっている方法の例があります

void *stubBase = VirtualAllocEx(
        hProcess,
        NULL,
        MakeDelta(SIZE_T, DllCallStubEnd, DllCall_Stub),
        MEM_COMMIT | MEM_RESERVE,
        PAGE_EXECUTE_READWRITE);

    if( !stubBase )
    {
        VirtualFreeEx(hProcess, moduleBase, 0, MEM_RELEASE);
        delete[] dllBin;
        return false;
    }

この場合、moduleBase は有効なアドレスを指しており、成功しています。ただし、無料は常に失敗します。また、別のケースでは、特定のメモリ位置を解放したい (すべてのプロセスを再開した後)。VirtualFreeEx(hProcess, ImageBase, 0, MEM_RELEASE) を呼び出しますが、これも同じエラーで失敗します。

型キャストされる前の私のイメージベースは次のとおりです。

unsigned long ImageBase = ntHd->OptionalHeader.ImageBase;
4

0 に答える 0