我有一个启用了"Opera Turbo“的Opera浏览器。它是一个代理,可以将HTML重新压缩成更小格式。我有一个来自opera缓存的文件,它被turbo从2000kb压缩到500kb。如何将这个文件解压缩成可读的形式(原始文件几乎没有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这个文件能帮我吗?
发布于 2011-08-05 03:58:50
前两个字节的78 DA是在deflate compressed data之前的有效的双字节zLib header (参见关于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,显示它的是 deflate,但它似乎是一些自定义变体。与original code的比较以及与原始zLib源代码的比较可能会有所帮助。
此外,JS代码当然可以用来尝试解压缩数据。它似乎不能处理2个字节的头文件,所以可能必须跳过这些文件。
发布于 2011-08-05 05:38:26
opera turbo缓存中有不同的文件类型。第一个是有问题的;一些文件是解压的(css和js),还有Z压缩的多文件tar-like图像归档文件( VP8,由纯文本RIFF、WEBP、VP8 magics检测到):
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另一个使用jpeg的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)类型的文件是"<000"-file,其示例头为(十六进制)“1f8b0800 000000002ff ec52cb6a c3 3010fc1563”。file说它是"gzip compressed data, max compression",它可以被任何gzip解压。
https://stackoverflow.com/questions/6890544
复制相似问题