事例集 回転偽装ファイルの修復例 Back
インターネットで流通している画像ファイルの中には、偽装と言って、故意に読めなくしているファイルが有ります。
簡単なものならJpegAnalyzerで修復することが出来ます。

1バイト回転偽装の修復

この例では先頭の1バイトを最終に移動させ、破損しているように見せかけています。

Address Length Message
00000000     <=== 不明な領域 1 bytes
00000001 [0010] APP0 :JPEG File Interchange Format Ver 1.1 (JFIF)
         密度 72:72 dots/inch
        ▲ SOI直後でないAPP0(JFIF)セグメント
00000013 [0084] DQT :Define Quantization Table 【IJG 画質75】
         00000017 QT0-8bit IJG輝度 画質75
         00000058 QT1-8bit IJG色差 画質75
00000099 [0011] SOF0 :Start Of Frame 0 - Baseline DCT
         400[0] x 337[15] pixel - 24bit color (YCbCr 4:2:0)
         ComponentID-01 Y 2x2 QT0
         ComponentID-02 Cb 1x1 QT1
         ComponentID-03 Cr 1x1 QT1
000000AC [009E] DHT :Define Huffman Table
         000000B0 HT0-DC  CRC-328EEEB0
         000000CA HT0-AC  CRC-0DD11207
         0000010F HT1-DC  CRC-5B14FAB0
         00000127 HT1-AC  CRC-53AFEBAA
0000014C [000C] SOS :Start Of Scan 0-63[00]
         HT Selector[DC/AC] Y[0/0] Cb[1/1] Cr[1/1]
0000015A ****** Image Data ******
         Data Size 23,069 bytes
00005B77 ****** EOI :End Of Image ******
00005B79     <=== 不明な領域 1 bytes

        ◆ SOIマーカが有りません ◆

        ◆ EOIマーカ以降に 1 バイトの無効なデータが有ります ◆


     Analyze End.

エラーではSOIマーカが有りませんEOIマーカ以降に 1 バイトの無効なデータが有りますと表示されています。
修復方法は、上図の不明な領域の部分を削除し、新たに
SOIマーカを挿入してやります。

削除したい場所を選択して、編集メニューから
領域切り取りを選びます。
先頭の1バイト、末尾の1バイトデータを削除します。


Address Length Message
00000000 [0010] APP0 :JPEG File Interchange Format Ver 1.1 (JFIF)
         密度 72:72 dots/inch
        ▲ SOI直後でないAPP0(JFIF)セグメント
00000012 [0084] DQT :Define Quantization Table 【IJG 画質75】
         00000016 QT0-8bit IJG輝度 画質75
         00000057 QT1-8bit IJG色差 画質75
00000098 [0011] SOF0 :Start Of Frame 0 - Baseline DCT
         400[0] x 337[15] pixel - 24bit color (YCbCr 4:2:0)
         ComponentID-01 Y 2x2 QT0
         ComponentID-02 Cb 1x1 QT1
         ComponentID-03 Cr 1x1 QT1
000000AB [009E] DHT :Define Huffman Table
         000000AF HT0-DC  CRC-328EEEB0
         000000C9 HT0-AC  CRC-0DD11207
         0000010E HT1-DC  CRC-5B14FAB0
         00000126 HT1-AC  CRC-53AFEBAA
0000014B [000C] SOS :Start Of Scan 0-63[00]
         HT Selector[DC/AC] Y[0/0] Cb[1/1] Cr[1/1]
00000159 ****** Image Data ******
         Data Size 23,069 bytes
00005B76 ****** EOI :End Of Image ******

        ◆ SOIマーカが有りません ◆


     Analyze End.

次に、SOIマーカを挿入してやります。

先頭アドレス0x00000000の行を選択し、メニューから編集、SOIの挿入を選びます。
(先頭にSOIを挿入する場合は、行を選択しなくても可能、但し行が選択されていると選択行に挿入されます。)
エラーが出なくなったら一度プレビューで表示されるか確かめます。
問題なければ最後に、保存ボタンを押すか、メニューからファイル>名前を付けて保存を選んで、ファイルを作ります。


多バイト回転偽装の修復

上の例では、先頭の1バイトを回転させた物でした。
回転するバイト数が多かったら、どう対処すればいいでしょうか?

Address Length Message
00000000     <=== 不明な領域 12,848 bytes
00003230 ****** EOI :End Of Image ******
00003232 ****** SOI :Start Of Image ******
00003234 [0010] APP0 :JPEG File Interchange Format Ver 1.1 (JFIF)
         密度 72:72 dots/inch
00003246 [0084] DQT :Define Quantization Table 【IJG 画質75】
         0000324A QT0-8bit IJG輝度 画質75
         0000328B QT1-8bit IJG色差 画質75
000032CC [0011] SOF0 :Start Of Frame 0 - Baseline DCT
         400[0] x 337[15] pixel - 24bit color (YCbCr 4:2:0)
         ComponentID-01 Y 2x2 QT0
         ComponentID-02 Cb 1x1 QT1
         ComponentID-03 Cr 1x1 QT1
