我写了自己的LSP,这很好。但是,我无法捕获DNS查询。例如,没有像WSPGethostByName或WspgetAddrinfo这样的功能。

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

谢谢

有帮助吗?

解决方案

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

  1. 您需要使用一个良好的钩库,该库将支持32位和64位代码。
  2. 图书馆许可必须适合您的应用程序,有一些免费的库,但只能在免费项目中自由使用。
  3. 当您连接函数时,您需要确保不要修改不是基于IP的某些值,而要将查询推迟到真实函数。

由于查询已从MS DNS客户端出发,因此拦截UDP无法正常工作,因此,除非您编写一个低级驱动程序,例如:TDI,NDIS或WFP,您必须挂接函数(或编写NSP)。 NSlookup为您服务,因为它会创建DNS查询本身。

其他提示

我的解决方案如下:

  1. 采用众所周知的Web浏览器:firefox.exe

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

  3. 修改EXE,以便它加载自定义DLL。

几个月前,我已经做到了这一点,但是由于Firefox不断获得更新,这意味着:

要么:保留一个版本并且不要更新(您自己的风险,可能会引起安全问题,因为这意味着漏洞将无法修复)

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

可以使用Delphi轻松编写DLL。

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形式的颜色,例如。如果您设置(在对象iSpector中或代码中):

label1.color:= cllime;

您仍然会看到没有石灰背景颜色的标签。我不知道确切的原因,但是似乎Delphi VCL依靠在EXE中使用,当您使用Delphi VCL组件而不是EXE中时,某些东西(例如颜色)不适用于预期。

我很乐意将我的代码发布(既汇编语言修改firefox and delphi dll源代码),但是我如何/在哪里可以发布它,以便公开查看?

我使用Delphi 7来制作DLL。

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

在我这样做的时候,发现是否可以强迫Firefox加载自己的DLL Inti的过程地址空间,这只是一个小实验。

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

我知道有基于Firefox的Twebbrowser之类的组件,但是他们的问题是没有人关心他们很长时间更新它们,因此它们仅与一些非常过时的Firefox版本兼容。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top