truecolorなPNGへの変換でPLTE内の攻撃コードは削除できた
追記 ImageMagic の convertコマンドでPNG→GIF→PNGと変換しても、JavaScriptは削除されませんでした。
http://www.tokumaru.org/d/20070717.html#p01
PNG→GIF→PNG じゃなくて PNG→PNG(truecolor)→PNG の変換をしたら削除できました。この話、きちんと追ってないので既出かもしれませんが。
あと、これで完全に攻撃コードを削除できるようになるわけではないので本質的な結論が変わるわけではないです。
$ convert 20070717_0.png -type truecolor truecolor.png $ convert truecolor.png -type palette truecolor2palette.png
$ hexdump -C truecolor.png | head -5 00000000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 |.PNG........IHDR| 00000010 00 00 00 78 00 00 00 c0 08 02 00 00 00 40 9f 30 |...x.........@.0| 00000020 9d 00 00 00 09 70 48 59 73 00 00 00 48 00 00 00 |.....pHYs...H...| 00000030 48 00 46 c9 6b 3e 00 00 2c 0a 49 44 41 54 78 da |H.F.k>..,.IDATx.| 00000040 bd 7d 7f 6c 54 57 96 e6 71 bd b2 63 af 19 c2 2c |.}.lTW..q..c...,| $ hexdump -C truecolor2palette.png | head -8 00000000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 |.PNG........IHDR| 00000010 00 00 00 78 00 00 00 c0 04 03 00 00 00 3d d3 ba |...x.........=..| 00000020 f9 00 00 00 27 50 4c 54 45 29 0d 3b 19 5c 67 7f |....'PLTE).;.\g.| 00000030 23 60 34 93 72 78 b1 a0 a9 60 6b e1 a1 54 ca bf |#`4.rx...`k..T..| 00000040 ca f5 f7 c9 f1 f6 e4 f5 f5 f4 fa f9 f7 fd fe fd |................| 00000050 f3 e0 75 66 00 00 00 09 70 48 59 73 00 00 00 48 |..uf....pHYs...H| 00000060 00 00 00 48 00 46 c9 6b 3e 00 00 13 b1 49 44 41 |...H.F.k>....IDA| 00000070 54 68 de 75 5a cb 6f 1b 49 7a 6f 2b 56 74 15 47 |Th.uZ.o.Izo+Vt.G|
一度truecolorに変換するとPLTE自体が無くなってしまいます。元に戻すときに画像本体からパレット情報は再生成されるので、画像の見た目には影響ないと思います。truecolor.pngはカラータイプ2(RGB)のPNGになっていますが、元画像が透過PNGの場合はカラータイプ6(RGB+アルファ)に変換されて透過情報が維持される事も確認しました。元がGIFの場合も GIF→PNG(truecolor)→GIF でGlobal Color Tableに埋め込まれた攻撃コードは削除できました。
# パレット情報の再生成時に攻撃コードが復元されるように、画像をうまく作り込むことができるかもしれない。