Дистанционный впрыск

0

Итак, я вставляю код в память другого процесса вроде этого:

void RemoteInj::ExecuteFunction(DWORD Start, DWORD End, DWORD Entry, RemoteArgs* Args)
{
    unsigned long Id;
    int size = End - Start;
    cout << size << endl;
    void* Func = VirtualAllocEx(hProcess, NULL, size+10, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    void* ep = (void*)(Entry-Start+(DWORD)(Func));
    WriteProcessMemory(hProcess, Func, (void*)Start, size, NULL);
    void* Data = VirtualAllocEx(hProcess, NULL, sizeof(RemoteArgs)+1, MEM_COMMIT, PAGE_READWRITE);
    WriteProcessMemory(hProcess, Data, (void*)Args, sizeof(RemoteArgs), NULL);
    cout << hex << Func << endl;
    cout << "Function: 0x" << hex << Start << endl << "End: 0x" << hex << End << endl;
    system("PAUSE");
    CreateRemoteThread(hProcess, NULL, NULL, (LPTHREAD_START_ROUTINE)ep, Data, NULL, NULL);
    CloseHandle(hProcess);
}

Моя проблема: если я использую вызовы в этом потоке, например:

void F(RemoteArgs* arg)
{
    while (true)
    {
        arg->pSleep(50); //Works
                Sleep(50); //doesnt work
    }
    return;
}

Не нужно объяснять, почему это не работает, я знаю, это другой процесс... Мой вопрос: есть ли способ сделать такую функцию (Sleep()), я мог бы попробовать импортировать в этот процесс и IAT на правильном расстоянии, у вас есть идея лучше? Спасибо!

Теги:
winapi

1 ответ

0

Как вы подозреваете, причина, по которой это не работает сразу с места в карьер, заключается в том, что вызов Sleep в вашем процессе фактически переходит в местоположение в вашей таблице адресов импорта (IAT), которая имеет переход к реальной реализации сна в kernel32.dll, Несмотря на то, что другой процесс также импортирует файл kernel32.dll (все процессы выполняются), он, очевидно, не имеет идентичного IAT.

Есть способы, но ничто из того, что я знаю, тривиально.

  • 0
    Не могли бы вы поделиться своими знаниями?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню