繁体   English   中英

注入x64-process的x64-DLL挂钩x86-DLL,无法使用C ++和EasyHook

[英]A x64-DLL injected into a x64-process hooking a x86-DLL fails using C++ and EasyHook

注入x64-process的x64-DLL挂钩x86-DLL,无法使用C ++和EasyHook。 如果Loader,InjectionLibrary和InjectionTarget(它在两个版本中都可用,我需要两个都被挂钩)都是x86。 获取导出过程的地址(GetProcAddress本身)在x64上不是问题。 InjectionTarget还有HookTarget(Kernel32.dll)作为x64的依赖项。 LhInstallHook(...)返回STATUS_NOT_SUPPORTED,其中源注释表示在以下情况下发生:“目标入口点包含不受支持的指令。”

由于x86版本的源代码很好,我决定不添加它。

我抓了一个小图 在此输入图像描述

你不能在64位进程中使用32位DLL,事实上,这概括 - 你不能混合和匹配x86和x64代码,单个进程要么完全是x64,要么完全是x86。 这是x86-64的基础,你无能为力。 在Windows控制台中,它们构成64位进程和32位进程,并使用IPC控制32位进程以加载和处理所有32位shell扩展。 如果你勇敢和/或绝望,你可以尝试类似的东西。

编辑:等一下,等一下。 当x86模式下一切正常时,您能否在基础知识中更多地描述这个过程? 就像,X从Y加载一个函数,我正在做Z,因为看起来我不明白你在做什么。

您有一个注入目标和一个注入的DLL,您尝试在第三方x86-only DLL中调用该过程。 因此,正常的调用流程来自InjectionTarget - > InjectionLibrary - > HookTarget - > ExportedProcedure。 这对你不起作用,因为HookTarget只是x86而且你不能改变它,所以当你为x64版本的InjectionTarget重新编译用于x64的InjectionLibrary时,它不再起作用,因为你的x64 InjectionLibrary试图加载一个x86 HookTarget。

解决此问题的唯一方法是创建一个x86进程并使用进程间通信来调用HookTarget中要调用的过程。 如果你不能为x64重新编译HookTarget,那么这是唯一的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM