C++代码注入使注入的应用程序崩溃

C++ Code Injection crashes injected application

本文关键字:注入 应用程序 崩溃 代码 C++      更新时间:2023-10-16

我正试图将一个简单的可执行文件注入我制作的另一个可执行文件中,不幸的是,每当我将代码注入可执行文件时,它都会说"simpleinjected.exe已停止工作",然后关闭。我正在使用CreateRemoteThread来注入代码。这就是我迄今为止所做的。

Injector.exe//正在注入代码的文件

#include <stdio.h>
#include <windows.h>
#define procId 2844
#define executable "executable.exe"    // located in same directory
int main()
{
    HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, false, procId);
    LPVOID allocated = (LPVOID)VirtualAllocEx(hProc, NULL, strlen(executable), MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);
    WriteProcessMemory(hProc, (LPVOID)allocated, executable, strlen(executable), NULL);
    LPVOID libaddr = (LPVOID)GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA");
    CreateRemoteThread(hProc, NULL, NULL, (LPTHREAD_START_ROUTINE)libaddr, NULL, NULL);
    CloseHandle(hProc);
    return 0;
}

Simpleinjected.exe//要注入的文件

#include <stdio.h>
int main()
{
    printf("Hello");
    return 0;
}

executable.exe//被注入simple-injected 的可执行文件

#include <windows.h>
int main()
{
    MessageBox(NULL, "Injected successfully", "Code Injection", MB_OK);
    return 0;
}

消息未显示,simpleinjected.exe崩溃。崩溃表明代码被插入,但我不明白为什么它会崩溃。

当使用DLL和上面相同的技术时,DLL在"simpleinjected.exe"中执行,但在注入Firefox时不起作用。dll代码如下。它在自定义应用程序中执行,但不会在Firefox中执行,即使它已成功注入。

dllinject.dll

#include <windows.h>
int message(const char *msg)
{
    MessageBox(NULL, msg, "Message from Dll", MB_OK);
    return 0;
}
BOOL WINAPI DLLMain(HINSTANCE hInstDll, DWORD ulReason, LPVOID lpReserved)
{
    switch(ulReason)
    {
        case DLL_PROCESS_ATTACH:
            message("process attach");
            break;
        case DLL_THREAD_ATTACH:
            message("thread attach");
            break;
        case DLL_PROCESS_DETACH:
            message("process detach");
            break;
        case DLL_THREAD_DETACH:
            message("thread detach");
            break;
    }
    return true;
}

修改了Simpleinjected.exe的代码如下。然后再次尝试将dllinject.dll注入Simpleinjected.exe。

#include <stdio.h>
int main()
{
   while(true)
   {
      printf("Hello");
   }
   return 0;
}

您应该将下面的定义修改为与Simpleinjected.exe.相同

#define procId 2844 //process id of Simpleinjected.exe
#define executable "dllinject.dll"    // located in same directory