2

我有一个在 WinSock 模块(发送和接收函数)上做一些内联钩子的过程。在装有 McAfee 的机器上,我可以看到两个 dll 被注入到我的进程中:

  • hipi.dll
  • hipqa.dll

两者也可能对这些功能进行内联挂钩,并且我会遇到冲突和不需要的行为。是否有阻止/卸载这些 dll 的选项,以免它们干扰?

10 倍,盖伊

4

6 回答 6

1

实现DLL注入(Hooking)的场景有很多,顺便说一句,你必须更多地了解每个方法背后的东西是如何工作的,最常见的是使用CreateRemoteThread() API函数,然后你必须在每个进程上注入你的安全DLL并挂钩/重定向/拒绝对 CreateRemoteThread() 的任何调用或任何“危险”的 API 调用。

PS:但请记住:

用户模式挂钩永远不会成为以任何安全方式应用额外安全检查的选项。如果你只想“沙箱化”一个专用进程,你很了解,而进程实际上并不了解 EasyHook,这可能会成功!但永远不要尝试编写任何基于用户模式挂钩的安全软件。它不会起作用的,我向你保证……</p>

于 2013-04-29T11:28:13.447 回答
0

我曾经不得不处理类似的事情。阅读他们自己的钩子组件存根,这样您就可以弄清楚如何以一种在您的钩子之后链接到他们的钩子的方式进行钩子。

于 2013-04-29T18:35:00.587 回答
0

最简单的解决方案是解开受影响的函数。我不得不做同样的事情来解决一些戴尔垃圾软件。尽管它需要对 x86 汇编有所了解,但它并不太难。您必须禁用 DEP,使修补后的代码可写,找到原始指令,然后将它们复制回来。找到原始说明可能意味着拆卸补丁。

于 2013-02-04T09:31:39.113 回答
0

另一种选择是简单地将它挂在不同的地方。例如,改为挂钩 IAT,然后当您完成所需的任何操作时,将执行转发回真正的函数,然后它将通过 McAfee 的挂钩。

于 2013-02-04T09:32:46.463 回答
0

您有 2 个选项。

  1. 为您的进程添加一个排除项,以便 McAfee 不会尝试扫描它。我不使用 McAfee 的产品,但我认为这将是一个相对简单的过程。
  2. 卸载迈克菲
于 2013-02-04T09:20:43.143 回答
0

我想 McAfee 正在从内核模式执行 DLL 注入。他们可能会找到 KeServiceDescriptorTable 的地址(由 NTOSKRNL 在 32 位系统上导出,并且其地址在 64 位环境中由 KiSystemServiceRepeat 泄露 -> 接近由 IA32_LSTAR 模型特定寄存器找到的 KiSystemCall64),然后从服务表,或者他们使用 KeInitializeApc 和 KeInsertQueueApc(均由 NTOSKRNL 导出)进行 APC 注入(自定义 NtQueueApcThread 包装器)。考虑到他们是拥有大量资源的安全供应商,这将是合乎逻辑的,我怀疑他们会从用户模式注入。

他们可能正在滥用 PsSetCreateProcessNotifyRoutineEx 或 PsSetLoadImageNotifyRoutineEx 来检测新进程的创建。第一个不如后者好,后者更适合过滤 NTDLL.DLL,因为它是加载到每个单独进程中的第一个模块,并且表示该进程实际上已经正确启动并且即将准备好执行它自己的代码(在加载 Windows 模块之后,并且因为 McAfee 需要等待诸如 kernel32.dll 之类的 Win32 模块加载,否则如果他们在注入的模块中完全使用 Win32 API,则会导致进程崩溃)。

您可以尝试拦截 LdrInitializeThunk 或 KiUserApcDispatcher,但老实说,您无能为力。无论您做什么,McAfee 都会找到一种方法注入您的进程,因为它们可以从内核模式进行控制。如果您通过驱动程序的各种内核模式回调开发进程保护,它们将使用通过 ntoskrnl.exe 的模式匹配扫描定位的非导出例程或不调用回调通知 API 的导出例程绕过它。如果你在本地修补远程攻击者在你自己的进程中本地调用的线程创建/APC 例程,他们会找到防止这种情况并绕过它的方法(例如,将你进程地址空间中的修补例程修补回原始,注入,然后重新修补字节)。

如果您想停止具有 McAfee 特权的安全软件,那您就是在玩火。这类似于 Anti-Cheat 无法阻止具有内核模式访问权限的游戏黑客,并且采取严厉措施甚至标记当今启用的调试模式/测试模式。

于 2017-12-20T15:13:43.073 回答