web-dev-qa-db-ja.com

画像ファイル内の隠しファイルを見つける方法(Jpg / Gif / Png)

画像ファイル内の多数のファイルを非表示にする方法を示すリンクに出くわしました: http://lifehacker.com/282119/hide-files-inside-of-jpeg-images 検出に関する詳細な説明ここ: http://ask.metafilter.com/119943/How-to-detect-RARsEXEs-hidden-in-JPGs

画像ファイル内に他のファイルが隠されているかどうかをプログラムで検出するための良い方法を見つけようとしていますか?他のファイルがそこから出てくるかどうかを確認するためにファイルを解凍してみる必要がありますか?

私はプログラムで縛られていませんが、JVMでうまく機能するものは素晴らしいでしょう。

更新

1つのアプローチ:

このようなものでしょうか(メタフィルターで誰かが提案しました)

$ cat orig.jpg test.Zip > stacked.jpg
$ file stacked.jpg 
stacked.jpg: JPEG image data, JFIF standard 1.01
$ convert stacked.jpg stripped.jpg  # this is an ImageMagick command
$ ls -l
 11483 orig.jpg
322399 stacked.jpg
 11484 stripped.jpg
310916 test.Zip

このアプローチにはJMagickを使用できます。

7
Jayson

すばらしい質問です。

チェックするすべてがイメージファイルの最後に追加されたRARまたはZipファイルである場合は、unrarまたはunzipコマンドで実行するのが最も簡単な方法です。

より高速で正確ではないチェックが必要な場合は、特定の種類のファイルを示す特殊なファイル形式の署名の一部をチェックできます。ファイル形式を特定する通常のUNIXツールは file です。 バイナリファイル署名 のデータベースを使用します。その形式は magic(5) のマニュアルページで定義されています。 JPEGの最後でRARファイルを見つけることはできません。ファイルの先頭を見てファイルをすばやく識別しようとするためですが、ソースコードを変更して目的の操作を実行できる場合があります。ファイル署名のデータベースを再利用することもできます。 Rarファイルセクションの データベースのアーカイブファイル部分 を見ると、次のように表示されます。

# RAR archiver (Greg Roelofs, [email protected])
0   string      Rar!        RAR archive data,

これは、JPEGファイルに4バイトが含まれている場合、Rar!それは疑わしいでしょう。ただし、誤検知を回避するためにRarファイル構造がさらに存在するかどうかを確認するには、 Rarファイル形式の仕様 を詳細に調べる必要があります。このWebページには4バイトRar!が添付されている隠しファイルはありません:P

しかし、誰かが自動チェックの詳細を知っていれば、簡単に回避できます。最も簡単な回避策は、JPEGに追加する前にファイルのすべてのバイトを逆にすることです。次に、署名のいずれもファイルの逆バージョンをキャッチしません。


誰かが本当に画像内のファイルを非表示にしたい場合は、簡単に検出できないさまざまな方法があります。これの一般的な用語は「ステガノグラフィー」です。たとえば Wikipedia page は、猫の写真が中に隠れている木の写真を示しています。より簡単なステガノグラフィーの方法としては、写真に対して何かおかしいことが行われたことを示す統計的テストがありますが、誰かが独自の方法を考え出すために多くの時間を費やして画像内の他のファイルを非表示にすると、それを検出します。

2
andrewdotn

ファイルの署名を検索できます。 http://en.wikipedia.org/wiki/List_of_file_signatures 例7zファイルの場合、シグマチャは37 7A BC AF 27 1Cです。rarファイルの場合は52 61 72 21 1A 07 00、Zipの場合は50 4B 03 04です。16進エディタで圧縮ファイルを確認してください。 HxD

0
SpiderPig

ファイルにメタデータやその他の情報が追加されているかどうかを確認するには、画像をデコードして再エンコードし、サイズが劇的に減少するかどうかを確認します。 JPEGファイルの場合は、元のDCTデータを保持する可逆回転のような処理を行う必要があります。そうしないと、エンコードの違いによってファイルサイズが変わる可能性があります。

結果が小さい場合は、非表示のデータの証拠にはなりませんが、詳しく調べる必要があることを示しています。

あなたが質問をする動機を共有したことは決してありませんが、それは公開サイトへの画像のダウンロードに関するものだと思います。その場合は、送信された画像に無関係なデータが含まれているかどうかを気にする必要はありません。関係なく入力をクレンジングするだけです。これには、デコード/再エンコードプロセスが最適です。

0
Mark Ransom