gpt4 book ai didi

c++ - 调用远程设置 EAX 和 ECX 的函数

转载 作者:行者123 更新时间:2023-11-28 02:38:24 25 4
gpt4 key购买 nike

我试图在运行时和远程启动驻留在另一个程序中的函数。

使用 ollydbg 我得到了函数地址,我使用 CreateRemoteThread要启动此函数,它实际上会运行此函数,但它会收到两个参数,如果没有这些参数,程序就会崩溃。

问题是这个函数从 EAX 和 ECX 获取参数/参数,在它被调用之前被推送到这个函数(这两个值都是从 1 到 576 的矩阵坐标~~)

Function its called at 10038B1 and recives ECX and EAX

Createremotethread没有用于插入参数,我尝试使用 struct 来使用多个 (2) 个参数,但寄存器中的值没有改变。

如何通过从另一个不同的程序启动并设置这两个寄存器来使该功能在另一个程序上运行?

这是我在0x01003084调用线程执行这个函数的代码

    struct tagRemoteThreadParams //didnt worked
{
int Param1;
int Param2;
} RemoteThreadParams, *PRemoteThreadParams;


RemoteThreadParams.Param1 = 0x00000001;//didnt worked
RemoteThreadParams.Param2 = 0x00000001;//didnt worked


int address=0x010038B1; // 0x01003084 -- 0x01002FE0 -- 0x01003512 //Some addresses

RedrawWindow(Find,NULL,NULL,RDW_ERASE|RDW_INVALIDATE|RDW_INTERNALPAINT|RDW_FRAME); //my program stuff

DWORD rc;

//this is where i call the function
CreateRemoteThread(hProcess,NULL,NULL,(LPTHREAD_START_ROUTINE)address,&RemoteThreadParams,0,&rc);

rc = WaitForSingleObject( hProcess, 30000 );
CloseHandle(hProcess);
VirtualFreeEx(hProcess, (LPVOID)address, 0, MEM_RELEASE | MEM_DECOMMIT);

请记住,我不想使用 DLL 注入(inject)(这不是我要搜索的),我实际上只想用一个代码来实现。谢谢。

最佳答案

您唯一的解决方案实际上是将代码注入(inject)到正确设置寄存器的其他进程中,然后调用您要调用的函数。 CreateRemoteThread 具有严格的调用约定,因此您不能强制它在入口时具有特定的寄存器值。

另一种选择是使用 debug functionality在 Windows 中更改寄存器内容,但这需要您在正确的位置[在正确的线程中]停止代码并在继续之前设置寄存器。这很棘手,而且大多数应用程序(假设我们正在统计游戏等)都有保护措施以防止调试功能“扰乱”它们的状态。

关于c++ - 调用远程设置 EAX 和 ECX 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26788694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com