Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
wildimagebinary
Search
yoya
June 24, 2016
Programming
230
1
Share
wildimagebinary
ワイルドな画像バイナリ
yoya
June 24, 2016
More Decks by yoya
See All by yoya
resize_nitpick
yoya
1
170
ImageFluxBinary
yoya
2
2.9k
HEIF-kaisetsu
yoya
4
3.5k
go-thumber-imagick
yoya
1
200
chokaizomae
yoya
2
600
goimagicksyokai
yoya
2
1.2k
GoImagickThumbnail
yoya
0
1.7k
sushigazou
yoya
0
12k
twitterimgupload
yoya
0
410
Other Decks in Programming
See All in Programming
2026-04-15 Spring IO - I Can See Clearly Now
jonatan_ivanov
1
130
書き換えて学ぶTemporal #fukts
pirosikick
1
230
ついに来た!本格的なマルチクラウド時代の Google Cloud
maroon1st
0
290
実践CRDT
tamadeveloper
0
600
アクセシビリティ試験の"その後"を仕組み化する
yuuumiravy
1
180
Agentic Elixir
whatyouhide
0
420
TiDBのアーキテクチャから学ぶ分散システム入門 〜MySQL互換のNewSQLは何を解決するのか〜 / tidb-architecture-study
dznbk
1
200
Vibe NLP for Applied NLP
inesmontani
PRO
0
520
AIベース静的検査器の偽陽性率を抑える工夫3選
orgachem
PRO
4
370
煩雑なSkills管理をSoC(関心の分離)により解決する――関心を分離し、プロンプトを部品として育てるためのOSSを作った話 / Solving Complex Skills Management Through SoC (Separation of Concerns)
nrslib
4
1.1k
2026_04_15_量子計算をパズルとして解く
hideakitakechi
0
130
ソフトウェア設計の結合バランス #phperkaigi
kajitack
0
160
Featured
See All Featured
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
750
30 Presentation Tips
portentint
PRO
1
280
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
We Are The Robots
honzajavorek
0
220
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.3k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
680
First, design no harm
axbom
PRO
2
1.2k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.1k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
199
73k
Exploring anti-patterns in Rails
aemeredith
3
340
Transcript
ワイルドな画像バイナリ 2016/06/24(Fri) “よや”
[email protected]
自己紹介 • よやのプロフィール – h9ps://osdn.jp/users/yoya/ • C言語寄りの PHPer
。たまに JavaScript 。 • 退職届けPDFメーカーのひと(だったのに) – 最近は AWS で200万迷惑かけた人として有名…
ワイルドな画像バイナリ。とは • JPEGやPNG等で画像バイナリ形式的に壊れ たファイル – 「壊れた」とは? • 端的にいうと、表示できない画像ファイル
表示できない理由予想 • MIME Type と実際の画像形式が違う(?) HTTP request HTTP response <?php
header(“Content-‐type: image/gif”) echo file_get_contents(“logo.jpg”); GIFと偽って JPEG画像を転送
結果 • 普通に表示された。 この件はスルーする – (MacOS での Chrome,Safari,Firefox 調べ)
– IE や Edge はチェックしてるらしい。(※追記)
ここから本題
画像バイナリについて • 画像バイナリって何? – こういうの↓
画像バイナリのチャンク • 画像バイナリはその情報の種類に応じてブ ロックに分けて保存する – いわゆる「チャンク」 メタ情報 シグネチャ 画像の実データ
例 JPEG) ffe1 (APP1) ffd8ff… ffda (画像データ) ??? 89504e… <len>IDAT(画像データ) 例 PNG) 画像情報 ffc0 (SOF0) <len>IHDR… 画像サイズ等 Encode された 画像データ 撮影日付等
チャンク分割の3パターン (a) TLC 方式 (PNG) (b) Marker, Terminater 方式
(JPEG は (a)と併用) (c) Type で長さが決まる方式 (GIF) Type Len Content Type Len Content 。。。 mark Content ¥e 。。。 mark Content ¥e type Content 。。。 type Content Len バイト長の Content を持つ
PNG のデータ構造 89 50 4E 47 0D 0A 1A 0A
Signature Type Len Content 。。。 <Len>byte 4byte 4byte CRC 4byte
PNG を壊す • 例えば(4byte前提の) gAMA を 3byteにする – CRC も計算し直し
プログラムがどう動くか • 予想1) 無理やり読む • 予想2)チェックでエラー • 予想3)落ちる
– (チェックしてない場合) Type Len Content CRC gAMA 3 ガンマ値 CRC gAMA 3 ガンマ値 CRC 4byte read 3byte 4byte read CRC から 1byte貰う
JPEG のデータ構造 Mark Len Content 。。。 <Len>byte 2byte 2byte
怪しい JPEG バイナリ Mark Len Content <Len>byte 2byte 2byte ゴミ
Mark Len Content
ImageMagick で変換してみる • ImageMagick で変換 – 警告が出る (変換自体はできてる)
JPEG の marker の仕様 • 次の marker (ffxx)まで 6 byte
読み飛ばす – Jpeglib の挙動なので仕様のはず!
バイナリ壊れるパターン色々 • 全体構造 – シグネチャが違う – 必須のチャンクがない
– 仕様的に駄目なチャンクの並び – 1つしかないはずのチャンクが複数ある – 複数必要なチャンクが一つしかない • チャンク構造 – チャンクの Length がデータの長さと違う – 存在しない type(tag) • データの中身 – 表の大きさより大きなインデックス値 – 仕様以外のデータ形式が入る (PNG に zlib 以外とか) 先程紹介 したケース
全体構造 • シグネチャが違う • チャンクの過不足や順番 89 50 4E 47
0D 0A 1A 0A PNG Signature 例えば mp の asciiモード 89 50 4E 47 0A 1A 0A 例 JPEG) ffe1 (APP1) ffd8ff… ffda (画像データ) ffc0 (SOF0) 壊れた JPEG ffe1 (APP1) ffd8ff… ffda (画像データ) ffc0 (SOF0) 画像サイズ等 開始マーカ 改行コードが Win から Unix へ 画像サイズが ないのにデコード?
チャンク構造 • 先ほどの PNG や JPEG の例で示したので省 略。
データの中身 • 色のインデックスからはみでる例 • 想定されるプログラムの動きは、チャンクが はみ出た場合と同様 色パレット RGB RGB
RGB RGB インデックス値 1 4 何か 1 4 何かを色として 使うかも?
バイナリを壊すメリット • プログラムをリバースエンジニアするのに便 利 – 投稿サイトに色んな画像バイナリを送りつけて検 証 • プログラムを外部から攻撃するのに便利
J – 境界チェックを真面目にしないプログラムの脆弱 性もつけるかも?
(質問タイム) • JPEGの後ろに任意のデータを置けるか – fff9 (End of Image)マーカの後ろは任意のデータ がおける。
– 一見画像だけど、fff9 の後ろを切り出すと、欲し いデータが取れる。とか。 – 昔、そうやって違法なファイルを配布するツール があったという噂を聞いた事がある
おしまい