吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 28445|回复: 107
收起左侧

[Web逆向] Chrome插件离线安装方法及编程思路

    [复制链接]
三水非冰 发表于 2019-1-2 13:19
本帖最后由 三水非冰 于 2019-1-2 14:54 编辑

前言

  本帖由我的个人博客原创文章修改整理而来,菜鸟技术,大神莫喷。  

转载请注明作者及出处,如:
吾爱破解论坛 三水非冰
SanShuiFeiBing's Blog 三水非冰

开始

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

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

手动化安装方法

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

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

1.jpg

  接着关闭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 --> SHA256
  SHA256 --> Base16
  Base16 --> 插件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_char
    return extension_id

重命名和移动插件

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

部署安装

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

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

2.jpg

添加白名单

  在注册表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

免费评分

参与人数 31吾爱币 +38 热心值 +25 收起 理由
holding + 1 + 1 学习了
info4 + 1 热心回复!
ppxox + 1 + 1 我很赞同!
xiaoxiaoliui + 1 用心讨论,共获提升!
Hmily + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
a3661785 + 1 + 1 我很赞同!
mr.liuc + 1 热心回复!
yhcfsr + 1 + 1 我很赞同!
DCMMC + 1 谢谢@Thanks!
独行风云 + 1 + 1 用心讨论,共获提升!
orangt + 1 + 1 用心讨论,共获提升!
voice + 1 + 1 我很赞同!
愚无尽 + 1 + 1 我很赞同!
pojie_jerry + 1 + 1 我很赞同!
木丁哂 + 1 + 1 谢谢@Thanks!
岔路ko + 1 + 1 热心回复!
fangchang819 + 1 谢谢@Thanks!
烟雨暗千家 + 1 + 1 我很赞同!
三木之林 + 1 + 1 我很赞同!
抱书人人 + 1 + 1 谢谢@Thanks!
xingdongpai + 2 + 1 我很赞同!
想找一个好名字 + 1 + 1 谢谢@Thanks!
_小白 + 1 + 1 谢谢分享,可以用
学箭 + 1 + 1 确实有用
wxk0248 + 1 + 1 开发者模式的话,直接把插件后缀改成rar,解压就可以直接安装的
duanjia0912 + 1 首先,你标题中的单词就拼错了,,是chrome
豪气冲天 + 1 + 1 我很赞同!
全修林 + 1 + 1 谢谢@Thanks!
一直到以后 + 1 + 1 我很赞同!
kenorizon + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
spll6 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

  • · Aarow|主题: 988, 订阅: 304

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 三水非冰 发表于 2019-1-2 17:52
cx911322 发表于 2019-1-2 17:41
大神我有个困惑,我是用360极速,之前极速自己的商城里没有的插件我去谷歌商店下的也可以用,但有个问题如 ...

360极速浏览器好像不备份插件的吧。然后如果你要上传你的插件到360扩展中心的话戳这里:http://open.chrome.360.cn/extension_dev/upload.html
 楼主| 三水非冰 发表于 2019-1-2 18:15
cx911322 发表于 2019-1-2 18:06
大神还有其他方法吗?不用梯子直接备份CRX?

我以为你要上传你的插件到商城里... 你只是要备份自己所使用的插件的话,网上搜个插件备份的工具,或者自己手动复制粘贴不就好了.. 上传到自己网盘里。
kenorizon 发表于 2019-1-2 13:51
一直到以后 发表于 2019-1-2 14:00
谢谢分享  值得学习
ufoboyxj 发表于 2019-1-2 14:08
谢谢分享。为但要会用,而且要学
bachelor66 发表于 2019-1-2 14:20
感谢楼主分享的好经验                                          
豪气冲天 发表于 2019-1-2 14:21
很不错的思路,MAKE一下。
诗雨晴天 发表于 2019-1-2 14:24

谢谢分享  值得学习
duanjia0912 发表于 2019-1-2 14:35
首先,你标题中的单词就拼错了,,是chrome
el888 发表于 2019-1-2 14:36

谢谢分享  值得学习
KevinHacker 发表于 2019-1-2 14:43
Chrome插件伴侣了解一下
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-26 00:32

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表