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