2

「Opera Turbo」を有効にしたOperaブラウザがあります。これは、HTMLをより小さな形式に再圧縮するプロキシです。私は2000kbから500kbのターボで圧縮されたオペラキャッシュのファイルを持っています。このファイルを読み込み可能な形式で解凍するにはどうすればよいですか?元のファイルにはほとんどHTMLタグはありません。ちょうど8ビットのテキスト "<p>"タグとhtmlヘッダー/フッターがあります。ここでOpera Turboはどのようにデータ(キャッシュ)を圧縮しますか?

は、このようなファイルの例を示します。

.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バイト; 7〜3082バイト分。 zipで3291バイト。

更新:opera miniがデータを解凍するために使用する情報(クロムオペラミニ拡張からhttp://ompd-proxy.narod.ru/distrib/opera_mini_proxy.crx - 7-ジップで解凍する)を持っていますwebodf/src/core_RawInflate.jsこのファイルは役に立ちますか?

+0

Opere-Fileメニューから読み込みますか? – Bytemain

+0

ええ、なぜそうしたいのですか? Opera Turboをオフにして、ページを再度ロードして非圧縮にしてください:) – hallvors

+0

オフラインでは、ページをリロードする機会はありません。 – osgx

答えて

5

最初の2バイト78 DAは、に先行する有効な2バイトzLib header(セクション2.2のCMFおよびFLGを参照)です。したがって、ファイルは、zLib/deflateを使用してに圧縮できます。最初の簡単なテストのために

、あなたはこのように私のコマンドラインツールPrecompを使用することができます。

precomp -v -c- -slow opr00003.tmp 

それは...に解凍することができます「(ZLIB圧縮ストリームを報告し、どのように大きなそれが解凍されます...バイト ")。これが成功した場合(あなたが知っている元のファイルサイズに近い圧縮解除されたサイズを返します)、好きなプログラミング言語をzLib libraryとともに使用して、データを解凍します。

ストリーム(またはその一部)は、プリコンパイルによってビットごとに同一の再圧縮が可能であり、出力ファイルopr00003.pcfは、圧縮解除されたデータの一部(一部)小さなヘッダー。

EDIT:osgxがコメントし、さらなる分析が示したように、データは、ZLIB/DEFLATEを使用して解凍されないができ、これは依然として未解決場合あります。

EDIT2:特にlinked JSは、であることを示していますが、いくつかカスタムバリエーションがあるようです。 original codeとの比較は、元のzLibソースコードとの比較に役立ちます。

さらに、JSコードを使用してデータの解凍を試みることもできます。しかし、2バイトのヘッダーを扱うようには見えないので、おそらくこれらはスキップする必要があります。

+0

これが問題を解決するかどうか聞いて欲しいです、私は@osgxが私たちに知らせることを願っています.... – Dan

+0

'file'ユーティリティはすべてのその中の魔法。 – osgx

+0

@osgx:まあ、私が言ったように、この場合のヘッダーは長さがわずか2バイトで、理論上、31で割り切れる2バイトはすべて有効なヘッダーです。 'file'が' zLib compressed data'のようなファイルを検出すると、多くの誤検出が起こります。 – schnaader

3

オペラターボキャッシュにはさまざまな種類のファイルがあります。最初のものは問題に引用されています。 (VP8、平文RIFF、WEBP、VP8マジックで検出された画像)のZパック形式のマルチファイルタールライクなアーカイブがあります。

Zパックファイルヘッダの例:

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" 魔法JPEG ffd8ff、表示されています - マーカーが見えない;内部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"(16進数) "1F 8B 08 00 00 00 00 00 02 FF EC 52 CB 6aはC3 30 10 FC 15 63" の例ヘッダと-fileあります。 fileはそれが "gzip compressed data, max compression"であり、gzipによってただ解凍されたと言います。

関連する問題