Opera Turbo如何压缩数据(缓存)?

时间:2011-07-31 16:02:27

标签: opera compression computer-forensics opera-turbo

我有一个启用了“Opera Turbo”的Opera浏览器。它是一个代理,它将HTML重新压缩为更小的格式。我有一个来自opera cache的文件,它被turbo从2000 kb压缩到500 kb。如何将此文件解压缩为可读形式(原始文件几乎没有html标签,只有8位文本,“<p>”标签和html页眉/页脚?

以下是此类文件的示例:

.opera$ hexdump -C cache/turbo/g_0000/opr00003.tmp
00000000  78 da 6c 8f bf 4e c4 30  0c c6 67 fa 14 26 48 6c  |xзl▐©Nд0.фgЗ.&Hl|
00000010  a1 1c 12 d3 25 1d f8 37  82 54 f1 02 69 63 48 74  |║..с%.Ь7┌TЯ.icHt|
00000020  69 52 12 97 d2 b7 ed 88  40 80 b8 05 06 06 7a 57  |iR.≈р╥М┬@─╦...zW|
00000030  09 21 84 27 fb f3 cf 9f  6d 61 a8 71 45 26 0c 2a  |.!└'ШСо÷ma╗qE&.*|
00000040  5d 64 3b a2 41 52 60 88  5a 8e 77 9d bd 97 ec 34  |]d;╒AR`┬Z▌w²╫≈Л4|
00000050  78 42 4f fc 7a 68 91 41  3d 57 92 11 3e 50 be 99  |xBOЭzh▒A=W▓.>P╬≥|
00000060  5d 42 6d 54 4c 48 b2 b7  5e 87 3e f1 c5 d1 f1 82  |]BmTLH╡╥^┤>ЯеяЯ┌|
00000070  fd 78 79 d5 a0 64 1a 53  1d 6d 4b 36 f8 5f 26 ef  |Щxyу═d.S.mK6Ь_&О|
00000080  eb 71 fd f5 f8 97 5d e1  d0 87 a8 d3 ff 20 59 72  |КqЩУЬ≈]Ап┤╗сЪ Yr|
00000090  58 94 5d 4a 56 41 f0 40  06 e1 12 09 f6 1b ad 92  |X■]JVAП@.А..Ж.╜▓|
000000a0  59 c2 8c 8a 7c e6 32 91  cf 9f 09 67 fd 0a 22 3a  |Yб▄┼|Ф2▒о÷.gЩ.":|
...

这里是原始文件的一部分(我不确定它是否是真正的原始文件,但很可能是这样):

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    <meta name="description" content="статьи">
    <meta name="keywords" content="статьи">
    <title>Russia on the Net &mdash; статьи</title>
</head>
<link rel="stylesheet" href="/rus/style.css">
<body bgcolor="#FFFFFF">
<center>
...

压缩文件的大小为3397,原始大小为8913字节。原始文件可通过bzip2压缩到3281字节;通过gzip到3177字节;由lzma到2990字节;由7z到3082字节;通过zip到3291字节。

更新:我有信息(来自chrome opera-mini扩展程序http://ompd-proxy.narod.ru/distrib/opera_mini_proxy.crx - 用7-zip解压缩)opera mini使用它来解压缩数据webodf/src/core_RawInflate.js这个文件可以帮助我吗?

2 个答案:

答案 0 :(得分:5)

前两个字节78 DAzLib header之前的有效2字节deflate compressed data(参见关于CMF和FLG的2.2节)。因此,使用zLib / deflate压缩文件

对于第一次快速测试,您可以使用我的命令行工具Precomp

precomp -v -c- -slow opr00003.tmp

它将报告zLib压缩流以及它们的解压缩程度(“...可以解压缩为......字节”)。如果成功(返回接近您所知的原始文件大小的解压缩大小),请使用您喜欢的编程语言和zLib library来解压缩数据。

另请注意,如果您很幸运,可以通过Precomp对流(或其中的一部分)进行逐位相同的重新压缩,并且输出文件opr00003.pcf包含(部分)解压缩数据前面有一个小标题。

编辑:正如osgx评论并进一步分析显示的那样,数据可以使用zLib / deflate解压缩,因此这仍然是未解决的情况

EDIT2:更新,特别是linked JS显示 放气,但它似乎是一些自定义变体。与original code的比较可以帮助您与原始zLib源代码进行比较。

此外,JS代码当然可以用来尝试解压缩数据。但它似乎没有处理2字节的标题,所以可能必须跳过它们。

答案 1 :(得分:3)

opera turbo缓存中有不同的文件类型。第一个引用了问题;一些文件被解压缩(css和js),并且有Z-packed多文件tar-like图像存档(VP8,由纯文本RIFF,WEBP,VP8魔法检测):

Z-packed文件头的示例:

 5a 03 01 1c 90 02 0a 22 03 18 2a (RIFF data first img) (RIFF data second img)
 (RIFF data third img)

RIFF容器清晰可见,它有长度字段,所以我建议说明一下:

 5a - magic of format
    03 - number of files
       01 - first file (riff size=0x1c90)
          1c 90 - big-endian len of first file
                02 - second file (riff size=0a22)
                   0a 22 - len of second file
                         03 - third file (riff size=182a)
                            18 2a
                                  52 49 46 46 == "RIFF" magic of first file

另一个带JPG的Z文件示例(“JFIF”魔法可见,ffd8ff jpeg-marker不可见;内部有8个文件):

0000000: 5a08 0118 de02 1cab 0308 0804 162c 0531  Z............,.1
0000010: 4d06 080f 070a 4608 0964"ffd8 ffe0 0010  M.....F..d......
0000020: 4a46 4946 0001 0101 0060 0060 0000 ffdb  JFIF.....`.`....

另一个检测到的(按file)类型的文件是“&lt; 000”-file,示例标题为(hex)“1f 8b 08 00 00 00 00 00 02 ff ec 52 cb 6a c3 30 10 fc 15 63“。 file表示它是“gzip compressed data, max compression”,它只是被任何gzip解压缩。