C++代码注入导致被注入的应用程序崩溃

3

我正在尝试将一个简单可执行文件注入到另一个我制作的可执行文件中,但不幸的是,每当我将代码注入到可执行文件中时,它就会显示“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 // 被注入到 simpleinjected 中的可执行文件

#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;
}

注入 DLL 到别人的进程已经够难了,更何况是另一个 可执行文件 呢? - WhozCraig
所以这是不可能的吗? - David
那么我该如何将代码注入到另一个进程中呢? - David
编写一个DLL并按照网络上提供的任何教程进行操作。 - WhozCraig
1
我对DLL注入很感兴趣,不是为了解决任何问题,只是满足自己的好奇心。 - David
显示剩余9条评论
1个回答

1

我修改了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

可以在simpleinjected.exe中进行注入,它可以工作,但无法在Firefox中进行注入。 - David
该问题的依赖注入标签错误。该问题是关于向EXE注入的。 - CoffeDeveloper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接