lain画集のBinHexエンコードされた画像を見る(11)
さて、ここまででinnocent.jpgのどの部分が何なのかについては一応見てきたので、次は1,l問題をどうするか的なところを。
1かlの場所はこちらの手元では全部で63個あり、総当たりで求めるのは非現実的である(2^63=9,223,372,036,854,775,808通りになる)。本当は"ファイルが壊れています"的な状態を解消するためにイメージデータ以外の部分からいじる必要があるのだが、先に一番長くて1とlが多いイメージデータ部分の戦略関係のところを先に書く。
イメージデータ部の戦略
イメージデータ部だけで1かlの場所は47箇所あり、やはり総当たりは非現実的である(2^47=140,737,488,355,328通り)。
しかしinnocent.jpgにはありがたいことにリスタートマーカーが付与されており、エラーが縦16ピクセルごとの塊より後ろに波及することがない。そのためリスタートマーカー間毎のみで総当たりを行えばよいということになる。
というわけでBinHexの文字列のどのあたりがリスタートマーカー間に相当するかをまとめたのが以下の表である。実データで36行目あたりから。
table: どのあたりがイメージマーカー間に相当するか
開始文字数 実データでどのあたりか(開始) 実データでどのあたりか(終了)
2245 23%NNNP+556*+A6%J+$l +C****)8NNNNT55555Rr
2343 rd23%NNNP,)0edHe[2G% l4h8NjJ8NNNNT55555Rr
2507 rdI3%NNNP)Ec!#!ka&bH 1F`&65BbT****5NNNNP2
2697 rr5p!55558JbKl!942+d Q4+36,Zb5555@U55558r
2879 rdr3%NNNP,1%Y)3I4Q[E YZ+54VSf8N`6T)8NNNNT
3025 rr8p!55558T****5P&d3 -X#NKdr3#)LJlU55553r
3123 reI3%NNNP+55558T-NN% $!TU,4$3&**!!9****+I
3207 re[3%NNNP+55558XN%kC X`T*"*+NkC1NK55555Rr
3271 rer3%NNNP+55558T-H8k 56GdP,T***+A55558r`$
3343 rd23%NNNP+55558T-R55 **"C0+NS0j8dP&5C1Q53
3395 T)Tda58T**1NT55555Rr NN+55558T1Q6T+8NNNNT
3476 rp,d"****5NNNNP+5555 53T****5NkC1NT55555R
3541 rr6p!55558T****5NNNN +8NNNNT5G-R58T****6r
3603 re23%NNNP+55558T-NNN *5NNNJNTG****5NNNNP2
3660 rpAd"****5NNNNP,*Nj8 @+F*LR58ZNNNNT55555R
3723 re[3%NNNP+55558XH%-Q @V+5C1NT55555P****+I
3816 rpId"****5NNNNP+3RJ% @U+G-R58T****5NNNNP2
3911 rd23%NNNP+55558XH&"6 V*dNNP+55558T****6r!
3989 2r4p!55558T****6%TNj NKC1Q6T+8NNNNT55555R
4052 rp,d"****5NNNNP-6bQ+ NT55555P****+8NNNNTr
大体の位置なので注意。幸い境界に1,lは無いので上の範囲内で考えて大丈夫なはず。
各部分に何個1かlがあるかと総当たりの個数は以下の通り。
table: 各部分の1かlの個所の数
場所(縦位置) 1,lの個数 総当たり数(2^n)
~16 2 4
~32 3 8
~48 9 512
~64 5 32
~80 5 32
~96 2 4
~112 0 1
~128 1 2
~144 3 8
~160 1 2
~176 2 4
~192 4 16
~208 0 1
~224 0 1
~240 0 1
~256 3 8
~272 4 16
~288 1 2
~304 1 2
~320 1 2
…候補の生成は自動化した方がよさそうですね(~48の512が多すぎる 一応手元では自動生成した)
一部変化が少なすぎるのか判断できなかった箇所が1~2か所あったような気はするけれども、見る分には困らないはずなので最後はCRCでナントカシテクダサイ…
思いの外長くなったのでこちらで把握している1,l確定箇所は次で。そろそろ最後?