远程注入

Remote Injection

本文关键字:注入 程注入      更新时间:2023-10-16

所以,我正在将代码注入此类过程中:

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(sleep())工作,我可以尝试导入到进程还具有适当的距离,您有一个更好的主意吗?谢谢!

正如您所怀疑的那样,这不立即起作用的原因是,在您的流程中睡觉的电话实际上转到了您的导入地址表(IAT)中的位置(IAT)在kernel32.dll中跳到真实的睡眠实现。即使另一个过程也导入kernel32.dll(所有过程都可以),但显然它没有相同的IAT。

有一些方法,但我知道没有一个很琐碎的。