开始

  在看这篇文章之前,你可以有两个选择:

  1. 网上下载Chrome插件伴侣这一工具,一键离线安装插件(注意:博主非工具作者,不保证此工具安全性,请自行分析),然后关闭此文章。
  2. 继续看下去搞懂原理,然后自己手动离线安装插件或编写一个属于自己的离线安装工具。

手动化安装方法

  首先进入Chrome扩展程序的管理页面,在地址栏敲入chrome://extensions/即可进入。

  然后把右上角的开发者模式打开(刚不是说无需这个模式吗?别急,暂时的。),拖入插件进行添加,复制插件的ID后关闭开发者模式即可。如图所示:

接着关闭Chrome,将以下内容复制粘贴到记事本上保存,将文本后缀名.txt改为.reg,双击运行。

Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome\ExtensionInstallWhitelist]
"1"="ijaojehcgjneognjmhdiidbfhpgfkkgp" 

  若要添加多个插件,"1"="ijaojehcgjneognjmhdiidbfhpgfkkgp"以此类推往下添加"2"="插件ID""3"="插件ID"……

  最后重新打开Chrome后插件就可以正常使用了,如安装的插件没有立即启用,可直接到扩展程序管理页面里手动开启。

自动化编程思路

获取插件公钥和版本号

  这里需要从.crx包头提取公钥和版本号(制作插件时命名的版本号)以作备用。

CRX 包的头信息

  头信息包含作者的公共密钥和扩展程序的签名,签名以SHA-1算法使用作者的私有密钥从.zip文件生成。头信息要求字节顺序为小端序并以4字节对齐。下表按顺序描述.crx的头信息:

字段 类型 长度 描述
magic number char[] 32 位 Cr24 Chrome 要求每一个 .crx 包的开头包含此常量。
version unsigned int 32 位 2 *.crx 文件格式的版本(当前为2)。
public key length unsigned int 32 位 pubkey.length RSA 公共密钥的长度,以字节为单位。
signature length unsigned int 32 位 sig.length 签名的长度,以字节为单位。
public key byte[] pubkey.length pubkey.contents 作者的 RSA 公共密钥内容,以 X509 SubjectPublicKeyInfo 块的格式表示。
signature byte[] sig.length sig.contents ZIP 内容使用作者私有密钥的签名,该签名使用 RSA 算法以及 SHA-1 散列函数创建。

  例子:

43 72 32 34   # "Cr24" -- the magic number
02 00 00 00   # 2 -- the crx format version number
A2 00 00 00   # 162 -- length of public key in bytes
80 00 00 00   # 128 -- length of signature in bytes
...........   # the contents of the public key
...........   # the contents of the signature
...........   # the contents of the zip file

获取插件ID

  插件的ID可以从插件的公钥得到,经过如下计算:

graph LR公钥 --> Base64 Base64 --> SHA256SHA256 --> Base16Base16 --> 插件ID

  示例代码:

def build_id(pub_key_pem):pub_key_der = base64.b64decode(pub_key_pem)  sha = hashlib.sha256(pub_key_der).hexdigest()prefix = sha[:32]       extension_id = ""ord_a = ord('a')  for old_char in prefix:code = int(old_char, 16)new_char = chr(ord_a + code)extension_id += new_charreturn extension_id

重命名和移动插件

  将插件重命名为插件ID.crx,移动到AppData\Local\ChromeExtensionCache(没有就新建)处作为插件存放路径。

部署安装

  在注册表添加插件信息,chrome启动时会自动安装。

  在注册表HKEY_CURRENT_USER\Software\Google\Chrome\Extensions添加以插件ID命名的项,以及插件存放路径path、插件版本号version两个字符串值,而version值就是从.crx包头获取的版本号。如图:

添加白名单

  在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\ExtensionInstallWhitelist添加以数字命名的字符串值,其数值数据为插件ID。(与上述的手动化安装方法中导入.reg一样,只是编程时直接操作注册表即可)

后记

  如果安装插件部署安装成功后又卸载掉了插件,第二次安装时就不会自动安装,这是因为AppData\Local\Google\Chrome\User Data\Default目录下的Secure Preferences记录了该插件的卸载信息,要想解决这个问题,一是直接删除Secure Preferences文件(这会导致Chrome的个人设置偏好丢失,即恢复出厂设置),二是修改Secure Preferences,将该插件的卸载信息剔除掉(太麻烦)。

  博主个人觉得比较舒服的做法是重新打包插件,即每次安装该插件前,都经过解包-->打包这一步骤。因为插件在不指定密钥进行打包时会自动生成随机密钥,而公钥又是从密钥中获得,所以插件ID也会是随机的,随着插件ID的更新,Secure Preferences中该插件对应的插件ID卸载信息就会失效,从而达到每次安装都是第一次的效果。

  和手动打包不同,通过编程的方式打包当然不可能傻傻地去操作Chrome界面,这里用到一个Chrome的打包命令,可指定一个密钥打包,也可不指定,这会随机生成一个后缀为.pem的密钥(当然,也可以自己生成一个)。命令如下:

