问题标签 [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.
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# - 3-d方管理装配的Hook方法的解决方案
我正在寻找一种在运行时注入(添加/替换)3-d 方管理的 .NET 程序集中的方法代码的方法。我在 VS2017 中使用 C# 执行此操作。
我试过了:
- PlayHooky(https://github.com/wledfor2/PlayHooky),效果很好,但它不支持原始方法调用,对于我正在从事的项目,我想要一些经过良好测试和强大的东西。
- Easyhook(https://easyhook.github.io),网络上的示例展示了如何将托管代码注入非托管 API,如果它甚至被设计为将托管代码注入托管,则无法找到信息。
- Deviare v.2.0(http://whiteboard.nektra.com/deviare-v-2-0),即使按照他们的快速入门指南,也没有关于目标托管程序集支持的信息。
这是对我不起作用的 EasyHook 代码:
当我尝试使用时,EasyHook.LocalHook.Create
我遇到了"Managed Debugging Assistant 'Reentrancy' : 'Attempting to call into managed code without transitioning out first..."
异常。
我正在寻找如何使 EasyHook 工作的任何想法或一些替代方法来实现动态管理挂钩。
c# - EasyHook 示例项目“RemoteFileMonitor”得到意外结果
我在这里下载了“RemoteFileMonitor”项目:
https://github.com/EasyHook/EasyHook-Tutorials/tree/master/Managed/RemoteFileMonitor
此项目生成由输入进程 ID 打开的所有文件的控制台日志。
应用程序运行没有问题,但日志显示意外结果。
我已经用不同的过程(包括记事本)对其进行了测试,结果如下:
简而言之,如果您多次打开某个文件,则日志仅第一次显示它,并且仅针对不同文件显示更多结果。
我需要它来实时监控外部进程的文件访问,但该进程经常尝试打开某个文件,并且对我来说日志中的这些信息很重要。
这里是原始源代码的主要部分:
}
我一般没有钩子经验,有人可以告诉我,如果可以解决这个问题吗?
winapi - 如何使用 Easyhook C++ 安装监控击键消息(WH_KEYBOARD_DLL 或 WH_KEYBOARD)的钩子程序
我正在使用Easyhook来挂钩击键,但我不明白 Easyhook 是如何工作的。如何安装挂钩来挂钩KeyboardProc(回调函数)。这是 LhInstallHook的 API :
c# - C# Easyhook 奇怪的行为
我目前正在尝试构建我的应用程序,该应用程序使用 EasyHook 库挂钩其他进程的系统调用。我通过 nuget 数据包管理器安装了最新版本,并制作了由 dll 和注入器组成的简单 C#souliton。
注入器代码取自 FileMon 示例。并且 dll 也很大程度上基于 exaple。
我删除了除 createFile 之一之外的所有钩子,并为 ws2_32.dll GetAddrInfoW 函数添加了我自己的钩子。
当我一起运行它们时,两者都可以正常工作。但是当我评论 createFile 目标应用程序时,它会默默地崩溃。
我的钩子&导入&委托代码:
我在运行方法中设置挂钩的代码:
更新:当我评论 createfile 部分时我的代码:
c++ - 如何将字符串值分配给phkey?
我正在开发一个实用程序来挂钩不同应用程序使用的 Windows API 的各个位。目前,该项目的目标是通过使用 easyhook 将文件系统和注册表调用重定向到自定义位置来使任何应用程序可移植。然而,Windows API 的复杂性使我有限的编程技能达到了极限。
下面是我项目的注册表模拟部分的一个函数。当程序调用 RegCreateKeyExA 并接收它的所有参数时调用它。当它被调用时,它会在我用作一种虚拟注册表的 json 文件中创建一个空条目。通常,当创建一个新的注册表项时,内核会为其分配一个句柄。这个句柄被分配给 phkResult(或者更确切地说是它指向的地址)。
我已经设置了自己的句柄系统(基本上是 json 的“DICTIONARY”对象中的项目数减去默认条目(HKEY_LOCAL_MACHINE 等等(因此是 - 10))。但是,我在转换句柄时遇到了麻烦可以分配给phkResult的任何类型。必须分配给它的值是ss.str(),但转换为我似乎无法正确处理的适当类型。
我还需要指定我正在使用 boost 进行 json 和属性树操作。谢谢你。
c++ - 有没有办法将注册表调用中的原始二进制数据保存到字符串而不将其转换为字符串?
我正在开发一个实用程序来挂钩不同应用程序使用的 Windows API 的各个位。目前,该项目的目标是通过使用 easyhook 和 boost(特别是 property_tree 库)将文件系统和注册表调用重定向到自定义位置来使任何应用程序可移植。
我目前正在研究项目的注册表部分,我已经成功创建了 RegCreateKey(ExA/ExW/A/W)、RegOpenKey(ExA/ExW/A/W) 和 RegCloseKey 函数的类似物,它们工作正常(i制作了一个虚拟句柄系统来创建和翻译 hKey 句柄)。它们的工作原理是基本上将所有内容转换为字符串并将它们保存在 boost 属性树中(然后将树写入 .info 文件)。
我开始研究 RegSetValue 和 RegQueryValue 函数,它们实际上处理数据并遇到了一个主要问题。下面是两个函数。请注意,这些是由 easyhook 使用与原始 winapi 调用相同的参数调用的。
这适用于 REG_SZ 调用,但其他类型的数据未正确保存。
这不起作用。第 6 行的重新解释是无效的,它不会编译。
问题是我的函数处理不同类型数据的方式。注册表调用可以有许多不同的值类型,而我编写 myRegSetValue 的方式似乎只适用于 REG_SZ。在将调用写入文件时,我还必须保存值类型,但这并不能解决问题。
所以我的问题是,有没有办法将调用的原始数据保存为字符串,而不必将其转换为字符串,以便它适用于所有类型的数据,然后从文件中读取一个字符串返回原始数据并将其传递给应用程序?
我想我可以为每种密钥类型编写一个单独的解释器,但我真的不想这样做,因为它会非常hacky并且还会破坏不正确使用注册表API并在注册表中存储无效值的应用程序(例如,例如, Unity 游戏 Sunless Sea)。
谢谢,我希望我解释得足够详细。
winapi - 我需要通过挂钩一些 Windows API 来防止一些黑客修改游戏内存
看到简单的钩子示例,我能够为 openProcessMemory 创建一个钩子,以防止某些黑客攻击某些游戏。我面临的情况是,一些黑客做得如此之快,以至于我无法及时进行注射。例如:进程A(黑客)进程B(游戏)进程C(反作弊)
A的进程打开游戏的进程内存,写入期望的数据,然后自己关闭,不给C进程的时间,注入A,钩子openProcessMemory捕捉黑客试图打开游戏进程的时刻。当黑客等待用户输入时,此过程运行良好,因为给反作弊者时间做他的工作。
所以,这里有一些问题:有没有办法通过 c# easyhook 知道游戏内存何时会被黑客修改?当前挂钩 openProcessMemory (opm)、writeProcessMemory (wpm) 或 readProcessMemory (rpm),但存在描述的问题。
当某些相关方法(opm、rpm 或 wpm)在目标进程中执行某些操作时,该目标进程是否可以根据相关方法激活另一个 winApi 功能?
摘要:我正在挂钩注入器进程。它可以在反作弊有时间上钩时起作用。我想在游戏过程中制作钩子,这导致我进入注入器过程。
c# - (EasyHook) 在同一项目中无法识别 DLL
如果这是一个愚蠢的问题,请道歉;我对 Visual Studio 并不太熟悉,也绝对不是新版本。
我正在尝试使用 EasyHook 从 Windows 应用程序中挂钩对 TextOutA 的调用,大致遵循本教程,在 Visual Studio 2019 中。(我 100% 确定它们是 TextOutA;反编译器输出也表明了这一点,并且我能够成功挂钩它们使用 C++。不幸的是,对于 EasyHook,C# 比 C++ 更受支持/记录。)
根据本教程,我在同一个解决方案中有一个控制台应用程序和一个类库作为两个项目。让 Visual Studio 解决方案完全编译有些坎坷——我不得不手动将 .csproj 文件编辑为 .NET Framework 4.8(根据这个问题),并且需要进行一些修改才能使其正常工作。但现在我担心我修修补补太多了。
会发生什么:代码编译没有错误和警告,并且看似成功运行。但是,似乎没有调用 DLL 中的任何内容。它的代码似乎都没有被执行,Run() 中的断点永远不会被命中,如果我完全摆脱 Run() 代码,它仍然可以编译。
到目前为止,这是控制台应用程序代码(文件名已编辑;此代码可能还有其他问题,但我必须运行它才能找出答案):
这是类库:
该进程的控制台输出与预期一致,路径的输出也是如此:C:\Users[my username]\source\repos[name of project]\build\net48\ [name of DLL].dll --这确实是 dll 输出到的地方。但是,如上所述, Run() 中的任何内容似乎实际上都没有被调用, TextOutA 肯定没有被抑制,等等。
我试过的:
- 将 .dll 和类库项目(分别)添加为对控制台应用程序的引用
- 将 .dll 和可执行文件设置为输出到同一文件夹
- 调整应该获得路径的代码行
- 将此代码与我能找到的基本上任何可比较的 EasyHook 项目进行比较,似乎没有任何问题
- 从控制台应用程序而不是钩子中调用 GetProcAddress;它按预期工作,所以问题似乎不是那个
任何帮助将非常感激。
c++ - 如何为 ReadFile 的 LPVOID 缓冲区赋值
我正在开发一个 win32 API 挂钩程序。据我了解,当程序为特定文件调用 ReadFile 时,该文件的内容被复制到 lpBuffer(参见下面的定义),
读取文件定义:
现在,我的目标是改变这个 lpBuffer 并用我提供的内容填充它!我正在使用 EasyHook 来挂钩 ReadFile。我不熟悉 LPVOID 类型。我能够使用以下代码更改 GetCurrentDirectory 的内容。
GetCurrentDirectory 定义:
如何为 ReadFile (LPVOID lpBuffer) 做类似的赋值?