CRX文件是啥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CRX文件是啥相关的知识,希望对你有一定的参考价值。

CRX文件是浏览器插件。

程序的运行有其自己运行的进程、方式等,其插件只是对其进行起一个补充作用的程序,如3721插件,雅虎插件,百度,中搜,QQ,搜狗,新浪,天下搜索,CNNIC.GOOGLE等。浏览器插件,基于浏览器的原有功能,另外增加新功能的工具。

插件是一种遵循一定规范的应用程序接口编写出来的程序。很多软件都有插件,插件有无数种。例如在IE中,安装相关的插件后,WEB浏览器能够直接调用插件程序,用于处理特定类型的文件。

常见插件

Flash插件、RealPlayer插件、MMS插件、MIDI五线谱插件、ActiveX插件等等;再比如Winamp的DFX,也是插件。还有很多插件都是程序员新开发的。

扩展资料:

Google Chrome软件优点:

1、不易崩溃 

Chrome最大的亮点就是其多进程架构,保护浏览器不会因恶意网页和应用软件而崩溃。每个标签、窗口和插件都在各自的环境中运行,因此一个站点出了问题不会影响打开其它站点。通过将每个站点和应用软件限制在一个封闭的环境中这种架构,这进一步提高了系统的安全性。

2、速度快

使用WebKit引擎。WebKit简易小巧,并能有效率的运用存储器,对新开发者来说相当容易上手。Chrome具有DNS预先截取功能。当浏览网页时,“Google Chrome”可查询或预先截取网页上所有链接的IP地址。目标网页。

Chrome具有GPU硬件加速:当激活GPU硬件加速时,使用“Google Chrome”浏览那些含有大量图片之网站时可以更快渲染完成并使页面滚动时不会出现图像破裂的问题。

参考资料来源:

百度百科-浏览器插件

百度百科-Google Chrome

参考技术A

CRX文件是浏览器插件。

浏览器插件,基于浏览器的原有功能,另外增加新功能的工具。其插件只是对其进行起一个补充作用的程序,如3721插件,雅虎插件,百度,中搜,QQ,搜狗,新浪,天下搜索,CNNIC.GOOGLE等。

扩展资料:

常用的浏览器插件:

1、Adblock Plus

Adblock Plus致力于去除那些烦人的在线广告。它也可以帮助您去除其他的东西比如去除所有的跟踪行为。全球超过5000万用户, 使 Adblock Plus 成为了世界上最流行的浏览器扩展。

Adblock Plus 是一个开源项目,由 Wladimir Palant 在 2006 年创建。2015年9月,Adblock Plus宣布推出ios浏览器,该浏览器适用于苹果公司于会2015年9月9日推出的iOS9操作系统中,可用于网络广告拦截。

2、有道词典划词

在我们浏览网页时,一大片英文有时真的让人很难受,特别是英文较差的人来说,所以,安装一款阅读插件,有时就成了必要的选择了。有道词典划词就是一款和不错的翻译软件,可以一键整篇翻译,也可以选择部分翻译,极其方便,让你看英文一点都不费力。

3、Save to Pocket

Save to Pocket 是一个可以让你稍后阅读的插件, 它是是目前谷歌浏览器上最优秀的一款实用辅助插件,该插件可以安装在以Chrome为内核的任何浏览器上,其功能和网页收藏夹相同,能够一键收藏你想再次观看的网页,视频,文章等页面,并且支持以后在android,Ios中查看。

参考资料来源:百度百科-浏览器插件

参考资料来源:百度百科-Google Chrome

参考技术B 扩展名为.crx的文件是谷歌浏览器Chrome的插件文件,也就是Chrome的“扩展程序”,可广泛用于Mac、Linux、Windows系统。
这类文件增加了额外的功能或主题,以压缩格式保存,并且可能包含JS,JSON和其他文件,如图像和可执行程序。
参考技术C 在应用商店点击安装。。回变成下载文件。。下载后一拖如浏览器就会。。。又变成下载页面。。球解决。。浏览器是最新的版本了。。
这种格式的文件根本没法打开,提示默认网络关联设置。说是要么没有下载程序,要么没有关联。以前没这种事的呀?之前有还原了系统然后浏览器里无痕浏览里面我有一次清理时钩选了全部,而且360里面也清理了一次注册表多余项。用360下载的一个软件和用驱动精灵下载的一个驱动都可以打开。求大神解答呀!我用的是搜狗浏览器。追问

我只能说你要稍等片刻,大神还没操作完,你是回答还是问呀

一个获取google chrome扩展crx文件信息的PHP操作类

此类中实现了从crx文件获取扩展的Appid、获取manifest.json文件内容、将crx文件转换为一般zip文件 

代码如下:

<?php
class CrxParserException extends Exception {

}

/**
 * Chrome crx 解析器,用于获取扩展、皮肤ID
 *
 */
class CrxParser {
    const MAX_PUBLIC_KEY_SIZE = 65535;
    const MAX_SIGNATURE_SIZE  = 65535;
    const HEADER_MAGIC_PREFIX = ‘Cr24‘;
    const CURRENT_VERSION     = 2;

    private $fp = null; //文件指针
    private $filename = ‘‘; //文件路径
    private $_header = array(); //crx 文件的头信息

    public function __construct($filename){
        $this->parse($filename);
    }

