问题标签 [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.

0 投票
1 回答
134 浏览

c++ - 如何挂钩新创建的注册表

我知道如何挂钩 API。但我不知道新创建注册表时调用了什么 API。

我想检测注册表创建时间,我想知道那个键,数据。
是否有任何 API 可用于与注册表相关的挂钩?
以及如何知道 API 是最好的?

0 投票
0 回答
1018 浏览

c++ - 通过注入使用 C++ dll 的 IAT 钩子不拦截 api

我正在尝试在MessageBoxA我使用 IAT 钩子技术制作的远程进程中制作 api 钩子。我正在使用Process Hacker软件将我的 dll 文件注入到我的进程中,直到这里工作正常。

我唯一的麻烦是,MessageBoxA当我从我的应用程序调用这个 api 时,它永远不会被拦截。

我发现这个 api 不能在我的进程的导入表中找到。

所以,我想知道关于如何在桌面上找到这个 api 的任何建议。

这是我使用的代码:

资源

编辑1:

我已经看到更多的数据,现在这段代码能够找到MessageBoxAapi :D,但是当我从我的应用程序(用 Delphi 制作)调用这个 api 时,钩子不起作用。:-(

我的德尔福代码在这里:

编辑2:

可能是一个确定的解决方案,但链接处于脱机状态。有人可以帮助我了解它如何适应我上面的代码吗?

0 投票
1 回答
765 浏览

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 的地址,然后我们就能够将正确的调用结果返回给调用者。

第一个选项很简单,但如果能够将此应用程序概括为与其他目标一起使用会很好。第二个很容易,除了我想尽可能安全地编写代码。最后一个可能是可行的,我只是不想用代码洞穴污染外部内存空间。

0 投票
0 回答
493 浏览

c# - 使用 EasyHook 从 Ole32.dll 库中挂钩 DoDragDrop() 函数

Ole32 ”, “ DoDragDrop ” 函数挂钩到资源管理器是成功的,但是每当我在资源管理器中拖动文件时,我的DoDragDropHook函数都没有调用,我对挂钩概念是新手,我从过去 3 个月开始尝试这样做,但到目前为止还没有正确的结果. 请帮助我哪里出错了

0 投票
0 回答
1416 浏览

c - Linux 系统调用与 x64 系统中的现代内核挂钩

我是 rootkit 开发的新手,我正在学习如何挂钩系统调用。这样做时我遇到了一些问题,这个想法是每次调用open syscall 时都打印一些东西,我没有收到任何错误,但没有打印消息。

谁能告诉我我做错了什么?

[!] 将内核重新编译到较低版本不是一种选择

重要数据:

  • 我有一个现代内核:4.10.0-37-generic
  • 我有一台 64 位机器
  • 系统调用表地址并不总是相同的(也许他们在内核内存中添加了某种 ASLR?),所以我需要一些代码来获取它。

代码:

内核日志文件:

0 投票
1 回答
248 浏览

delphi - 是否可以挂钩 EnumWindowsProc 回调函数?

我想知道是否可以挂钩一个回调函数,例如EnumWindowsProc()使用内联挂钩方法?如果是,可以提供一个代码片段(示例)吗?

谢谢你。


版:

EnumWindowsProc是在其他应用程序中实现的回调。我没有在我的应用程序中调用它。

我想EnumWindowsProc通过 dll 注入钩在这个其他应用程序中。

0 投票
1 回答
59 浏览

c++ - 如何通过api hook拒绝winword中的“另存为”

winword进程打开一个文件要执行另存为操作,如果文件要保存到另一个目录,我想拒绝另存为操作。我想通过api hook使用C++,怎么办?< /p>

0 投票
1 回答
288 浏览

delphi - GetWindowThreadProcessId() IAT 挂钩:如何比较“dwProcessID”参数?

我正在GetWindowThreadProcessId()使用以下代码与成功挂钩。

现在我想检查dwProcessID参数是否对应于确定进程的 id 并在肯定的情况下阻止执行原始函数:

我试过这个,但没有奏效:

这是我的完整代码:

0 投票
2 回答
256 浏览

delphi - 如何保存原始函数的地址并在以后调用它?

我正在尝试在 api 挂钩中调用原始函数,以防止按LdrLoadDll()函数注入 dll,但是每次当我尝试加载不同的被过滤的 dll 时,应用程序崩溃并且不可能调用原始函数。似乎我什么时候会在钩子之前保存“original_function”时做错了。

我正在 Windows 7 x64 上进行测试,在 32 位应用程序中注入 32 位 dll(代码如下)。

如何解决这个问题?

0 投票
1 回答
175 浏览

.net - 防止文件在运行时 VB.NET 中被(删除/编辑)

是否可以保护项目目录位置内的文件。

例如(test.txt 或 test.bat 或...等)。

在运行项目时,我有重要数据不想在 txt 中更改。

累了很多东西。

  • 通过权限/文件流锁定文件(但效果不好,通过更改用户权限很容易解锁。

现在我尝试了我的代码,但它在运行时只锁定项目而不是文件

假设我的文件类型(test.txt 或 test.bat 或...等)。