3

我编写了自己的 LSP,它运行良好。但是,我无法捕获 dns 查询。例如,没有像 WSPGetHostByName 或 WSPGetAddrInfo 这样的函数。

我的 lsp 也支持 UDP 协议,但它不工作。如果我从控制台 (cmd.exe) 运行 nslookup,它似乎可以工作,但我无法捕获 gethostbyname。有谁知道这是怎么做到的吗?我不认为编写 NSP(名称服务提供商)是一种解决方案。但我可能错了。

谢谢

4

2 回答 2

5

我们开发了一个可以“拦截”DNS 查询的 LSP。唯一的方法是连接所有 DNS 功能,请记住,您需要解决一些挑战:

  1. 您需要使用支持 32 位和 64 位代码的良好挂钩库。
  2. 库许可证必须适合您的应用程序,有一些免费库,但只能用于免费项目。
  3. 当你挂钩函数时,你需要确保不要修改某些不是基于 IP 的值,并将查询推迟到真正的函数。

由于查询是从 MS DNS 客户端发出的,因此拦截 UDP 将不起作用,因此除非您编写低级驱动程序,例如:TDI、NDIS 或 WFP,否则您必须挂钩函数(或编写 NSP)。NSLookup 适合您,因为它自己创建 DNS 查询。

于 2011-11-29T23:47:29.230 回答
0

我的解决方案如下:

  1. 以众所周知的网络浏览器为例:firefox.exe

  2. 将其复制为一个新名称:icefoxy.exe

  3. 修改 EXE,使其加载自定义 DLL。

几个月前我已经这样做了,但由于 Firefox 不断更新,这意味着:

要么:保留一个版本,不要更新(风险自负,可能会导致安全问题,因为这意味着漏洞不会被修复)

或者:每次 firefox.exe 更改时更新您的修改。

DLL 可以很容易地使用 Delphi 编写。

Firefox 修改需要汇编语言,除非您知道如何下载所有必要的文件来自己编译 Firefox,可以访问 C/C++ 编译器(可能是 mingw-gcc),并准备好有 2 个相互排斥的标准C++,并且如果您的 g++(gcc 套件的一部分)与您的 Firefox 源不兼容,那么您的尝试将失败。

我自己不是 C++ 专家,所以我选择了(至少对我来说)更简单的方法,使用机器语言,这样我就不需要成为 C/C++ 专家来完成工作。

一些相对的点:

  1. 必须挂钩哪些功能才能拦截 Firefox 对 dns 服务器的所有访问?

  2. 我注意到,如果您将 Delphi DLL 加载到 Icefoxy.exe(Firefox.exe 的重命名副本)中,则 Delphi 表单的颜色会丢失,例如。如果您设置(在对象 isspector 或代码中):

Label1.Color := clLime;

你仍然会看到一个没有石灰背景颜色的标签。我不知道确切的原因,但似乎 Delphi VCL 依赖于在 EXE 中使用,并且当您在 DLL 而不是 EXE 中使用 Delphi VCL 组件时,某些东西(例如颜色)无法按预期工作.

我很乐意发布我的代码(对 Firefox 和 Delphi DLL 源代码的汇编语言修改),但是我如何/在哪里可以发布它以便公开查看?

我使用 Delphi 7 来制作 DLL。

如果您使用 Delphi 2009 或更高版本,则需要特别注意在 Delphi 代码和任何非 Delphi 代码之间传递的任何字符串数据都具有正确的编码,因为在 Delphi 2009 和所有较新版本中,字符串类型是 unicodestring 的别名,在旧的 Delphi 版本中,String 类型是 AnsiString 的别名。

在我这样做的时候,这只是一个小实验,以确定我是否可以强制 Firefox 加载我自己的 DLL,因为它是进程地址空间。

另一个有趣的想法是从 Delphi DLL 访问 Firefox 的 DOM(文档对象模型),这将为使用 TWebBrowser(基于 Microsoft 的 Internet Explorer 的 ActiveX 版本)提供一个可行的替代方案。

I know there have been components like TWebBrowser based on Firefox, but their problem is that nobody cared to update them for a very long time, so they are compatible only with some very outdated version of Firefox.

于 2015-01-05T02:37:59.833 回答