问题标签 [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.
c++ - 如何挂钩新创建的注册表
我知道如何挂钩 API。但我不知道新创建注册表时调用了什么 API。
我想检测注册表创建时间,我想知道那个键,数据。
是否有任何 API 可用于与注册表相关的挂钩?
以及如何知道 API 是最好的?
c++ - 通过注入使用 C++ dll 的 IAT 钩子不拦截 api
我正在尝试在MessageBoxA
我使用 IAT 钩子技术制作的远程进程中制作 api 钩子。我正在使用Process Hacker软件将我的 dll 文件注入到我的进程中,直到这里工作正常。
我唯一的麻烦是,MessageBoxA
当我从我的应用程序调用这个 api 时,它永远不会被拦截。
我发现这个 api 不能在我的进程的导入表中找到。
所以,我想知道关于如何在桌面上找到这个 api 的任何建议。
这是我使用的代码:
编辑1:
我已经看到更多的数据,现在这段代码能够找到MessageBoxA
api :D,但是当我从我的应用程序(用 Delphi 制作)调用这个 api 时,钩子不起作用。:-(
我的德尔福代码在这里:
编辑2:
这可能是一个确定的解决方案,但链接处于脱机状态。有人可以帮助我了解它如何适应我上面的代码吗?
c++ - 如何安全地解开阻止的 Win32 API?
我有一个应用程序,它执行一堆 API 挂钩到 Win32 目标应用程序(使用 ASIO)来观察目标处理的命名管道流量。它使用 ReadFile 或 WriteFile 调用设置事务的开始,如果调用是同步进行的,则获取该调用的结果。如果调用是异步的,它还会通过到 GetQueuedCompletionStatus 的挂钩来捕获该调用的结束。检索到的数据被发送到我自己的 ASIO 线程池,该线程池为与 Wireshark 的命名管道连接提供服务。它实际上很甜。
一切都很好,除非我必须让程序恢复到原来的状态。取消挂钩功能可以正常工作,除非我强制目标应用程序通过命名管道处理大量请求,否则可以在 GetQueuedCompletionStatus 中无限期阻止现有调用。如果我不等待这些线程解除阻塞,当 GetQueuedCompletionStatus 最终解除阻塞并返回到不再存在的代码洞穴时,我将导致 AV。
我尝试的另一件事是跟踪对 GetQueuedCompletionStatus 的每次调用,并让挂钩函数在 GetQueuedCompletionStatus 的 LpOverlapped 参数与对 PostQueuedCompletionStatus 的相应调用匹配时通知信号。当然,这会解除对所有内容的阻塞,但会严重破坏调用 GetQueuedCompletionStatus 的代码,从而导致 AV。
有谁知道处理这个问题的好方法?如果我可以执行以下操作之一,这将起作用:
- 使用 ASIO 将忽略的 PostQueuedCompletionStatus 进行调用
- 捕获 PostQueuedCompletionStatus 进行的虚拟调用并覆盖堆栈中的返回值
- 创建一个半永久性代码洞,其中包含一个用于挂钩阻塞调用的蹦床,它将函数指针访问器传递给挂钩调用。trampoline 函数将看到,如果该值不为 null,它将改为调用该函数指针,而不是将执行返回给调用者。在解除阻塞调度后,挂钩代码可以将该函数指针设置为 GetQueuedCompletionStatus 的地址,然后我们就能够将正确的调用结果返回给调用者。
第一个选项很简单,但如果能够将此应用程序概括为与其他目标一起使用会很好。第二个很容易,除了我想尽可能安全地编写代码。最后一个可能是可行的,我只是不想用代码洞穴污染外部内存空间。
c# - 使用 EasyHook 从 Ole32.dll 库中挂钩 DoDragDrop() 函数
“ Ole32 ”, “ DoDragDrop ” 函数挂钩到资源管理器是成功的,但是每当我在资源管理器中拖动文件时,我的DoDragDropHook函数都没有调用,我对挂钩概念是新手,我从过去 3 个月开始尝试这样做,但到目前为止还没有正确的结果. 请帮助我哪里出错了
c - Linux 系统调用与 x64 系统中的现代内核挂钩
我是 rootkit 开发的新手,我正在学习如何挂钩系统调用。这样做时我遇到了一些问题,这个想法是每次调用open syscall 时都打印一些东西,我没有收到任何错误,但没有打印消息。
谁能告诉我我做错了什么?
[!] 将内核重新编译到较低版本不是一种选择
重要数据:
- 我有一个现代内核:4.10.0-37-generic
- 我有一台 64 位机器
- 系统调用表地址并不总是相同的(也许他们在内核内存中添加了某种 ASLR?),所以我需要一些代码来获取它。
代码:
内核日志文件:
delphi - 是否可以挂钩 EnumWindowsProc 回调函数?
我想知道是否可以挂钩一个回调函数,例如EnumWindowsProc()
使用内联挂钩方法?如果是,可以提供一个代码片段(示例)吗?
谢谢你。
版:
EnumWindowsProc
是在其他应用程序中实现的回调。我没有在我的应用程序中调用它。
我想EnumWindowsProc
通过 dll 注入钩在这个其他应用程序中。
c++ - 如何通过api hook拒绝winword中的“另存为”
winword进程打开一个文件要执行另存为操作,如果文件要保存到另一个目录,我想拒绝另存为操作。我想通过api hook使用C++,怎么办?< /p>
delphi - GetWindowThreadProcessId() IAT 挂钩:如何比较“dwProcessID”参数?
我正在GetWindowThreadProcessId()
使用以下代码与成功挂钩。
现在我想检查dwProcessID参数是否对应于确定进程的 id 并在肯定的情况下阻止执行原始函数:
我试过这个,但没有奏效:
这是我的完整代码:
delphi - 如何保存原始函数的地址并在以后调用它?
我正在尝试在 api 挂钩中调用原始函数,以防止按LdrLoadDll()
函数注入 dll,但是每次当我尝试加载不同的被过滤的 dll 时,应用程序崩溃并且不可能调用原始函数。似乎我什么时候会在钩子之前保存“original_function”时做错了。
我正在 Windows 7 x64 上进行测试,在 32 位应用程序中注入 32 位 dll(代码如下)。
如何解决这个问题?
.net - 防止文件在运行时 VB.NET 中被(删除/编辑)
是否可以保护项目目录位置内的文件。
例如(test.txt 或 test.bat 或...等)。
在运行项目时,我有重要数据不想在 txt 中更改。
累了很多东西。
- 通过权限/文件流锁定文件(但效果不好,通过更改用户权限很容易解锁。
现在我尝试了我的代码,但它在运行时只锁定项目而不是文件
假设我的文件类型(test.txt 或 test.bat 或...等)。