chrome.exe --pack-extension=C:\myext --pack-extension-key=C:\myext.pem

Chrome插件离线安装方法及编程思路相关推荐

  1. 谷歌插件离线安装方法

    第一个办法 http://chromecj.com/utilities/2014-09/181.html 在用户使用谷歌浏览器安装Chrome插件的时候,如果网络状态允许或者用户直接在谷歌提供的服务中 ...

  2. Chrome插件离线安装 + Chrono下载管理器

    安装方法参考: Chrome插件离线安装 + 解决安装时出现程序包无效:"CRX_HEADER_INVALID"的问题 --by CSDN-李阿昀 下载地址: Chrono下载管理 ...

  3. 关于破解版XD安装(提供链接)及插件离线安装方法

    注:这里只提供mac的下载及安装方法哦,是自己亲测后发上来的 破解版XD for mac 附上下载链接:XD for mac 安装方法就不多bb了,链接里站主很贴心的提供了两种方法,版本也很多根据系统 ...

  4. 如何安装CRX格式?Chrome插件离线安装,CRX格式安装方法 JSON-handle Chrome插件下载...

    目前,Chrome官方已经禁止非 Chrome商店 的应用安装了,所以本站的应用还是通过国外服务器从谷歌官方应用市场下载下来的,提供给国内的广大用户使用,下面我们就以 Check my cookies ...

  5. Chrome谷歌浏览器离线安装方法

    在Chrome官网:https://www.google.cn/intl/zh-CN/chrome/ 里面下载的浏览器一般都是只有几MB的在线安装包. 如果想要下载Chrome的离线安装包,有两种方法 ...

  6. 已尝试对扩展程序降级怎么解决_谷歌插件离线安装方法,解决程序包无效(crx_header_invalid)问题...

    从19年开始,新版的谷歌浏览器就更新了安全策略,导致离线安装Chrome扩展插件"xxx.Crx"文件时,总提示程序包无效:"CRX_HEADER_INVALID&quo ...

  7. 360浏览器扩展插件离线安装方法

    背景: 有一台互联网电脑,安装好360浏览器,下载了相应插件,想把该插件转移到一台没有网的电脑上. 1.打开360安全浏览器,输入:"se://extensions/"回车即可进入 ...

  8. 推荐 12个Idea 免费实用插件及插件离线安装方法

    https://blog.csdn.net/huoqilinheiqiji/article/details/86622154 https://blog.csdn.net/dingzfeng/artic ...

  9. 将谷歌浏览器 Chrome 已安装的插件打包成 crx 给其它电脑离线安装 +【怎么安装Chrome插件】安装Chrome第三方插件

    转载:将谷歌浏览器 Chrome 已安装的插件打包成 crx 给其它电脑离线安装 转载: [怎么安装Chrome插件]安装Chrome第三方插件 环境: OS - win7 64bit 旗舰版 Chr ...

最新文章

  1. SpringBoot中使用@Mapper注解需要哪个包
  2. 工业用微型计算机(7)-指令系统(4)
  3. jenkins-基础配置
  4. python中添加路径_python中添加模块导入路径的方法
  5. 基于Jenkins 快速搭建持续集成环境
  6. php mssql 分页SQL语句优化 持续影响
  7. Python源码剖析笔记3-Python执行原理初探
  8. 车辆模型-动力学模型(Dynamics Model)
  9. excel vba批量发送邮件
  10. qq传输文件的软件测试点,QQ传文件速度对比测试活动
  11. 川农《工程地质及水文地质(本科)》21年12月作业考核
  12. phpstorm配置vcs自动上传代码
  13. windows10 1909 原版纯净系统分享
  14. 上高职业技术学校计算机学几年,上高县职业技术学校简介|上高县职业技术学校介绍...
  15. suse linux 11镜像下载,SUSE Linux Enterprise 11 SP3 发布
  16. 仙人掌之歌——上线运营(2)
  17. 新人手册系列:多面手之性能测试
  18. 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第44讲:PHP程序设计中的COOKIE
  19. 户外顶级装备---安全套和卫生巾!(转载)
  20. 康耐视智能相机与PLC交互详细流程(以Profinet通讯为例,此流程适合所有通讯协议)

热门文章

  1. java计算机毕业设计校园二手书交易系统源码+系统+数据库+lw文档+mybatis+运行部署
  2. 自然资源部卫星遥感应用报告(更新至2020)
  3. 通过Gazebo仿真学TurtleBot3(四)——简单的/cmd_vel控制
  4. win10时间同步一直失败的解决办法
  5. Cloudflare 与 GoDaddy
  6. 台式计算机屏幕亮度在哪调,电脑亮度怎么调?教您电脑亮度在哪里调
  7. python 图像分割_Python中的图像分割(第2部分)
  8. TCP/IP传输层协议实现 - TCP接收窗口/发送窗口/通告窗口(lwip)
  9. css之calc,初探CSS3中的calc()功能
  10. 配置web.xml文件时报The word ‘***‘ is not correctly spelled的解决方案