簡體   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