Moai+Easter 上級マニュアル
Moai Manual Advanced Manual Annoucement FAQご案内 Moaiエンジン CustomBoyエンジン HowToコンパイル Moai CGI Developers
Overview and Tutorial Cookie Hints PostVars Hints Fingerprint Hints Snippet Hints Futaba Note
はじめに
ここではCustomBoyが仮想化するPost変数のHint情報を列挙する.
(主にふたばちゃんねるの例を題材とする).
目次
- Post variable : js
- Post variable : pthb
- Post variable : pthc
- Post variable : pthd
- Post variable : ptua
- Post variable : scsz
- Post variable : pwd
- Post variable : flrv
- Post variable : flvv
Post variable : js (Category: futaba)
この値は必ず on にしておかなければならない.名前の由来は
Javascriptを実行したかどうかを判断するためのものであり、/bin/base4qt.js を実行すると on に設定される仕組みとなっている.
( 無論、Javascriptの/bin/base4qt.jsを実行させずとも、最初からこのPost変数 に on 値を設定しておけば良い. )
ふたばにおいてはこれを on にしておかないと「環境変数がありません(Javascriptがオフ?)」というエラーが表示され、投稿に失敗するのは周知の通りである.
目次に戻る
Post variable : pthb (Category: futaba)
これについてはpthcのセクションを参照して頂きたい.目次に戻る
Post variable : pthc (Category: futaba)
ptはPosT(あるいはPost Time) の意味であろう. h は不明である.( PaTH の可能性もありそうだが、現状の仕様とは意味が合わない. )
他にも類似したものとして pthb や pthd などがあるが、なぜ a からではなく b から始まるのかも不明である.
(筆者が知るよりさらに昔の仕様に由来するのかもしれない)
この値はfutaba.phpに初アクセスした時間(およびそれに類した値)である.
現状ではカタログに初めてアクセスするか、または初めてレス投稿した際にまずpthcに設定されるようである.
あるいは /bin/cachemt7.php にアクセスしたときにそれに類した値が生成される形となる.
おそらくワンタイムパスワードならぬ、ワンタイムユーザIDとでも呼ぶべき用途として発行し、futaba.php内部で使っているのだろう.
一度目の投稿においては、localStorage(futabapt)にpthcのコピー値も設定される.
また二度目の投稿において、さらにそのlocalStorage(futabapt)のコピー値がpthbへと設定される.
おそらくpthbの値の存在によってlocalStorageに確実に値が設定されたことを確認する意図があると思われる.
一旦設定されると、CookieおよびBrowser CacheおよびlocalStorageこれら全てを消去しない限り同じ値が残り続ける.
目次に戻る
Post variable : pthd (Category: futaba)
現状では使用されている気配はない(かつては使用されていたこともある).目次に戻る
Post variable : ptua (Category: futaba)
ptはPosT(あるいはPost Time) の意味であろう.uaはUserAgentである.
この値は頻繁にその意味が変更される歴史を持つ.
最初期はnavigator.userAgentの文字列値をそのまま格納していたため、名前に ua という文字が含まれているのであろう.
現状での意味は、33個のものBrowserとそのVersion固有の真偽値をとるJavascriptコード片(Snippetと呼ぶ)の結果値を、33bitのflag値にpackした上で10進数変換したものである.
この計算はレス投稿時に毎回 /bin/base4qt.js におけるptfk function内で行われており、sphという名前の配列変数を検索すると該当処理を行っている行を見つけることができる.
まあ派手に長い行なので目視でもすぐわかるが…
(尚、最大値は32bit非負整数のMaxを超える可能性があるため、浮動小数点数をベースとして行われている模様).
要はBrowserとそのVersion固有の値の寄せ集めであるため、Browserそのもの(あるいは場合によってはそのVersionのみでも良いが)を変更しない限り基本的に同じ値をとり続ける.
尚、この値を乱数生成器などで出力される完全なrandomな整数値として割り当てても、少なくとも筆者の環境では現状問題ないようである.
しかしこの値からinvertすれば元のBrowser環境を(ある程度の範囲はあるとは言え)一意に推定することが可能である.
つまりfutaba.php側でptuaの値より、あなたの使っているBrowserが何であるのかの推定が行われている可能性は十分にある.
(というより、わざわざfutaba.phpがこのようなPost変数を導入した理由はそれしか考えられまい)
よってより万全を期すなら、このptuaの値をそれらしく偽装する方が望ましいといえる.
例えば下位8bitはIE(Edge)に関するものであるため、IE(Edge)以外のBrowserとして偽装したいなら、その数字を必ず256の倍数にすれば「それらしく」偽装できる.
それ以外にも各Snippetの意味を事細かに調べてBrowserとVersion毎に反映させていけば値の精度はより高まるであろう.
自力でツールなどを作ってこの値を偽装される方で、この辺りに拘りのある方は参考にされてはどうだろうか?
各Snippetの意味については、こちらに完全なリファレンスを作成したので参照していただきたい.
尚、CustomBoyエンジンではKnowledge-Baseによりこの値を自動的に生成する.
目次に戻る
Post variable : scsz (Category: futaba)
名前の由来は SCreenSiZe であろう.この値は、あなたの使っているモニタの解像度と色深度の情報を示す.
(Javascriptにこれを取得するAPIがあり、レス投稿(ptfk function)時に毎回 /bin/base4qt.jsでこれを取得しているようである)
モニタ解像度の幅 x モニタ解像度の高さ x モニタの色深度ビット数
というフォーマットを持つ記述子となる.
例えば、640x480x24、1024x768x32といった値をとる.
尚、CustomBoyエンジンではKnowledge-Baseによりこの値を自動的に生成する.
目次に戻る
Post variable : pwd (Category: futaba)
名前の由来は PassWorD である.この値は、レス投稿時のいわゆる「削除キー」に相当するものである.
ユーザが明示的に指定してもよいが、空にしておけば適当な削除キー値が自動的に割り当てられる.
このときCookieのpwdc項目にその値が格納され、レス投稿時においてはJavascriptを介してこの値がさらにPost変数 pwdへセットされる.
通常はふたばより自動的に割り当てられた値をそのまま使えばよい.
ただしユーザ情報を初期化したい場合は、Cookieのpwdc値を一旦空にしておくとよい.
目次に戻る
Post variable : flrv (Category: futaba)
注:現在のふたばちゃんねるではこれは廃止されたようですが、一応ここでの説明は残しておきます.この値は、Fingerprint値と呼ばれるものが格納される.
少し歴史を述べると、当初これにはFingerprint値ではなくAdobe FlashのReVision番号が格納されていた.
しかしそれだと値が被り過ぎるためか、あるいはFlashに見切りをつけたためかは知らないが、ある時ふたばはその仕様を廃止した.
そしてこの変数名だけをそのまま流用して、替わりにここにFingerprint値を格納するようになった経緯がある.
名前に含まれる謎の「l」の文字はその名残である.
Fingerprint値の導出方法について簡単に解説しよう.
この値は /bin/fp.js というJavascript内で以下のalgorithmによって計算される.
- まずあなたのBrowser環境やMachine環境の様々な情報をJavascriptにより取得する.
- 次にそれらを集めて連結し、一つの巨大文字列を作る.
- 最後にその巨大文字列を元に32bit整数のHash値を計算する.
このHash値がFingerprint値である.
BrowserやMachine環境に依存した情報であるため、これらが変わればこのFingerprint値は変化する.
具体的にどのような情報が取得されるのかを知りたい方はこちらを参照されるとよい.
Hash値が何のことかわからない方は、次のように考えればよい.
例えばあなたのMachineの特徴を示す情報が3つあったとしてそれをそれぞれ仮に数字の 2, 4, 7 とする.
これらを足し算して合計すると 2 + 4 + 7 = 13 となるが、この 13 がHash値に相当し、即ちここではflrvやflvvの値として送信される.
非常に大雑把だが、とりあえずそのようなイメージで十分である.
ここでのポイントは13 から元の値 2, 4, 7 を一意には復元できないということである.
( この特性をirreversiveと言う. あるいは数学的には「injectiveではない」と言う. )
よってこの値は実のところデタラメに設定しても一般にその妥当性を検証する術はない.
この点はptuaとは大きく異なる. (futaba.phpがFingerprintに加え、新しいptuaの仕様を追加的に導入した経緯もそれによる).
尚、CustomBoyエンジンではKnowledge-Baseによりこの値を自動的に生成する.
目次に戻る
Post variable : flvv (Category: futaba)
注:現在のふたばちゃんねるではこれは廃止されたようですが、一応ここでの説明は残しておきます.この値もflrvと同じくFingerprint値と呼ばれるものが格納される.
flrvとflvvの違いはその取得する情報の種類だけである.
flrvが取得する全情報に加え、BrowserのPlugin情報文字列まで加味したものがflvvである.
尚、CustomBoyエンジンではKnowledge-Baseによりこの値を自動的に生成する.
目次に戻る
This article was written by:
K.Yakisoba.H
@znk project