000032DF [009E] DHT :Define Huffman Table
         000032E3 HT0-DC CRC-328EEEB0
         000032FD HT0-AC CRC-0DD11207
         00003342 HT1-DC CRC-5B14FAB0
         0000335A HT1-AC CRC-53AFEBAA
0000337F [000C] SOS :Start Of Scan 0-63[00]
         HT Selector[DC/AC] Y[0/0] Cb[1/1] Cr[1/1]
0000338D ****** Image Data ******
         Image Data Break off at 10,221 bytes
         Address (0000338D-00005B79)


        ◆ SOIマーカ以前に 12850 バイトの無効なデータが有ります ◆
        ◆ EOIマーカ以降に 10568 バイトの無効なデータが有ります ◆

     Analyze End.




上図の例では0x3232バイト回転させた物で、SOIマーカがアドレス0x00003232に有ります。

修復手順としては、先頭アドレスにもう一度同じファイルを読み込ませ、ファイルを2つくっつけた形にしてやります。
重なった部分の中央の領域、SOIマーカからEOIマーカ間の領域をファイルにします。

まず先頭アドレス0x00000000の行を選択し、メニューから編集>ファイル挿入を選び同じファイルを挿入します。
行を選択し、[Shift]キーを押しながら目的のファイルをドラッグ&ドロップして挿入することも出来ます。


Address Length Message
00000000     <=== 不明な領域 12,848 bytes
00003230 ****** EOI :End Of Image ******
00003232 ****** SOI :Start Of Image ******
00003234 [0010] APP0 :JPEG File Interchange Format Ver 1.1 (JFIF)
         密度 72:72 dots/inch
00003246 [0084] DQT :Define Quantization Table 【IJG 画質75】
         0000324A QT0-8bit IJG輝度 画質75
         0000328B QT1-8bit IJG色差 画質75
000032CC [0011] SOF0 :Start Of Frame 0 - Baseline DCT
         400[0] x 337[15] pixel - 24bit color (YCbCr 4:2:0)
         ComponentID-01 Y 2x2 QT0
         ComponentID-02 Cb 1x1 QT1
         ComponentID-03 Cr 1x1 QT1
000032DF [009E] DHT :Define Huffman Table
         000032E3 HT0-DC  CRC-328EEEB0
         000032FD HT0-AC  CRC-0DD11207
         00003342 HT1-DC  CRC-5B14FAB0
         0000335A HT1-AC  CRC-53AFEBAA
0000337F [000C] SOS :Start Of Scan 0-63[00]
         HT Selector[DC/AC] Y[0/0] Cb[1/1] Cr[1/1]
0000338D ****** Image Data ******
         Data Size 23,069 bytes
00008DAA ****** EOI :End Of Image ******

00008DAC ****** SOI :Start Of Image ******
00008DAE [0010] APP0 :JPEG File Interchange Format Ver 1.1 (JFIF)
         密度 72:72 dots/inch
00008DC0 [0084] DQT :Define Quantization Table 【IJG 画質75】
         00008DC4 QT0-8bit IJG輝度 画質75
         00008E05 QT1-8bit IJG色差 画質75
00008E46 [0011] SOF0 :Start Of Frame 0 - Baseline DCT
         400[0] x 337[15] pixel - 24bit color (YCbCr 4:2:0)
         ComponentID-01 Y 2x2 QT0
         ComponentID-02 Cb 1x1 QT1
         ComponentID-03 Cr 1x1 QT1
00008E59 [009E] DHT :Define Huffman Table
         00008E5D HT0-DC  CRC-328EEEB0
         00008E77 HT0-AC  CRC-0DD11207
         00008EBC HT1-DC  CRC-5B14FAB0
         00008ED4 HT1-AC  CRC-53AFEBAA
00008EF9 [000C] SOS :Start Of Scan 0-63[00]
         HT Selector[DC/AC] Y[0/0] Cb[1/1] Cr[1/1]
00008F07 ****** Image Data ******
         Image Data Break off at 10,221 bytes
         Address (00008F07-0000B6F3)

        ◆ SOIマーカが 2個有ります ◆
        ◆ EOIマーカが 2個有ります ◆
        ◆ SOIマーカ以前に 12850 バイトの無効なデータが有ります ◆
        ◆ EOIマーカ以降に 10568 バイトの無効なデータが有ります ◆

     Analyze End.


中央の領域に出来た正常ファイルの部分、SOIマーカからEOIマーカにかけて選択します。(青の反転部分)
画像を表示して確認する場合は領域を選択し、領域画像表示を選びます。
この場合、最初のSOIに続くJPEG構造なのでプレビューボタンを押すことでも確認が出来ます。
指定領域のファイルを作るには分割ボタンを押します。



分割ボタンを押せば、領域を保存する確認メッセージが出ます。
「はい」を押せば、元の画像が有る場所に元の名前に追い番を付けたファイルが作られます。

どうですか?意外と簡単に修復できたでしょ?

Top