Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
wildimagebinary
Search
yoya
June 24, 2016
Programming
230
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
wildimagebinary
ワイルドな画像バイナリ
yoya
June 24, 2016
More Decks by yoya
See All by yoya
resize_nitpick
yoya
1
190
ImageFluxBinary
yoya
2
3.1k
HEIF-kaisetsu
yoya
4
3.6k
go-thumber-imagick
yoya
1
210
chokaizomae
yoya
2
620
goimagicksyokai
yoya
2
1.2k
GoImagickThumbnail
yoya
0
1.7k
sushigazou
yoya
0
12k
twitterimgupload
yoya
0
420
Other Decks in Programming
See All in Programming
月間100万人のサービス刷新で、 技術選定をHonoに振り切った話
yutobara
8
6.8k
Zero-Tap Sign-In対応、結局何をすればいいの?
mitohato14
0
320
AWS CDKのカスタムリソースでContinuum(旧Security Agent)を実装した話 | Implementing Continuum (formerly Security Agent) via AWS CDK Custom Resource
akihisaikeda
2
160
[JA] Domain Modeling with Vanilla Rails: 「操作」から再考するRailsの設計論
yasaichi
4
750
Railsバージョンを4倍にした話
optim
0
530
graphql-ruby を Spinel で速くしようとした話
mtsmfm
0
110
[2026-10-09]一枚の布で作らなくてもいい。 信頼性は「パッチワーク」で紡がれる~既存の運用と新しい可能性をつなぎ合わせてきたCREの話~
tosite
0
110
S3 TablesのIcebergデータに、AIエージェントからアクセスしてみた / 20261016developersio2026joetsu-accessing-iceberg-in-s3tables-via-agent
kasacchiful
PRO
0
190
ChromeでローカルLLM
ryu1013
0
160
GemmaをJevのように使ってみる / Use Gemma like Jev
kishida
5
820
個人開発者よ、Honoを使え(おじさんver)
tanahiro2010
2
270
自サークルのIdPからログアウトできるようになるまで
taiseiue
1
150
Featured
See All Featured
A Soul's Torment
seathinner
8
3.8k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.9k
HDC tutorial
michielstock
2
970
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
30 Presentation Tips
portentint
PRO
1
430
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.3k
Heart Work Chapter 1 - Part 1
lfama
PRO
10
37k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
550
Deep Space Network (abreviated)
tonyrice
0
380
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
59k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.6k
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 の後ろを切り出すと、欲し いデータが取れる。とか。 – 昔、そうやって違法なファイルを配布するツール があったという噂を聞いた事がある
おしまい