是否可以注入多个带有MS绕行的Dll?

时间:2011-05-26 19:00:17

标签: c++ api hook detours

在c ++中,我想将多个dll挂钩到一个进程。现在我使用CreateProcesswithdll(),它一次只能挂一个api。我可以做些什么来注入多个dll?

我遇到了这个问题,因为MS绕行要求我们将自定义dll命名为与原始dll相同,以便正确绕开api调用。所以即使我可以在我创建的同一个绕道dll中处理不同的api调用,我需要使用不同的名称来挂接来自不同api的调用,这意味着我需要不同的绕行Dll。这也意味着我需要注入不同的DLL。我是对的吗?

如果我不清楚某些事情,我会尝试更清楚地呈现它:D

谢谢!

P.S:只是为了让我的问题更加清晰。我需要在同一个进程上注入1个以上的dll。 CreateProcesswithdll()创建一个新进程,其线程处于睡眠状态。在完成注入dll并设置挂钩后,它会被唤醒。如果我想注入多个dll,我显然不能多次调用CreateProcesswithdll()

那我该怎么办?或者我对这个错误的某些方面的理解是什么?

3 个答案:

答案 0 :(得分:2)

似乎detourattachdetourdetach似乎会为我做这个伎俩。谢谢大家!

我发现this blog很有用!

答案 1 :(得分:2)

从DLLMain()调用LoadLibrary()和FreeLibrary()为NOT SAFE。来自TFA:

  

“入口点功能应该   只执行简单的初始化或   终止任务。一定不要打电话   LoadLibrary或LoadLibraryEx   函数(或调用的函数)   这些功能),因为这可能   在DLL中创建依赖循环   加载订单。这可能会导致DLL   在系统使用之前使用   执行其初始化代码。   同样,入口点功能   不得调用FreeLibrary函数   (或调用FreeLibrary的函数)   在流程终止期间,因为   这可能导致使用DLL   系统执行完之后   终止码。“

编辑:道歉 - 这是对Serge上述答案的评论。

答案 2 :(得分:1)

显然,您可以从注入的第一个DLL中加载任意数量的DLL。

修改

当加载DLL时,系统运行你的DLL的DllMain(使用fdwReason == DLL_PROCESS_ATTACH)然后在该函数中你可以做任何你喜欢的事情,例如你可以调用LoadLibrary加载其他DLL。

添加: 我完全同意从DllMain调用LoadLibrary是不安全的评论。所以你可以从DllMain中创建的线程调用LoadLibrary(和所有其他棘手的东西)。