Обновление от 2019/6/19:
Мой env - win10, причина в том, что этот код не работает на win10?
Origin:
Я использую этокод для внедрения int foo() {return 0}
в целевой процесс.Но это приводит к сбою целевого процесса.
Все решение здесь: 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
длявыделить место.