【问题标题】:Can AppInit_DLLs be used to hook APIs from Ws2_32.dll?AppInit_DLLs 可以用来从 Ws2_32.dll 挂钩 API 吗?
【发布时间】:2013-02-11 00:12:55
【问题描述】:

我正在寻找将出站 TCP/IP 连接从 Windows 客户端上的特定端口重定向到不同端口号的方法。 (这是提供从用于文件和打印机共享的端口 445 重定向 SMB 连接的能力所必需的。)

除了挂钩 WinSock API 并在那里更改端口之外,我找不到其他方法。我找到了AppInit_DLLs 技术,我想知道它是否可以用来挂钩 Ws2_32.dll(这似乎包含 WinSock API)?

我的想法是挂钩到通常设置端口号的connectaccept API。这只是一个想法,所以在我真正开始编写代码之前,我会很感激有人对此采取了行动......

【问题讨论】:

  • 这类恶作剧往往会引起病毒扫描程序的注意。

标签: c++ winapi hook winsock winsock2


【解决方案1】:

为什么不呢?是的,这是可能的,但不要忘记在挂钩之前加载 DLL。因为 AppInit 在 user32.dll 加载时被加载(而且肯定是在加载 ws2_32 之前)。

看看detours,或者尝试做一个自己的内联钩子。请注意多线程应用程序,您必须使用多线程安全钩子。

【讨论】:

  • 并非所有进程都加载 user32,并且大多数 SMB 流量是从内核模式启动的,而不是用户模式。
  • 如果它是从内核模式启动的,那么他不能对它做任何事情(除了驱动程序,但这不太可能)。我假设他至少通过将他的代码注入另一个进程来测试它。
  • 应用程序访问网络资源一般只使用CreateFileReadFile,让内核做重定向。应用程序通常不会打开端口并来回发送原始 SMB 数据包。
  • 是的,我同意雷蒙德的观点。它的级别低于 user32.dll。所以没有运气......
【解决方案2】:

很遗憾,这是不可能的。您最好的办法是制作一个代理 DLL,用您自己的方法替换您希望挂钩的自定义方法。

【讨论】:

    猜你喜欢
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-31
    • 1970-01-01
    • 2017-03-30
    相关资源
    最近更新 更多