我有一个启用了“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 — статьи</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这个文件可以帮助我吗?
答案 0 :(得分:5)
前两个字节78 DA
是zLib header之前的有效2字节deflate compressed data(参见关于CMF和FLG的2.2节)。因此,使用zLib / deflate压缩文件 。
对于第一次快速测试,您可以使用我的命令行工具Precomp:
precomp -v -c- -slow opr00003.tmp
它将报告zLib压缩流以及它们的解压缩程度(“...可以解压缩为......字节”)。如果成功(返回接近您所知的原始文件大小的解压缩大小),请使用您喜欢的编程语言和zLib library来解压缩数据。
另请注意,如果您很幸运,可以通过Precomp对流(或其中的一部分)进行逐位相同的重新压缩,并且输出文件opr00003.pcf
包含(部分)解压缩数据前面有一个小标题。
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解压缩。