反射DLL注入的代码在stream.open()上崩溃

反射DLL注入的代码在stream.open()上崩溃,dll,reverse-engineering,dll-injection,Dll,Reverse Engineering,Dll Injection,我试图通过反射DLL注入加载库,但调用stream.open()时崩溃;调用fopen()会产生相同的结果 对于反射dll注入,我基本上遵循以下步骤: 在缓冲区中加载dll内容 创建一个文件映射和文件的映射视图,然后在那里复制NT头和节 将映射的内容复制到缓冲区并关闭映射 重新生成导入表 重建重新安置 在目标挂起的进程中分配内存,并在那里复制缓冲区 CreateRemoteThread启动dllMain(当目标进程仍然挂起时) 加载代码并执行dllmain 我的家人看起来像这样: BOOL AP

我试图通过反射DLL注入加载库,但调用stream.open()时崩溃;调用fopen()会产生相同的结果

对于反射dll注入,我基本上遵循以下步骤:

  • 在缓冲区中加载dll内容
  • 创建一个文件映射和文件的映射视图,然后在那里复制NT头和节
  • 将映射的内容复制到缓冲区并关闭映射
  • 重新生成导入表
  • 重建重新安置
  • 在目标挂起的进程中分配内存,并在那里复制缓冲区
  • CreateRemoteThread启动dllMain(当目标进程仍然挂起时)
  • 加载代码并执行dllmain

    我的家人看起来像这样:

    BOOL APIENTRY DllMain( HMODULE hModule,
                           DWORD  ul_reason_for_call,
                           LPVOID lpReserved
                         )
    {
        logFile.open("hookLog.txt", std::ios::out);
        logFile << "DLL Attached\n";
        HRESULT nResult = InitCoCreateInstanceHook();
        logFile << "Hook initialized with result: " << std::to_string(nResult) << "\n";
        logFile.flush();
    }
    
    BOOL-apient-DllMain(HMODULE-HMODULE,
    德沃德·乌尔打电话的理由,
    LPVOID lpReserved
    )
    {
    打开(“hookLog.txt”,std::ios::out);
    
    在调用DllMain之前,您需要调用初始化标准库的日志文件。您正试图通过直接调用DllMain来绕过该初始化。或者您可能可以使用不需要此类初始化的纯WinAPI。感谢您的深入了解。我在技术上调用dll入口点上的执行,如e PE文件。在这种情况下不应该调用_DllMainCrtStartup吗?_DllMainCrtStartup是dll的入口点,因此如果调用它,将调用标准库初始化例程。如果仍然存在问题,则可能需要使用不同属性映射dll的某些部分:RO、RW、EXEC Only。可能是全局v的部分需要修改的变量被映射到只读进程中,因此初始化没有正确完成(虽然在这种情况下我预期会出现页写异常)注入内存区域被分配了页执行读写,也许我仍然应该更改它,但我得到的是访问冲突。