问题标签 [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 投票
2 回答
1281 浏览

c# - 如何将c++ QString参数转换为c#字符串

我试图QPainter::drawText通过注入我的 DLL 并将QPainter::drawText函数绕道到我自己的应用程序中来挂钩另一个应用程序中的函数。我这样做是因为其他应用程序没有公开可用的 API,我想对我得到的数据进行一些基本的统计分析。

一切正常:我看到QPainter::drawText正在调用的函数,但我无法将QString参数转换为任何有用的参数。当我将QString参数编组为LPWStr.

我不是 C++ 超级英雄,所以我有点迷茫。我想我正在查看一些指针或参考,因为我每次调用都会得到两个字符,但我不确定。经过几个晚上试图弄明白它的意义后,我已经接近放弃的地步了。

我已经使用https://demangler.com/QPainter::drawText对函数(使用 Dependency Walker: 找到?drawText@QPainter@@QAEXABVQRect@@HABVQString@@PAV2@@Z)进行了解组,并提出了以下函数声明:

我已将其转换为以下 DllImport(我将QRectandQstring类替换为IntPtr,因为我不知道如何将它们转换为 C#)。

这是我到目前为止所拥有的:

绕道 Qt QPainter::drawText

创建 QPainter::drawText 绕道

更新 2016-1-31 到目前为止,我已经找到了这个(参见https://github.com/mono/cxxi/blob/master/examples/qt/src/QString.cs)。但现在我得到了AccessViolationException一个Marshal.PtrToStringUni

0 投票
1 回答
402 浏览

c++ - 从内核挂钩调用 NtQuerydirectoryFile 会使内核崩溃

我正在使用最新版本的 EasyHook 来挂钩一些内核功能。我确实在基于 Windows 8.1 64 位的虚拟机上成功设置了重要的调试,并且我测试了在用户模式下连接 NtQuerydirectoryFile 和 NtQuerySystemInformation 以及在内核模式下连接 NtQuerySystemInformation 没有任何问题。

我当前的问题是使用与用户模式挂钩相同的代码来挂钩 NtQuerydirectoryFile,但是当我调用原始函数时它会失败,给我一个访问冲突错误。我将以下代码用于内核模式挂钩:

0 投票
0 回答
148 浏览

windows - 挂钩窗口功能

我有兴趣挂钩返回 Windows 中目录内容的函数。我遇到了一个名为 EasyHook 的工具,但是我在他们的页面上看到了这个

与某些(商业)挂钩库通过广告来促进销售不同,用户模式挂钩永远不能成为以任何安全方式应用额外安全检查的选项。如果您只想“沙箱化”您熟悉的专用进程,而该进程实际上并不了解 EasyHook,那么这可能会成功!但是,永远不要尝试编写任何基于用户模式挂钩的安全软件。它不会起作用,我向你保证……这也是 EasyHook 不支持所谓的“系统范围”注入的原因,这实际上只是一种错觉,因为正如我所说,使用用户模式挂钩,这将永远是不可能的。

http://www.codeproject.com/Articles/27637/EasyHook-The-reinvention-of-Windows-API-hooking

我在那里的论坛上问过,但似乎没有人知道那里。为什么这种挂钩不适合安全分析?

基本上,我想更改函数的输出,以便它返回额外的不存在的文件,这样每个调用进程都会看到这种变化。(这样做是为了安全分析)。

谢谢,或者。

0 投票
0 回答
89 浏览

c# - Hook URL-Navigating with Run (Win + R) 方法?

有没有办法用“运行”方法(Win + R)挂钩特定的 URL 导航?

这意味着,如果用户打开“ http://osu.ppy.sh/b/000000 ”之类的东西Process.Start(),那么我的应用程序会取消浏览器导航,并在我的应用程序中做一些事情(使用“000000”参数)。

我尝试了配置HKCR注册表之类的东西,但它不起作用。

(与this类似,但使用完整的 URL,而不是协议。)

编辑)或者有没有机会挂钩特定程序的“运行”尝试浏览网页?

0 投票
0 回答
357 浏览

c++ - 挂钩 GetVolumeInformation 以返回自定义文件系统类型

我一直在尝试(并且惨遭失败!)学习如何使用 Easyhook。我正在尝试为所有 GetVolumeInformation 调用挂钩并返回自定义文件系统名称。以下代码确实挂钩,我在 debugview 中获得了文件系统名称,但它使加载它的应用程序崩溃。

任何帮助将不胜感激

0 投票
1 回答
3067 浏览

c# - 使用 SharpDX 和 EasyHook 截取全屏 DX11 程序的屏幕截图

在任何人提到它之前,我参考了这个链接来了解我需要如何将后台缓冲区复制到位图。

现在的情况

  • 我被注入到目标进程
  • 目标进程的 FeatureLevel = Level_11_0
  • 使用 DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH 标志制作目标 SwapChain。
  • SwapChain::Present 函数被挂钩。
  • 屏幕截图变成黑色并且目标进程崩溃。没有截图过程运行良好。

期望的情况

正确制作屏幕截图,让目标进程继续正常执行。

代码

注意 Hook 类与链接中的相同。我只添加了它的 UnmodifiableHook 版本,正如它的名字所说的那样。我省略了所有不重要的部分。

TestSwapChainHook.cs

使用代码

初始化

编辑

我使用了另一种方法来捕获链接中描述的屏幕截图。然而我的截图是这样的:

彩虹形象

现在这似乎是我的转换设置或其他任何问题,但我无法找出我需要做些什么来修复它。我知道我要转换为位图的表面使用 DXGI_FORMAT_R10G10B10A2_UNORM 格式(32 位,每种颜色 10 位,我认为 2 位用于 alpha?)。但我不确定这在 for 循环中是如何工作的(跳过字节和东西)。我只是简单地复制粘贴它。

新的钩子函数

回答

原来 DXGI_FORMAT_R10G10B10A2_UNORM 格式是这种位格式:

并且 Format32bppArgb 是这个字节顺序:

所以最终的循环代码是:

0 投票
0 回答
233 浏览

c# - 如何使用 EasyHook 更改 System.Management 方法的结果?

我一直在制作一个 C# DLL,该 DLL 将被注入到同样用 C# 编写的特定目标应用程序中。目标是操纵 .NET 框架的几个函数的输出。我通过挂钩底层 Windows API 函数成功地更改了读取注册表项的值,但我在读取系统硬盘签名和序列号的方式上遇到了麻烦。

它大致以这种方式使用 System.Management:

我浏览了 ManagementObject 类的.NET 参考源,寻找可以挂钩的 winapi 调用,但没有发现任何有用的东西。我还在一个测试程序上使用了一个api 监视器,只有这个代码,但即使过滤它就像大海捞针一样。

我的问题是,我将如何改变这种方法的结果?我无法挂钩目标应用程序的方法,因为程序集被混淆了,因此每次更新时名称都会更改。

0 投票
1 回答
438 浏览

c# - Direct3DHook 将键盘和鼠标事件发送到挂钩的应用程序

我正在使用 Windows 10

我刚刚玩过基于EasyHook构建的Direct3DHook ,效果很好。我希望能够使用这个工具来挂钩 Direct3D 应用程序。然后,我想将键盘和鼠标事件路由到挂钩的应用程序。

我怎样才能做到这一点?我相信我可以使用pInvoke之类的东西来模拟事件并将它们路由到另一个应用程序,但是我不能使用 Direct3DHook/EasyHook 来做到这一点吗?

0 投票
0 回答
712 浏览

c++ - EasyHook:注入的应用程序在 LhInstallHook 上崩溃

我正在使用EasyHook将 DLL 注入 64 位应用程序。基本挂钩似乎有效,但只要 DLL 调用“LhInstallHook”方法,注入的应用程序就会崩溃。我认为我已经找到了所需功能的正确地址/偏移量。因此,我怀疑我的一些代码(在 DLL 中)已经损坏。

注射器:

动态链接库:

我认为我对地址/偏移量的使用是错误的,但我无法找到相关资源。

0 投票
1 回答
579 浏览

cmd - Windows Cmd 挂钩不起作用

我正在尝试在 cmd.exe 下挂钩 CreateProcess。我设法将 dll 注入 cmd 进程,但注入后 dll 进程分离消息接收,我无法挂钩 createprocess 函数调用。我正在使用easyhook。我的代码:

我在“dll 进程分离”消息之后收到“注入成功”消息。有任何想法吗?