Detours学习之六:32位和64位进程路由

66 篇文章 0 订阅
62 篇文章 35 订阅

32位和64位进程路由

       Detours最常见的使用场景是通过路由绕过现有应用程序中的功能,而不修改原始应用程序二进制文件。在这些场景中,用户提供的DetourCreateProcessWithDll函数被打包在DLL中,DLL在启动时使用DetourCreateProcessWithDll API加载到应用程序中。从父进程调用DetourCreateProcessWithDll API;它通过为detour DLL插入导入表项来更改应用程序的内存副本。这个新的导入表条目导致OS加载程序在应用程序进程启动之后(但在任何应用程序代码运行之前)加载DLL。然后,绕道DLL就有机会在目标进程中钩住目标函数。

      在64位处理器的计算机中,Windows同时支持32位和64位应用程序。要同时支持32位和64位应用程序,必须同时创建detour DLL的32位和64位版本。您还必须使用DetourCreateProcessWithDll API或DetourCreateProcessWithDllEx API或DetourCreateProcessWithDlls API替换所有的DetourCreateProcessWithDll API。DetourCreateProcessWithDllEx和DetourCreateProcessWithDlls api选择适合目标应用程序的32位或64位版本的DLL。

要做的任务

       要在单个系统上同时支持32位和64位应用程序,必须创建两个dll。一个DLL必须包含32位代码,另一个DLL必须包含64位代码。DLL必须驻留在相同的目录中,并且必须具有相同的名称,只是32位DLL的名称应该以“32”结尾,64位DLL的名称应该以“64”结尾。例如,匹配的dll将命名为foo32.dll和foo64.dll。

你应该使用DetourCreateProcessWithDllEx或DetourCreateProcessWithDlls API来启动一个带有DLL的进程。此外,你的dll必须:

  • 将DetourFinishHelperProcess API导出为序号1。
  • 在DllMain函数中调用DetourIsHelperProcess API。如果DetourIsHelperProcess返回TRUE,立即返回TRUE。
  • 调用DetourCreateProcessWithDllEx或DetourCreateProcessWithDlls API而不是DetourCreateProcessWithDll来创建新的目标进程。

它是如何工作的

      在父进程和目标进程都是相同的情况下,例如32位或64位,DetourCreateProcessWithDllEx API的工作方式与DetourCreateProcessWithDll API相同。

      当父进程是32位而目标进程是64位或者父进程是64位而目标进程是32位时,DetourCreateProcessWithDllEx通过将DLL加载到rundll32.exe进程中,并通过export Ordinal 1调用DetourFinishHelperProcess来创建一个helper进程。这个API使用正确的32位或64位代码修补应用程序的导入表。

尝试测试

      要尝试helper进程,首先使用32位构建环境构建32位的Detours示例。然后使用64位构建环境构建64位的示例。然后在示例\tryman目录中,在64位环境中,类型为“nmake size64”,以运行一个在32位和64位进程之间交替的递归进程集。

相关文档说明

有关rundll32.exe的更多信息,请参见http://support.microsoft.com/kb/164787。

相关的api:

DetourCreateProcessWithDllEx, DetourCreateProcessWithDlls, DetourFinishHelperProcess, DetourIsHelperProcess, DetourRestoreAfterWith。

相关的例子程序

FindFunc, Simple, Slept, Traceapi, Tracebld, Tracelnk, Tracemem, Tracereg, Traceser, Tracetcp, Tryman。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jyl_sh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值