首页
社区
课程
招聘
IE TAB浏览器扩展插件修改过程
发表于: 2020-9-7 22:38 14943

IE TAB浏览器扩展插件修改过程

2020-9-7 22:38
14943

事情是这样的,我在使用Puppeteer框架对网站进行爬取的时候,发现有些页面使用到了ActiveX控件。众所周知,只有IE浏览器才支持ActiveX控件,而Puppeteer却不支持IE浏览器!这导致我在爬取的过程中页面无法正常加载,这样一来我也就截取不到我想要的一些请求了。

在尝试解决该问题的过程我了解到了IE TAB,IE Tab 是网页浏览器的一个扩展插件,支持Firefox/Chrome。

有些网站页面格式不标准,或者使用到了ActiveX控件,只能在IE浏览器中正常显示。而这个时候我们又想在Chrome/FireFox浏览器中访问此网站,这个时候就可以使用IE TAB插件,此插件主要功能是通过调用Internet Explorer的引擎来访问网页,解决一些网页无法在当前标准的浏览器中正常显示的问题。

该软件安装使用可能要用到科学上网,软件分免费版和授权版两种。

免费版能满足普通用户的大部分使用需求,但是对选项进行设置需要进行联网。

授权版有着GPO组策略部署等更方便好用的功能(不知道是啥玩意。。。)。

于是我便打算对IE TAB进行个人修改(去除一些我不想要的功能,添加我想要的功能)。

1.程序ietabhelper.exe会释放一个文件ietab_nm_manifest.json至目录C:\Users\fjqisba\AppData\Local\IE Tab下,同时在注册表SOFTWARE\Google\Chrome\NativeMessagingHosts\net.ietab.ietabhelper.peruser中写入该json文件路径。这样的目的其实是为了注册本地消息主机。

本地消息主机(Native messaging):

通过将浏览器所在客户端的本地应用注册为本地消息主机,Chrome浏览器扩展可以和本地应用之间收发消息。

本地应用要想成为"本地消息主机",必须有一个有效的json配置文件,例如:

其中path为本地应用的执行路径;allowed_origins为授权能够与本地消息主机进行通讯的浏览器扩展,不得有通配符。

之后在安装本地应用时需要在注册表中指明配置文件的路径,例如创建key

HKEY_CURRENT_USER\SOFTWARE\Google\Chrome\NativeMessagingHosts\com.my_company.my_application

设置默认值Default为配置文件所在的绝对路径。

程序注册了本地消息主机,是为了让浏览器扩展和程序自带的ietabhelper.exe进行通讯,个人推测一些核心功能其实是在ietabhelper.exe中,例如调用IE浏览器引擎等。

很明显我们在重新打包扩展插件的时候,浏览器扩展插件的id会发生变化,因此我们需要修改配置文件中allowed_origins的内容,allowed_origins内容其实来源于ietabhelper.exe中,我们可以对该exe进行patch,加入我们自己的浏览器扩展插件id。

2.在nathost_manager.js中似乎对浏览器扩展ID还有判断,先不管对不对,加上自己的ID就完事了。

3.在进行选项设置的时候,你需要访问http://www.ietab.net/options这个网址才行,其实就软件功能来说,理应可以实现完全本地化的,但是作者非要你访问他的官网,这里我们直接将options.html给离线存储下来,相应的服务器js、html、css也保存到本地,再修正一下HTML引用的文件URL。

之后我们还需要修改一下程序的配置,在manifest.json中有一个值为content_scripts,简要介绍如下:

Content scripts是在Web页面内运行的javascript脚本。通过使用标准的DOM,它们可以获取浏览器所访问页面的详细信息,并可以修改这些信息。

下面是content scipt可以做的一些事情范例:

从页面中找到没有写成超链接形式的url,并将它们转成超链接。
放大页面字体使文字更清晰
找到并处理DOM中的microformat
当然,content scripts也有一些限制,它们不能做的事情包括 :

不能使用除了chrome.extension之外的chrome. 的接口
不能访问它所在扩展中定义的函数和变量
不能访问web页面或其它content script中定义的函数和变量
不能做cross-site XMLHttpRequests
这些限制其实并不像看上去那么糟糕。Content scripts 可以使用messages机制与它所在的扩展通信,来间接使用chrome.
接口,或访问扩展数据。Content scripts还可以通过共享的DOM来与web页面通信。

总之,可以理解为一个页面注入js,而IE TAB存在这么一个配置

意思就是,程序在访问http://www.ietab.net/options这个网址时,便会注入extapi_cs.js这个js,这个js非常关键,涉及到核心功能之间的相互通讯,如果没有的话那么功能会无法执行起来。由于我们本地化了options.html,因此我们也需要注入这个js,其实方式也很简单,我们可以直接在options.html中加入下列代码

这样便完成了和原程序一样的注入。

4.软件使用到了localStorage来存储配置选项信息+授权信息,在Settings.js中存在以下代码,为程序加载的一些默认项

localStorage为浏览器的本地存储机制,存储时间理论上来说是永久有效的,即不主动清空的话就不会消失,即使保存的数据超出了浏览器所规定的大小,也不会把旧数据清空而只会报错。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 6
支持
分享
最新回复 (4)
雪    币: 12502
活跃值: (3053)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
楼主nb,话说用这玩意主要是想使用com组件,但是chrome不支持com。好像有个更好的办法,是编写什么标准来着,psnapi,npapi还是什么名字有点忘了。。。就是可以把dll封装给js。
2020-9-8 09:49
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
怎么访问插件打开的web页面的元素?能指点一下吗?
2023-3-4 15:38
0
雪    币: 220
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4

直接修改Settings.js内容,添加licensee后,文件hash发生改变,浏览器会提示“此扩展可能已损坏”。估计还需要自己想办法重现对它进行签名才行。

最后于 2023-10-12 09:47 被Elickson2022编辑 ,原因: 补充说明
2023-10-9 11:28
0
雪    币: 220
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
如果只是内网使用,原来可以不修改插件本身的任何内容,只需要修改浏览器的本地存储,在本地存储IE tab扩展里找到localSettings,将licensee和license-key添加进去就可以使用全部功能了。
2023-10-12 09:45
0
游客
登录 | 注册 方可回帖
返回
//