почему CreateRemoteThread вызывает аварийное завершение ввода цели - PullRequest
0 голосов
/ 19 июня 2019

Обновление от 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 длявыделить место.

1 Ответ

0 голосов
/ 19 июня 2019

Одна проблема, которую я вижу, заключается в том, что вы не можете выполнить VirtualFree targetFuncSpace, пока не завершится выполнение удаленного потока в целевом процессе.

Также WriteProcessMemory копирует CODE_SPACE_SIZE (4096) байтов из hand_asm, который составляет всего 100 байтов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...