VeryCD拦截自定义协议分析

一般来说,我们通过注册自定义协议,可以在浏览器中通过链接方式自动打开客户端程序。

不过,如果没有客户端程序就会导致无法访问的页面错误,如何才能够判断自定义协议在本地没有被注册,并弹出客户端的安装提示呢?

新装系统以后,意外发现VeryCD可以在没有安装eMule的时候会弹出提示,效果如下:

VeryCD_Download 

于是做了一点研究,希望能够实现一样的效果。

VeryCD网页采用YUI库,多数自定义的js都是以编号结尾如:group.js.r23406,不知道是不是使用YUI压缩的结果,如上图的对话框代码集中在footer.js.r23406中,大概的流程:

首先,在页面初始化时,所有ed2k://的link设置click事件。

然后,在click事件中创建IE2EM.IE2EMUrlTaker对象,该对象好像是为了处理如上图中“复制选中的链接”的功能。该对象应该是在eMule安装时注册的,所以在没有安装时会导致异常,在异常catch中,显示如上的对话框。

最后,如果用户选择下载则跳转页面到下载页面,如果选择已安装,则设置Cookie。

但不知道为什么,VeryCD在网页上特别做了浏览器类型判断,非IE的浏览器中不显示该对话框,所以在如Firefox,Chrome这些浏览器中只是不下载,什么反应都没有。

基本来说,VeryCD就是通过尝试创建客户端的ActiveX控件,在失败时弹出安装提示。

该方法的缺点是,只对IE有效,因为其他浏览器并不支持ActiveX控件,所以无论是否安装都会导致异常,这也可以解释为什么VeryCD特别在网页上判断浏览器类型,并对其他浏览器进行了屏蔽。

Leave a Reply

Your email address will not be published. Required fields are marked *