我写了自己的LSP,工作正常。但是,我无法捕获dns查询。例如,没有像WSPGetHostByName或WSPGetAddrInfo这样的函数。
我的lsp也支持UDP协议,但它不起作用。如果我从控制台(cmd.exe)运行nslookup它似乎工作但我无法捕获gethostbyname。有谁知道这是怎么做到的吗?我不认为编写NSP(名称服务提供商)是一种解决方案。但我可能错了。
由于
答案 0 :(得分:4)
我们开发了一个可以“拦截”DNS查询的LSP。唯一的方法是通过挂钩所有DNS功能,请记住,您需要解决一些挑战:
由于查询是从MS DNS客户端发出的,因此拦截UDP将无法正常工作,因此除非你编写一个低级驱动程序,如:TDI,NDIS或WFP,否则你必须挂钩这些函数(或写一个NSP)。 NSLookup适合您,因为它自己创建DNS查询。
答案 1 :(得分:0)
我的解决方案如下:
使用众所周知的网络浏览器:firefox.exe
将其复制为新名称:icefoxy.exe
修改EXE,以便加载自定义DLL。
几个月前我已经完成了这项工作,但由于Firefox不断获得更新,这意味着:
EITHER:保留一个版本并且不更新(风险自负,可能会导致安全问题,因为这意味着漏洞无法修复)
OR:每次firefox.exe更改时都更新修改。
可以使用Delphi轻松编写DLL。
Firefox修改需要汇编语言,除非你知道如何下载所有必要的文件来自己编译firefox,有权访问C / C ++编译器(可能是mingw-gcc),并准备好相互之间有2个C ++的独家标准,如果您的g ++(gcc套件的一部分)与您的Firefox源代码不兼容,那么您的尝试将失败。
我自己不是C ++专家,因此我使用机器语言(至少对我而言)更简单,这样我就不需要成为C / C ++专家来完成工作。
一些相对点:
必须挂钩哪些功能才能拦截所有Firefox对dns服务器的访问权限?
我注意到,如果你将Delphi DLL加载到Icefoxy.exe(Firefox.exe的重命名副本)中 然后缺少德尔福表格的颜色,例如。如果你设置(在对象ispector或代码中):
Label1.Color:= clLime;
你仍然看到一个没有石灰背景颜色的标签。我不知道确切的原因,但似乎Delphi VCL依赖于在EXE中使用,当你在DLL中使用Delphi VCL组件而不是EXE时,某些东西(如颜色)不能按预期工作
我很乐意发布我的代码(对Firefox和Delphi DLL源代码进行汇编语言修改),但我如何/在哪里发布它以便公开查看?
我使用Delphi 7制作DLL。
如果您使用Delphi 2009或更高版本,则需要特别注意在Delphi代码和任何非Delphi代码之间传递的任何字符串数据都具有正确的编码,因为在Delphi 2009和所有较新版本中, String类型是unicodestring的别名,在较旧的Delphi版本中,String类型是AnsiString的别名。
在我这样做的时候,这只是一个小实验,以确定我是否可以强制Firefox加载我自己的DLL以及它的进程地址空间。
另一个有趣的想法是从Delphi DLL访问Firefox的DOM(文档对象模型),这将为使用TWebBrowser(基于Microsoft的Internet Explorer的ActiveX版本)提供一种可行的替代方案。
我知道有基于Firefox的TWebBrowser等组件,但他们的问题是没有人会在很长一段时间内更新它们,所以它们只与一些非常过时的Firefox版本兼容。