    /**
     * 获取此应用的ID
     * @return string
     */
    public function getAppid() {
        $hash = hash(‘sha256‘,$this->_key);
        $hash = substr($hash,0,32);

        $length = strlen($hash);
        $ascii_0 = ord(‘0‘);
        $ascii_9 = ord(‘9‘);
        $ascii_a = ord(‘a‘);
        $data = ‘‘;
        for($i=0;$i<$length;$i++) {
            $c = ord($hash[$i]);

            if($c >= $ascii_0 && $c <= $ascii_9) {
                $d = chr($ascii_a + $c - $ascii_0);
            } else if($c >= $ascii_a && $c < $ascii_a + 6) {
                $d = chr($ascii_a + $c - $ascii_a + 10);
            } else {
                $d = ‘a‘;
            }
            $data .= $d;
        }
        return $data;
    }

    /**
     * 从crx文件中获取manifest.json文件的配置信息
     * @param unknown $zip_file
     * @return mixed[]
     */
    function getConfig($key=null){
        $zip_file=tempnam(dirname($this->filename),‘zip‘);
        $manifest_arr=array();
        if($this->convertToZip($zip_file)){
            $zip=zip_open($zip_file);
            if(is_resource($zip)){
                while($zip_entry=zip_read($zip)){
                    $entry_name=zip_entry_name($zip_entry);
                    if(preg_match(‘/manifest\.json$/‘, $entry_name)){
                        $content=zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
                        $content_j=json_decode($content, true);
                        if(!empty($content_j)){
                            $manifest_arr=$content_j;
                        }
                    }
                }
            }
            zip_close($zip);
            unlink($zip_file);
        }
        return is_null($key) ? $manifest_arr : $manifest_arr[$key];
    }

    /**
     * 将文件转换为zip文件
     * @param unknown $target_path
     */
    public function convertToZip($target_path=null){
        $offset=16+$this->_header[‘key_size‘]+$this->_header[‘sig_size‘];
        $data=$this->getContent($this->filename,$offset);
        return !is_null($target_path) ? file_put_contents($target_path, $data) : $data;
    }

    /**
     * 开始解析该 crx 文件
     */
    private function parse($filename) {
        if(strpos($filename, ‘://‘)!==false && !file_exists($filename)) {
            throw new CrxParserException("parser init: crx file does not exisit");
        }
        $this->filename=$filename;
        $this->fp = fopen($filename, ‘r‘);
        $this->parse_header(); // 解析头部信息
        $this->parse_key();
        $this->parse_sig();
        fclose($this->fp);
    }

    /**
     * 解析头部信息,并设置 $_header 数组
     * @throws CrxParserException 解析错误抛出异常
     */
    private function parse_header() {
        $data = fread($this->fp, 16); // HEADER 头信息有16个字节
        if($data) {
            $data = @unpack(‘C4prefix/Vversion/Vkey_size/Vsig_size‘,$data);
        }else{
            throw new CrxParserException("header parse: error reading header");
        }
        // 前四个字节拼合 prefix
        $data[‘prefix‘] = chr( $data[‘prefix1‘] ).chr( $data[‘prefix2‘] ).chr( $data[‘prefix3‘] ).chr( $data[‘prefix4‘] );
        unset($data[‘prefix1‘],$data[‘prefix2‘],$data[‘prefix3‘],$data[‘prefix4‘]);

        if($data[‘prefix‘] != self::HEADER_MAGIC_PREFIX) {
            throw new CrxParserException("header parse: illegal prefix");
        }
        if( $data[‘version‘] != self::CURRENT_VERSION ) {
            throw new CrxParserException("header parse: illegal version");
        }
        if(
                empty($data[‘key_size‘]) || $data[‘key_size‘] > self::MAX_PUBLIC_KEY_SIZE ||
                empty($data[‘sig_size‘]) || $data[‘sig_size‘] > self::MAX_SIGNATURE_SIZE
                ){
                    throw new CrxParserException("header parse: illegal public key size or signature size");
        }
        $this->_header = $data;
    }

    /**
     * 解析key
     * @throws CrxParserException
     */
    private function parse_key() {
        $key = fread($this->fp,$this->_header[‘key_size‘]);
        if($key) {
            $this->_key = $key;
        }else{
            throw new CrxParserException("key parse: error reading key");
        }
    }

    /**
     * 解析sig
     * @throws CrxParserException
     */
    private function parse_sig() {
        $sig = fread($this->fp,$this->_header[‘sig_size‘]);
        if($sig) {
            $this->_sig = $sig;
        }else{
            throw new CrxParserException("sig parse: error reading sig");
        }
    }

    /**
     * 从文件中获取指定位置及大小的内容
     * @param unknown $filename
     * @param number $offset
     * @param unknown $length
     * @return string
     */
    private function getContent($filename,$offset=0,$length=-1){
        $stream = fopen($filename, ‘rb‘);
        $content = stream_get_contents($stream, $length, $offset);
        fclose($stream);
        return $content;
    }

}

 

使用方法:

<?php
$crxParser=new CrxParser(‘abc.crx‘);
echo $crxParser->getAppid();
var_dump($crxParser->getConfig());
//$crxParser->convertToZip(‘abc.zip‘);

 

以上是关于CRX文件是啥的主要内容,如果未能解决你的问题,请参考以下文章

离线Chrome插件安装文件(crx)的安装方法

工具-chrome相关-安装crx包及错误解决(99.3.2)

从chrome商店直接下载crx文件

CRX文件无法打开,按照指示使用chrome浏览器也无法打开,求解!

解决Chrome插件安装时程序包无效CRX_HEADER_INVALID的错误

下载谷歌浏览器(Chrome)扩展离线安装包crx文件最简单的方法