将sleep()注入外部进程的函数

时间:2011-08-19 15:25:51

标签: c++ c dll inject detours

我知道如何将DLL注入正在运行的进程中,以及如何利用进程内部使用的函数,例如。

void__stdcall remoteMethod(unsigned short id)
{
typedef void (__stdcall *pFunctionAddress)(unsigned short);
pFunctionAddress pMyFunction = (pFunctionAddress)(0xCAFEBABE);
pMyFunction(id);
}

现在我想在运行过程中将sleep()添加到现有方法中 - 这是程序的主循环,并且不会停止一秒并耗尽所有处理能力。

我知道对于像detours这样的框架我可以创建一个调用我的函数然后是原始函数的trampoline函数 - 但是我的问题是while(1)循环在外部进程的函数内。所以我知道循环开始的偏移量 - 之后我想首先调用sleep()然后继续循环的正常路径。

到目前为止,我看到的唯一替代方案是对程序进行二进制编辑,但这不是一个好的解决方案。

有什么建议吗?感谢

4 个答案:

答案 0 :(得分:3)

我觉得你在这里太可爱了。只需在计时器上交替调用SuspendThread / ResumeThread即可。我知道这很难看,但你不会在我怀疑的任何选美比赛中输入你的解决方案。

答案 1 :(得分:1)

原则上,只要你在另一个进程的空间内执行了一次,并且你知道循环没有执行,那么可以启用写入文本页面和在原地修补实际的循环代码。你需要一些冗余字节来调用你的函数(扩展函数将需要大量的重写,因为所有相对偏移都会中断)。

然而,这不是非常容易,也不是非常强大。考虑一下你为什么要这样做,如果你能以另一种方式实现目标。

答案 2 :(得分:1)

  1. 发布旋转等待程序的名称。

  2. 等待SO-ers向开发者发送仇恨邮件。

  3. 安装开发人员发送给您的贿赂更新以阻止仇恨邮件。

答案 3 :(得分:0)

API挂钩可以解决您的问题。 An excellent article is available in codeproject.请参阅