2chトリップ


2chでのトリップを作成するためのRubyのライブラリです。使いかってはそんなに良くないかも…。

trip 0.0.4 (2.99k) 2ch tripライブラリfor Ruby
trip 0.0.2 (1.71k) 2ch tripライブラリfor Ruby

RubyについてはRubyのホームページを参考にしてください。

いつのまにかトリップ生成方法が全鯖統一されたようです。詳しくは◆ 全サーバトリップ統一作戦@2ch運用情報を見てください。

下の情報は多少古くなってしまいました。上のスレ見てちょっといろいろ確認してみます。

現在、2chの新サーバでは少々違う算出方法を使用しています。新しい方法についてはだいたいわかりました。ライブラリは少し待ってください。


なんか知らんけど、ここに来た方へ・・・

トリップ検索ツールはここにはないです、下のサイトにいって見てください。(コメントは適当です。実際使用してみて、自分にあったものを見つけてください。)

サイトOSUIコメント
Trip-MonaWin32CUIたぶん最速。弱点は速度を求めた結果、複雑な正規表現が使えないこと(単純な文字列検索はできます)。中堅ユーザー向け。
見知らぬ国のトリッパー(wWin32GUI扱いやすいインターフェース。keyからのトリップ確認などもできる。初心者向け。
うとりっぱ〜Un*x/Win32CUIソースが公開されているので自分でカスタマイズすれば最強になるかもしれない。コアな人むけ。

トリップの作り方

最近、あまりにも検索でここに来る人が多いので、そんな人のためにTripの作り方を解説しておきます。

概要

簡単な流れを説明します。アクティビティー図もどきを書いてみましたので参考にしてください。

トリップ生成の流れのアクティビティー図

まとめると、以下の処理になります。

  1. 文字列からsaltを作る。
  2. cryptを使ってsaltと文字列から暗号された文字列を作る。
  3. 暗合された文字列の後ろから何文字かとる。

saltの作り方

saltの作り方はちょっと複雑です。

文字列変換

旧鯖と新鯖では変換方法が異なります。

旧鯖

ASCII文字列で'.'(0x2e)から'z'(0x7a)までの文字以外の文字は'.'(0x2e)にします。次に、":;<=>?@[\]^_`"を対応するがままに"ABCDEFGabcdef"に変えます。

ASCII文字列と異なるところは黄色で表示しています。

旧salt変換対応表
0123 4567 89AB CDEF
00 .... .... .... ....
10 .... .... .... ....
20 .... .... .... .../
30 0123 4567 89AB CDEF
40 GABC DEFG HIJK LMNO
50 PQRS TUVW XYZa bcde
60 fabc defg hijk lmno
70 pqrs tuvw xyz. ....
80 .... .... .... ....
90 .... .... .... ....
A0 .... .... .... ....
B0 .... .... .... ....
C0 .... .... .... ....
D0 .... .... .... ....
E0 .... .... .... ....
F0 .... .... .... ....
新鯖

これはらっしーが独自に調べたモノであって間違っているかも知れません。もし、違いを発見された方はメールや掲示板等で報告して貰えると嬉しいです。

今まではほとんどの文字が「.」に置き換えでしたが、一つ一つに文字を割り当ててます。但し、0x80(128)-0xFF(255)の文字は最上位bitが無視して割り当てされます。

旧鯖と異なる所は赤で表示しています。keyの2文字目と3文字目にこれらの文字が含まれていると新鯖と旧鯖でトリップが異なります。

新鯖salt変換対応表
0123 4567 89AB CDEF
00 GHIJ KLMN OPQR STUV
10 WXYZ abcd efgh ijkl
20 mnop qrst uvwx yz./
30 0123 4567 89AB CDEF
40 GABC DEFG HIJK LMNO
50 PQRS TUVW XYZa bcde
60 fabc defg hijk lmno
70 pqrs tuvw xyz. /012
80 GHIJ KLMN OPQR STUV
90 WXYZ abcd efgh ijkl
A0 mnop qrst uvwx yz./
B0 0123 4567 89AB CDEF
C0 GABC DEFG HIJK LMNO
D0 PQRS TUVW XYZa bcde
E0 fabc defg hijk lmno
F0 pqrs tuvw xyz. /012

後の処理

"H."を加えます。

文字列の二番目と三番目を取り出します。これでできあがり。

後は…

crypt関数を使います。詳しくはCのマニュアルを読んでください。saltにはさっき作った文字列を、passにはそのまま文字列を入れます。

あとは、後ろから何文字かをとるだけ。

注意点

文字列について

わかっていると思いますが、全ての文字列はCでのcharの配列のように扱います。2chでの文字コードはShift_JISですが、二バイト文字もトリップ生成においては1バイトの二つの文字として扱われます。JavaなどのcharがUnicode文字である言語や、日本語を日本語として扱う関数がある言語(たとえばRubyでjcode.rbを使った場合など)では注意が必要です。

前処理について

少なくとも新鯖ではトリップ生成関数に文字列が渡されうまえにhtmlエスケープ処理がされています。

つまり、入力したkey自体が次のように変換されます。これらの処理は全ての処理の手前であり、key自体が変わってしまうことに注意してください。

よって、["<>]がkeyに含まれている場合は思ったように変換されません。

salt生成について

わかると思いますがsaltはどんな順番で作っても同じでしょう。

空文字列についてはsaltがどうなのか不明です。2chでは空文字列の場合tripが生成されません。「見知らぬ国のトリッパー(w」では"H."にしているようです。

cryptについて

詳しくは[cryptのmanページ]を見てください。

注意すべき点は二点です。

新鯖では(前処理を除き)全ての処理で最上位bitが無視されるのであるASCII文字とある半角カタカナを交換しても同じトリップが生成できます。

後ろから○文字を得るについて

はるか昔は2chではこれが8文字でした。ですが、技術革新によるPCの高速化によって8文字ではkeyが発見される可能性が高くなってしまい、10文字になりました。cryptは13文字の文字を得られますが最初の2文字はsaltになっていますので、この方法では11文字以上増やせません。いづれMD5などの別方法を導入する必要が来るかもしれません


トップページ
らっしー