问题标签 [easyhook]

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.

0 投票
1 回答
2468 浏览

c++ - Easyhook:非托管挂钩,如何调用原始函数/更改返回状态?

所以我有一个钩子函数winspool.drv!WritePrinter,它被远程注入到 spoolsv.exe 的非托管 C++ 成功钩子。

目前,钩子似乎要么替换原始函数,要么以无法检测的方式破坏堆栈:钩子后,WritePrinter 调用导致钩子外没有打印机活动。

我发现至少有一种方法可以调用原始函数,即所谓的LhGetOldProc. 但是,使用它会导致崩溃,不确定这是与 easyhook 相关的错误还是只是错误的转换。

那么,如何在 Easyhook 非托管版本中正确调用原始函数?

挂钩回调LhGetOldProc

挂钩代码:


TIL:在 2013 年,CodePlex(EasyHook 讨论列表所在的位置)在使用 Microsoft 帐户注册时不接受电子邮件的三级域。不会使用 Firebug 绕过表单。

0 投票
0 回答
1000 浏览

windows - 挂钩 Windows 文本绘制 API

我试图通过挂钩 TextOut、DrawText、ExtTextOut、BitBlt 来挂钩 Windows 中的所有绘制文本 API。但是,我看到机器之间不一致的地方很奇怪。我通过我的工具以及使用 API Monitor 工具在某些机器上看到了绘制文本 API,但在其他一些机器上,我看不到任何调用的绘制文本 API。这对我来说真的很奇怪,因为它必须调用 API 来绘制文本,除非它使用我没有挂钩的其他 API。有谁知道我可以尝试挂钩哪些 API?或者为什么那些机器在绘制文本上有差异?

谢谢。

0 投票
1 回答
769 浏览

c# - Easyhook 发包问题

我将一个 dll 注入游戏客户端并使用 Easyhook 连接发送/接收。我可以轻松监控客户端发送到服务器和从服务器接收的数据包。我想发送自己的数据包,所以我做了一个这样的函数:

我认为程序发送数据包很好,但我没有从服务器收到任何东西。例如,如果我发送一个数据包来做一个舞蹈情感,服务器没有响应。有趣的是,当我在客户端做某事(例如开一家商店或搬家或任何向服务器发送数据包的事情)时,服务器会响应我在注入的 dll 中使用 SendPacket() 函数之前发送的舞蹈数据包.

所以问题是我的 dll 无法发送数据包或服务器没有响应。有人对此有解决方案吗?

提前致谢。

0 投票
1 回答
3034 浏览

