于2019/6/19更新:
我的环境是win10,原因是这段代码在win10上不起作用?
来源:
我使用此代码仅将int foo() {return 0}
注入目标进程。但这会导致目标进程崩溃。
整个vs解决方案在这里:https://github.com/huhuang03/test/tree/master/win/InjectHelloWorld。包括InjectMe和InjectByCode。
char hand_asm[100] = {0xC3}; // 0xc3 is the retn assembly
if (!WriteProcessMemory(h_target, targetFuncSpace, &hand_asm, CODE_SPACE_SIZE, NULL)) {
showError(L"Cna't write targetFuncSpace");
return EXIT_FAILURE;
}
InjectFuncParam param;
LPVOID injectFuncParamSpace = VirtualAllocEx(h_target, NULL, sizeof(param), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
if (!injectFuncParamSpace) {
showError(L"Can't alloc injectFuncParamSpace");
return EXIT_FAILURE;
}
system("pause");
DWORD remoteThreadId = 0;
HANDLE h_remoteThread = CreateRemoteThread(h_target, NULL, 0, (LPTHREAD_START_ROUTINE)targetFuncSpace, injectFuncParamSpace, 0, &remoteThreadId);
if (!h_remoteThread) {
VirtualFreeEx(h_target, injectFuncParamSpace, 0, MEM_RELEASE);
VirtualFreeEx(h_target, targetFuncSpace, 0, MEM_RELEASE);
showError(L"Cant' create rmeote Thread");
return EXIT_FAILURE;
这导致InjectMe崩溃,我找不到调试它的方法。
顺便说一句,我使用ollydbg在targetFuncSpace
处设置了一个断点,但是ollydbg说这不是代码段...为什么,我不得不使用PAGE_EXECUTE_READWRITE
来分配空间。
答案 0 :(得分:0)
我看到的一个问题是,直到目标进程中的远程线程执行完毕,您才能使用VirtualFree targetFuncSpace。
WriteProcessMemory还从hand_asm复制CODE_SPACE_SIZE(4096)个字节,该字节只有100个字节。