问题标签 [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.
c# - 使用 EasyHook 从 Ole32.dll 库中挂钩 DoDragDrop() 函数
“ Ole32 ”, “ DoDragDrop ” 函数挂钩到资源管理器是成功的,但是每当我在资源管理器中拖动文件时,我的DoDragDropHook函数都没有调用,我对挂钩概念是新手,我从过去 3 个月开始尝试这样做,但到目前为止还没有正确的结果. 请帮助我哪里出错了
code-injection - Windows - 如何在应用程序启动之前将代码注入到应用程序的内核中?
我想制作一个恶意软件分析软件,我必须将代码注入进程的不同 kernel32 函数中,例如 Sleep 以覆盖恶意软件尝试进行的任何睡眠,ExitProcess 在进程被杀死之前转储内存等
我尝试启动暂停的进程,然后尝试枚举库,希望我可以获得 kernel32 rva,但是当我启动暂停的进程时,似乎甚至没有加载库。
c# - Easyhook:如何从使用 LoadLibrary 加载的 DLL 中挂钩函数
我使用EasyHook已经有一段时间了,并且在使用静态链接的 DLL 方面非常成功。现在,我尝试使用与静态链接 DLL 相同的方法从主机应用程序动态加载的 DLL 中挂钩一个函数。
在这种情况下,挂钩无法工作。尝试创建钩子时出现以下异常:
异常表示库尚未加载是非常正确的,但是主机/挂钩进程将在启动后的几 ns/ms 内加载它(这完全没关系)。
我在 Internet 上搜索的教程和结果仅涉及挂钩静态链接的 DLL。我还没有找到有关动态加载的 DLL 的任何信息。想到的一种解决方案:挂钩LoadLibrary
并GetProcAddress
等待正确的 winapi 调用以进行所需的替换。
有没有其他/更简单的方法可以从动态加载的 DLL 中挂钩函数?
有一个限制:不能将外部程序更改为以静态方式使用 DLL。
为了促进可能的解决方案,这里有一些片段显示了我想要挂钩的内容:
AddIntegers
首先,这是我要替换的函数的 DLL (代码在 Delphi 中)
其次,这是使用上述DLL的程序使用导出的AddIntegers
函数。
c# - 如何注销 EasyHook.dll、EasyHook64.dll 和 EasyLoad64.dll
我正在使用EasyHook
dll 并执行DoDragDrop
API 挂钩,一切正常,但如何释放以下 3 个 dll
1. EasyHook.dll
2. EasyHook64.dll
3.EasyLoad64.dll
即使在关闭我的应用程序后,这些 dll 也会被挂钩explorer.exe
,一旦我重新启动 explorer.exe,它们就会释放
到目前为止我没有找到任何解决方案,所以我在这里发布,请帮助我解决这个问题。
下面是我的 DLLRun()
代码片段。
c# - EasyHook LoadLibrary 崩溃失败
我正在尝试使用 EasyHook 来检测本机 LoadLibrary 调用。
它确实检测到库的加载,但是该过程会导致冻结。这是因为下面的LoadLibrary_Hook方法无法加载 dll 或库,因为它返回 0 IntPtr(可能找不到库。)。
我什至尝试将事件设置为“void”类型,但随后进程简单地崩溃了,这可能是因为 EasyHook 期望我返回一个值来覆盖函数。
有没有办法让我返回要加载的确切需要的库,或者只是简单地获取正在加载的库的名称,而无需手动加载库?
(还有这样的名字在加载过程中:瑮汤汤l逦逦仇嗿謘ౕ㍓谋四襗ﱝ嶉觬嶉觰嶉㯨࿓トăࡅ쌻萏Ͽ䶋㬔瓋㤉ᡝ萏ϯ팻Ѵ᪉ᢉ疋㬐ă㬀瓋謇ᡅᦉᢉ綋㬜 有点奇怪...)
windows - 使用 Easyhook 挂钩 Windows 打印机 API
我正在尝试使用 Easyhook RhInstallLibrary 挂钩 winspool.drv 中存在的 WritePrinter 函数。
注射器.cpp
在 hook.ddl 中,创建了以下函数来挂钩打印机功能
{
}
传递给打印机的数据流存在于 pBuf 中。但我无法获得该数据。 如何从 pBuf 读取数据
WritePrinter 函数参考:https ://msdn.microsoft.com/en-us/library/windows/desktop/dd145226(v=vs.85).aspx
c++ - API 监视器类型定义 (XML) 到 C++ 代码
我是一名 C# 程序员,正在做一些逆向工程工作,但遇到了一些麻烦。
我想要做的是在远程进程中挂钩一个库函数并记录一些数据。
我已经将API Monitor与未知库 (libcef.dll) 的一些自定义类型和函数定义一起使用,并且我能够拦截已定义的函数。
我想编写自己的应用程序来挂钩这些功能。我选择在 C++ 中使用 EasyHook,因为它看起来比使用托管 EasyHook 库在 C# 中编组这么多更简单。
EasyHook 要求我使用正确的函数调用约定、标识符和参数来定义要挂钩的函数。
但是,由于我对 C++ 的了解有限,我能够将 API 监视器(在 XML 文件中)的类型定义转换为 C++ 代码,然后我可以在定义我想要挂钩的函数时使用这些代码(这是cef_parse_url)。
所以问题是:如何将以下 API Monitor 类型定义 (XML) 转换为 C++ 代码?
如果有人可以帮助我,那对我来说就意味着整个世界。我相信对于 C++ 中级的人来说,能够轻松地帮助我。
提前致谢!
c# - 使 Windows 上的第 3 方程序相信 HID 设备已连接
起初这似乎是一个不寻常的问题,但让我解释一下我试图做什么。
我开发了一个程序,它能够连接到名为 PS4 Remote Play 的第 3 方程序。PS4 Remote Play 程序只允许您使用真正的 Dualshock 游戏手柄来控制您的游戏。所以我的程序从 Windows ( kernel32.dll, hid.dll )连接到低级 API以绕过这个限制。我的钩子所做的是,每当为 HID 设备调用CreateFileW时,我的程序都会返回一个自定义虚拟指针,并且随后调用的相应的挂钩hid.dll方法就像这个虚拟指针是 Dualshock 游戏手柄一样。
到目前为止,一切都很好。但是最近我从我的程序的用户那里得到了一些报告,即“模拟”Dualshock 无法正常工作,并且未处理发送到此虚拟 Duashock 的输入。我花了一些时间才弄清楚为什么。每当用户在没有连接 HID 设备的情况下使用笔记本电脑或 PC 时,PS4 远程播放程序从不会调用CreateFileW,至少不会用于创建 HID 句柄。
我不想在我的应用程序中安装虚拟驱动程序,只是为了让 Windows 认为 HID 设备已连接。相反,我尝试挂钩setupapi.dll的功能,只让 PS4 Remote Play 程序认为连接了一个随机虚拟 HID 设备,以便它调用CreateFileW方法。我已经迷上了
- SetupDiGetClassDevs
- SetupDiEnumDeviceInfo
- SetupDiGetDeviceInterfaceDetail
但是我没有使用这个 API 的经验,所以我有几个问题。
即使没有连接 HID 设备, SetupDiGetClassDevs返回的设备信息集是否始终包含 HID 设备的设备信息元素?如果没有,如何为 HID 设备添加假设备信息,或者如何在 C# 中创建假设备信息集并返回它?或者这根本不需要,因为我可以挂钩其他两种方法并在那里做一些事情。
任何建议或提示我如何解决这个问题都会很棒。Windows 没有必要认为 HID 设备已连接,只有第 3 方程序应该像连接到 PC 一样。
c# - 如何从后台窗口 DirectX 获取屏幕截图
我一直在寻找如何制作非活动窗口的屏幕截图的示例,但我没有找到。我想截取在窗口中运行的游戏的屏幕截图,而不是在全屏模式下。可以被其他窗口挡住。
我在网上找到了一些例子,但无法在我的项目中实现。
您能否在C#语言的EasyHook和SharpDX(或SlimDX)的帮助下设置一个如何做到这一点的例子?
我将不胜感激!
c# - 在 c# 中设置 out 参数时出现 NullReferenceException
我在 c# 中使用 easyhook 得到了一个不安全的程序集。下面的代码运行良好,但总而言之,当调用此方法时,我得到了 NullReferenceException。
这个类的实例是一个单例模式它通过了几次和一个点它得到了一个空引用
此类如果用于拦截某些 I/O 文件中的所有写入以进行某些操作
任何想法见代码..
仅在执行 SQLCOMMAND 时发生
在 ....SystemHook.WriteFileHook(IntPtr hFile, Void* lpBuffer, UInt32 nNumberOfBytesToWrite, UInt32& lpNumberOfBytesWritten, NativeOverlapped& lpOverlapped)
在 SNIWriteSyncOverAsync(SNI_ConnWrapper* , SNI_Packet* )在
SNINativeMethodWrapper.SNIWritePacket(SafeHandle pConn, SafeHandle 数据包)
.Data.SqlClient.TdsParserStateObject.SNIWritePacket(SNIHandle 句柄,SNIPacket 数据包,UInt32 和 sniError,布尔型 canAccumulate,布尔型 callerHasConnectionLock)
在 System.Data.SqlClient.TdsParserStateObject.WriteSni(布尔型 canAccumulate)
在 System.Data.SqlClient.TdsParserStateObject.WritePacket(字节
在 System.Data.SqlClient.TdsParserStateObject.ExecuteFlush() 处的flushMode,布尔值 canAccumulate )
在 System.Data.SqlClient.TdsParser.TdsExecuteSQLBatch(字符串文本,Int32 超时,SqlNotificationRequest 通知请求,TdsParserStateObject stateObj,布尔同步,布尔 callerHasConnectionLock,字节 [] enclavePackage)
在 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,RunBehavior runBehavior , Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource` 1 完成,Int32 超时,Task& 任务,Boolean&usedCache,Boolean asyncWrite,Boolean inRetry)
在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String 方法)
在 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior 行为, String 方法)
在 System.Data.SqlClient.SqlCommand.ExecuteDbDataReader (CommandBehavior 行为)
在 System.Data.Common.DbCommand.ExecuteReader()