winapi - 使用 EasyHook (c#) 从 ntdll.dll 挂钩 NtCreateFile API

这是我第一次尝试挂钩 Windows API。我的目标是监视进程将要创建/打开/读取/写入的所有文件。为了尽可能地冗长,我决定挂钩 ntdll.dll API,例如 NtCreateFile() 和 NtOpenFile()。所以,为了实现这个目标,我继续使用 EasyHook,它看起来简单而强大。我基本上遵循了 FileMon 示例,改变了我真正想要的:Hooked 函数。当我尝试读取有关将要打开的文件的信息时,我尝试从 OBJECT_ATTRIBUTES 结构中读取信息,例如 ObjectName。这些是整数指针,所以我希望使用函数 Marshal.PtrToStringAuto(attributes.objectName) 来获取字符串值。但是,结果是我只能有坏字符串,没有任何意义。还,文件访问似乎不起作用。我猜这段代码有问题,可能在 DllImport 签名中。请注意,我必须用 IntPtr 替换 SafeHandle,因为 EasyHook 抱怨要编组它们。有人能帮我吗?

这是我注入的DLL的具体代码:

这是 Run 方法代码

这是构造函数代码:

这里有 Hook 委托和钩子函数

这里有 NtDll.Dll 原生函数:

0 投票
2 回答
1304 浏览

c - EasyHook:在原生 C 应用程序中从 32 位应用程序注入 64 位 dll?

是否可以将 64 位 dll 从本机 c 中的 32 位应用程序注入 64 位主机应用程序?(不是 C# 或托管 c++)

我编译了我想以 32 和 64 形式注入的 dll,但是当我调用

我收到 WOW 错误。

32 进 32 注射工作正常。

0 投票
3 回答
3601 浏览

.net - 用于防止文件删除的简单 API Hook?

我想在用户删除任何目录上的文件时拦截,方法是将所需的 API 函数与在消息框“ Really Would you like to Delete this file?”中询问简单布尔问题的可用性挂钩,这个问题是表达我想的一个例子控制文件,删除它或防止删除。

我的操作系统是Windows 8 x64,但我想为其他 Windows 操作系统及其架构中的通用用法编写一种方法(如果这不认为更难做到的话)。

在这个 SO question 中,我读到最好的选择是挂钩NtSetFileInformation函数Intercept FIleSytemCall 进行删除,因为我看到存在一个名为 WinAPI 的函数DeleteFile以及接口ICopyHook,但我不知道它们之间的区别,但是无论如何我真的不知道如何开始这样做......

我想澄清一下,我正在寻找一个 VBNET 解决方案,我很头疼,因为这些 API-Hooking 库通过 Google 没有任何 VBNET 代码示例,并且当复杂的代码是涉及。

编辑:我找到了一个EasyHook库示例,NtSetFileInformation它似乎非常适合我的需求,但它是 C# 代码,我试图翻译它但没有成功: Hooking NtCreateFile API from ntdll.dll with EasyHook (c#)

所以,我已经用图书馆 2.6 试过这个Deviare,但什么也没做:

@mazoula基本上上面的代码与这里回答的相同,在 vb.net 中挂钩另一个程序对 winapi 函数的调用,他说该代码对他有用,但我已经按原样尝试过(没有进行上面的修改)并向我扔了一个_hook.Attach(_mgr.Processes)指令中的异常。

我也试过这个库EasyHook但是当我从 Explorer.exe 或 CMD 中删除一个文件时再次没有做任何事情,代码是这个 C# 代码的翻译http://www.codeproject.com/Questions/528094/DeleteFileplushookingpluswithplusEasyHookplussucce

0 投票
1 回答
2147 浏览

c# - 无法加载文件或程序集 SharpDX

我使用easyhookandSharpDX从 DirectX 游戏中获取 fps 数据。有时它会起作用。但是,当我下次启动它时(可能只是几分钟后),它会抛出异常System.IO.FileNotFoundException: Could not load file or assembly SharpDX

当我重新启动它几次时,它可以工作。为什么?有没有人和我一样的问题?

SharpDX 版本:2.4.2

0 投票
1 回答
722 浏览

c# - Easyhook 32 位应用程序

我正在使用 EasyHook 拦截注册表调用。更详细地说,我使用 RegQueryValue 来拦截从注册表读取键的调用,并用其他东西更改它的值。相关代码如下:

如果我用目标 x64 构建所有东西,这一切都可以毫无问题地执行。

但是,如果我使用目标 x32 构建它,它会在 RegQueryValueExW_Hooked 中崩溃并出现以下错误:

未处理的异常:System.Runtime.InteropServices.SEHException:外部组件已引发异常。在 DummyDCA.Program.Main(String[] args) 未处理的异常:System.ArgumentOutOfRangeException:容量超过最大容量。参数名称:AG.RU.Valuation.Controller.AFMToolbox.Inject.Main.RegQueryValueExW(IntPtrhKey, String lpValueName, Int32 lpReserved, RegistryValueKind& lpType, StringBuilder lpData, Int32& lpcbData) at AG.RU.Valuation.Controller.AFMToolbox.Inject 的容量.Main.RegQueryValueExW_Hooked(IntPtr hKey, String lpValueName, Int32 lpReserved, RegistryValueKind& lpType, StringBuilder lpData, Int32& lpcbData)

问题似乎是 StringBuilder 类型的 lpData (某种溢出,StringBuilder 不够大或其他什么)。如果我用 IntPtr 替换 StringBuilder,它不会崩溃;但后来我有一个指针而不是 StringBuilder,所以我不确定如何替换 lpData 的值。

有谁知道为什么会这样,应该怎么做?

谢谢!

0 投票
2 回答
1753 浏览

dll-injection - 通过 EasyHook 卸载注入的 DLL

我曾尝试使用 EasyHook 将 DLL 注入另一个进程,但是当主机进程关闭时,EasyHook 和其他注入的 DLL 仍在处理中。有谁知道如何从目标进程中卸载它们?

谢谢。

0 投票
0 回答
313 浏览

winapi - 从 Windows 资源管理器中提取文本的挂钩

我正在尝试绘制 Windows 的文本 API(DrawTextW,ExtTextOutW)以获取文本,但我无法在 Windows 资源管理器的地址栏中正确获取文本位置

似乎它有特定的绘图方式。有谁知道它是怎么画的?请指教。