问题标签 [api-hook]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
inject - 找不到easyhook64.dll
我下载了 easyhook 包“EasyHook 2.7.6789.0 Binaries .NET 3.5/4.0 (zip)”,然后将 dll 与我在 Visual Studio 2015 中的项目链接(首先在此路径中添加我的 easyhook C/C++->General->Additional Include Directories 和第二个将 .lib 文件添加到链接器->输入->附加依赖项)。构建中没有发生错误,但是当我运行时出现此错误“找不到 easyhook64.dll”。
c++ - 如何拦截对 AfxThrowMemoryException 的所有调用
我有一个大型 MFC 程序。我们很少有客户获得CMemoryException
.
问题是,我们得到了异常,但没有抛出异常的位置。
我可以拦截 IAT(导入地址表),但在这种情况下,我只能检测从我的应用程序到 MFC DLL 或从其他 DLL 到 MFC DLL 的调用。
如何拦截所有呼叫AfxThrowMemoryException
?所以来自 MFC DLL 的所有调用也可以被我捕获。
实际上我不知道我要捕获的函数的内部地址。好的,我可以使用 IAT 并计算内部地址。
我知道 Detours,但我也不想用我的软件来交付它。
或者有什么更简单的方法可以在 C++ 代码中调用 throw 操作?
最好的是,我可以在抛出任何异常之前捕获它们。所以我可以看到调用者代码。
c++ - 在一个充满 jmp 指令的程序中有哪些区域?
我正在学习调试程序并偶然发现了一个我不理解的领域。为什么这个区域,如下图所示,充满了不同地址的跳转指令?
我正在学习钩子,并希望hookingFunction
通过 x32dbg 查看我的钩子函数 ()。它具有原型,LoadLibraryA
因为那是我要挂钩的功能。
这是LoadLibrary
原型:
打印基地址时,hookingFunction
我得到以下地址:
按照 x32dbg 中的地址,我在这里登陆:
当遵循相对于 7C061410 的“jmp 713B”时,我首先到达了我想要到达的实际功能
但是为什么我们首先需要访问地址7C061410呢?为什么这个区域充满了 jmp 指令?
我希望它是有道理的,并感谢您的阅读。
reactjs - ReactJS如何仅在条件为真时获取?
我正在尝试找到一种useFecthApi
有条件地使用的正确方法。
我有以下组件:
我想做的是创建一个仅当等于的contactState
定义,然后将其传递给.const contactState= useFetchApi(() => findContacts(userId))
fetchContacts
true
contactState
UserInformation
所以基本上,类似:
我对做出反应(以及对叶状体的发展)还很陌生,所以我不知道如何正确地实现这一点。有什么建议吗?
谢谢。
c++ - 当使用 MinHook 挂钩 API 时得到“ESP 的值未在函数调用中正确保存”
在 Windows 10 x64 20H2 上的 Visual Studio 2019 中,我试图挂钩我没有 lib 或包含文件的 DLL 的导出函数。虽然我过去成功使用过 MinHook 数百次,但它总是使用我拥有 lib 和包含文件的函数。我想知道需要什么来阻止钩子触发崩溃。
当我的钩子函数执行器出现此错误:
Microsoft Visual C++ 运行时库调试错误!
程序:HookingModule.dll 模块:HookingModule.dll 文件:
运行时检查失败 #0 - ESP 的值未在函数调用中正确保存。这通常是调用使用一种调用约定声明的函数和使用另一种调用约定声明的函数指针的结果。
现在我知道这通常表明与不正确的调用约定挂钩。据我所知,我正在挂钩的函数是 WndProc 处理程序并使用 __stdcall。被钩子函数的反汇编是:
函数的开始:
函数结束:
我挂钩功能的方式:
这导致以下反汇编,据我所知,这是保存和恢复 ESP。
在 WinDbg 中,我们可以看到:
钩子函数被命中并继续原来的函数:
ETC...
根据 WinDbg 跟踪指令,似乎从被挂钩函数调用的函数中调用 GetPropW API 会触发崩溃,或者至少是挂钩模块中要执行的最后一个代码。
windows - 如何在内存映射文件中使用链表创建队列并从另一个进程中读取?
我编写了一个简单的测试代码,将我的挂钩 dll 注入到一些 Windows 应用程序(explorer.exe
等notepad.exe
)中,并且在这些目标应用程序中,我使用 EasyHook 库挂钩了 Win32 API 函数CopyFileEx
,例如。CreateFile
例如Hooked_CopyFileExW
,在我的挂钩函数中,我需要从目标进程向我的应用程序发送一条事件消息(包含源文件路径、目标进程的 pid 等)。在收到我的应用程序的消息后,根据文件的内容,我将决定完成复制操作或阻止它。我还需要用于记录目的的源路径和目标路径。我决定使用内存映射文件来发送这些文件名信息,因为它是一种有效的方法。
我的目的是在内存映射文件中创建一个队列来组织事件。这是一种生产者消费者问题。
如何使用内存映射文件中的链表实现这样的队列?
我知道如何使用数组来做到这一点,但我想使用链表来做到这一点。我觉得链表是一种更好的方法,因为它可以在每次入队和出队操作时动态地增长和收缩。哪种方法更方便?如果它是链表,将不胜感激。我对处理每个链表节点中的指针一无所知,因为内存映射文件中的内存块是连续的,它只有一个起始地址。或者除了所有这些,您是否推荐任何其他方式来完成此任务?
c# - EasyHook 库使用
我查看了 EasyHook 及其教程示例,甚至使用我自己的来自 advapi32.dll 的 API 实现了 LocalHook,当我从运行挂钩代码的同一个应用程序进行调用时,LocalHook 工作,但是当我调用从另一个外部进程挂钩的 API。我想我对从外部进程拦截的假设是错误的。
所以现在我正在查看 RemoteHook,我的印象是您需要专门构建您的注入 DLL 并将其注入到已知的进程/可执行文件中 - 然而,这不是我的目标/场景。目标是拦截对存在于 advapi32.dll 中的 API 的调用,而不管进行调用的进程如何 - 即来自任何(未知)进程。我相信这就是所谓的 GlobalHook。那么,是否有可能以一种方式编写 GlobalHook,即从我的 GUI 应用程序将拦截任何进程对特定 Win32 DLL 或 .NET DLL(如 system.security.cryptography.algorithms.dll)中特定 API 的调用(以及如何做我一般都知道,这个 DLL 使用了哪些 Win32 API(如果有的话)?或者我应该切换到 MS Detour 库来实现全局挂钩吗?是否使用 SetWindowsHookEx 触发了防病毒程序来实现全局挂钩?
c++ - 阻止 .exe 文件
对于我正在处理的一个小项目,我需要阻止“.exe”文件运行并知道试图运行的文件的路径。也许 Windows API 挂钩可以帮助我,但我不确定,我还没有使用它。
任何人都可以指导我如何做到这一点,可能与 API 挂钩?