Releases

  • Version 20240709 snapshot

    NanashiNoGombe 3 weeks ago 0 commits to master since this release

    これは正式リリースではありません。スナップショットとしてwin32向けのMITM有効バイナリとmacOS向けバイナリのみを置いておきます。

    read.cgiへのリクエストがデフォルトでitest.5ch.netにリダイレクトされるようになったため、5chClassic=onというcookieを送りリダイレクトを防ぐようにしました。--direct-datで使用していた場合は特に影響はありません。

    この回避策がいつまで有効なのかは不明ですが、すみやかに (ライブなスレッドはdat再取得になることを受け入れて) read.cgiを利用しない--direct-datに移行することをおすすめします。proxy2chのデフォルト動作は近いうちに--direct-dat相当になる予定です。

    itest.5ch.netのjsonからdatを生成するコードも一応入っており、read.cgiが完全に停止された場合はこちらにフォールバックさせる予定ではありますが、名前欄のタグが欠落するという問題があるためread.cgiの代わりとしては欠陥品です。

     
  • Version 20240613 snapshot

    NanashiNoGombe 1 month ago 2 commits to master since this release

    これは正式リリースではありません。スナップショットとしてwin32向けのMITM有効バイナリとmacOS向けバイナリのみを置いておきます。

    主にread.cgiの出力が (5chのみ) 変わったためread.cgiモードが動作しなくなった問題への対応です。--direct-datで使用していた場合は特に影響はありません。

    どんぐりシステム絡みでcookie関係の新しいオプションが追加されていますが、詳細はコミットログを追ってください。

     
  • Version 20231006 snapshot

    NanashiNoGombe 10 months ago 20 commits to master since this release

    これは正式リリースではありません。スナップショットとしてwin32向けのMITM有効バイナリのみを置いておきます。

    --subject-to-lastmodifyオプションはsubject.txtへのリクエストを受け取った時にlastmodify.txtのダウンロードを行い、subject.txt相当のデータを生成してクライアントに返すという動作をします。ただしlastmodify.txtの内容は順序がデタラメであり、proxy2ch側で生成時に一律更新順にソートしているため、age/sageの区別なしに書き込みがあったスレが上に来る、という感じになります。

    内部はいろいろ変わっています。talkの読み書きやtalkのみ対応ブラウザから5chを読み書きする機能等、興味がある場合はコミットログを追いかけてください。

    2023/10/11付でcurl 8.4.0がリリースされており、7.69.0以降のバージョンにおいてSOCKS5 proxyを利用する際の深刻な脆弱性の修正が報告されているのでlibcurlの更新を推奨します。具体的にはproxy2chを--proxy socks5h://...なオプション付きで起動し、socks5 proxy側に名前解決を委ねている場合はおそらく脆弱性の影響を受けると思われます。proxy2chのパッケージに同梱されているlibcurl.dllの置き換え向けにWin32向けのdllはここに置いておきます。

     
  • Version 20230713

    NanashiNoGombe 1 year ago 104 commits to master since this release

    • 現行の5ch.netの仕様に従い.datファイルを直接取得する--direct-datオプションを追加
      • このオプションを有効にした場合、read.cgiの出力を加工するのではなく、/板名/dat/***.dat (現行ログ) あるいは/板名/oyster/***/***.dat (過去ログ) にあるファイルを直接参照するようになります。
      • 過去ログ倉庫は一部準備中とのことなので、見つからない場合にread.cgiにフォールバックする処理も入れてあります。ただし、これはリクエストにRangeヘッダが存在しない場合に限ります。
    • --api-overrideオプションが--apiなしでも機能するように
      • (既に機能停止している) API経由で.datを取得しようとするクライアントに対し、read.cgi経由あるいは直接 (--direct-datと併用した場合) 取得したものを返すようになります。ただし、httpsな接続を改変するためにMITMを行う必要があるため、PC向け以外のブラウザでは証明書関係のハードルが高いと思われます。

    一連の騒動によりAPIが停止し、.datファイルへの直接アクセスが開放されたため、5chは再び従来の2ちゃんねる型スレッドフロート掲示板として読み書きできるようになりました。API導入以前のブラウザをそのまま利用できる環境になったため、このツールを利用しなければいけない場面は大幅に少なくなったと思います。これまでread.cgi経由でログを取得していて、これを契機に直接取得に切り替える場合、現行のスレッドに対して差分取得を行うとログが破損する可能性が高い点に注意してください。

    浪人ログインしない限り (?) API経由で.datの取得をするのは不可能であり、書き込みでもMonaKey関連のシステムが停止しているようなので、API関係のオプションを指定する意味はないと思います。

    2023/10/11付でcurl 8.4.0がリリースされており、7.69.0以降のバージョンにおいてSOCKS5 proxyを利用する際の深刻な脆弱性の修正が報告されているのでlibcurlの更新を推奨します。具体的にはproxy2chを--proxy socks5h://...なオプション付きで起動し、socks5 proxy側に名前解決を委ねている場合はおそらく脆弱性の影響を受けると思われます。proxy2chのパッケージに同梱されているlibcurl.dllの置き換え向けにWin32向けのdllはここに置いておきます。

     
  • Version 20230614

    NanashiNoGombe 1 year ago 113 commits to master since this release

    • 新しいread.cgiの出力に対応
    • bbsmenuプロクシの出力のURLを二重引用符で囲わないように
    • -pオプションでカンマ区切りで複数のポート番号を指定し待ち受け可能に
    • Luaスクリプトの変数proxy2ch.portで待ち受けポートを取得可能に
    • LuaスクリプトのwillSendRequestToBbsCgi関数の戻り値のoptions--proxyオプションと同様の指定が可能なproxyが利用可能に
    • MITM有効時にUSE_ECDSA_KEYマクロを有効にしてビルドするとECDSAな鍵で署名されたサーバ証明書を使うように
    • MITMでOpenSSL 3.0以降を使う時、古いクライアントとの接続互換性を改善するためにセキュリティを下げるように
      • この挙動はOPENSSL_NO_SECURITY_DOWNGRADEを定義することで無効化できます。

    MITM版のバイナリはOpenSSL 3.1にリンクしているのですが配布されているmingw向けのDLLがWindows XPと非互換のようなので1.1にリンクし直したものも置いておきます。

     
  • Version 20220522

    NanashiNoGombe 2 years ago 127 commits to master since this release

    • MonaKeyの管理をUser-Agentと紐付けて行うようにした
      • これまでは単純に最後に払い出されたMonaKeyのみを保持していましたが、User-Agentごとに最後に払い出されたMonaKeyを個別に保持するようにしました。例えば(1)Aで書き込み→(2)Bで書き込み→(3)Aで書き込みと行った時にこれまでは(3)で再度MonaKeyを取得していましたが、このバージョンでは(1)で使ったMonaKeyを再利用します。
      • Luaスクリプト内でこれまで使用されていたproxy2ch.monaKeyの代わりに新たに用意されたproxy2ch.getMonaKey()関数を使い、この関数の引数にUser-Agentを渡すことによりUser-Agentに対して払い出されたMonaKeyをproxy2ch側から取得することができます。
      • proxy2ch.monaKeyも従来どおり使えますが、この変更の恩恵は受けることはできません。移行は差分とかを参考にしてください。
    • MonaKeyを外部のJSONファイルに保存して起動時に復元できるようにした
      • --keystoreオプションにJSONファイルのパスを渡すことで有効になります。ファイルが存在しない場合は新規作成されます。読み書きのパーミッションがあるパスを指定する必要があります。
      • JSONが読み込まれるタイミングは起動時、作成・更新されるタイミングはMonaKeyが更新された時です。
      • JSONのパース・シリアライズにはparsonを使っています (ライセンス)。
    • LuaスクリプトのwillSendRequestToBbsCgi関数の戻り値にoptionsという名前のtableを指定可能に
      • 書き込み時にlibcurlのオプションを一部制御するためのtableです。
      • 例えばrequestを戻り値として、request.options = {interface = "en0"}とすると、libcurlに渡されるCURLOPT_INTERFACEの値がen0に設定されます。
      • 実験的なサポートであり、今後使えなくなったり、仕様が変わったりするかもしれません。

    (5/28追記) このバージョンよりAndroidのTermux向けのバイナリパッケージを配布するようにします。

    .debをダウンロードしてdpkg -iでインストールできます。libc++ libcurl libiconv openssl liblua54の各パッケージに依存があり、インストールされていない場合はエラーが出るので、pkg installで適宜インストールしてください。

    なお手持ちのAndroid機でビルドしたものをパッケージにしただけなのでaarch64用のみです。Termuxは特殊な環境ではないのでその他のアーキテクチャ (arm, x86-64, i686) でもコンパイラやライブラリをpkg installすれば普通にビルドできます。

     
  • Version 20220501

    NanashiNoGombe 2 years ago 141 commits to master since this release

    • --api-overrideオプションを追加
      • このオプションを指定した場合、クライアントからAPIを使ったdat取得リクエスト受け取った時にproxy2chで指定したAPIキーを使ったリクエストとして送信します。--apiでAPIキーを指定していない場合は動作しません。
      • 主にAPIキーが更新されなくなった古いブラウザ向けです。Jane Style、ChMate、BathyScapheで動作することは確認しています。
      • MITMが有効になっていなくてもこのオプション自体は有効ですが、APIリクエストは基本的にhttpsで来るはずなのでMITM前提です。
    • IsValidAsUTF8関数にバグがあり、UTF-8かどうかの判定を間違えるケースがあったのを修正
    • --api-auth-ua--api-dat-uaが指定されておらず-aでMonazilla/で始まるUser-Agentが指定されている場合に-aで指定した値を--api-auth-ua--api-dat-uaの代わりに使うように
    • 主にMITM使用時にセッションの切断が正しく行われないことがあったためソケットを完全に閉じる前に少し待つように
    • PCの時刻が微妙にずれている場合を考慮し、MITMで使うサーバ証明書が有効になる時刻を現在時刻から10分前にずらすように
     
  • Version 20220424

    NanashiNoGombe 2 years ago 170 commits to master since this release

    • Macにおいてpthread_sigmaskSIG_BLOCKでSIGPIPEの発生を防げないようなのでsignalSIG_IGNに戻した
      • Linuxでは大丈夫なのだがどうも違いがあるらしく、BSDとかでどうなのかは不明
    • 添付の.zipはMac用のバイナリのみ含んでおりWindowsではバージョン番号以外の変化がないため更新はありません
     
  • Version 20220423

    NanashiNoGombe 2 years ago 172 commits to master since this release

    • スレッドプールを導入
      • 接続要求のたびに逐一スレッドを生成・破棄するのではなく予め固定数のスレッドを生成しておいて待機するため、体感できない程度にCPU負荷が下がることが期待されます。
      • プールで待機するスレッド数のデフォルト値は8で、同時に8つまでの接続要求を待ち時間なしに処理できることを意味します。通常の用途では8のままで問題ないと思いますが、変更したい場合は--num-threadsオプションでスレッド数を指定できます。
      • -cオプションが指定されCONNECTメソッドで非MITMなproxyとして動作する場合はプールとは別に独立したスレッドを生成して通信を行います。
      • スレッドプールを利用したくない場合はNO_THREAD_POOLマクロを定義してビルドします。
    • リクエストで使用したcurl handleを再利用するように
      • 再利用する場合はcurl側でサーバとの接続をkeep-aliveするため、同じサーバに続けて接続する際に体感できない程度にレスポンスが向上することが期待されます。
      • curl 7.80.0未満のバージョンでは不要になったSSL/TLSのセッションコンテキストを適切に破棄してくれないバグが存在するため、メモリ使用量の増大を防ぐために7.80.0未満ではhttpsなURLに接続した場合は再利用を行わない処理を入れています。恩恵を最大限受けるにはcurl 7.80.0以降の利用を推奨します。
      • バージョンを問わずhttpsなURLに接続した場合に再利用を止めたい場合はNO_CURL_REUSE_HTTPSマクロを定義してビルドします。
      • 前述のスレッドプールを利用しないNO_THREAD_POOLマクロが定義されている場合は再利用も無効化されます。
    • MonaKeyリセット時に内部で自動再POSTする際に元のリクエストヘッダが再現されない可能性がある問題を修正
    • Windows版のバイナリに含まれるlibcurlのバージョンを7.82.0に更新
     
  • Version 20220415

    NanashiNoGombe 2 years ago 190 commits to master since this release

    • bbs.cgiにPOSTする際にリクエストボディをUTF-8に変換するかどうかの挙動を制御する--bbscgi-utf8オプションを追加
      • noneapiallの3種類が指定できます。noneは変換を行わず (バージョン20220406以前と同じ挙動)、api--apiオプションにより書き込みにAPIが使われるときのみ (前バージョンと同じ挙動)、allは条件なしに変換を行います。デフォルトはapiです。
      • Luaを利用しない、もしくはLua内でUTF-8への変換を行わない場合にのみ意味があるオプションであり、Lua内でUTF-8への変換を行っている場合は特に気にする必要はありません。
    • リクエストボディをUTF-8に変換する際に既にUTF-8になっているかどうかの判定をContent-Typeヘッダではなくリクエストボディそのものを見て行うように
      • リクエストボディのsubmitフィールドの値は通常「書き込む」等の非ASCII文字が含まれるため、これがUTF-8エンコーディングとして正しく解釈可能かで判定しています。
      • UTF-8かどうかの判定関数はLuaからも利用可能で、proxy2ch.isValidAsUTF8という名前で定義されています。リクエストボディ全体を雑に判定したい場合はproxy2ch.isValidAsUTF8(proxy2ch.decodeURIComponent(request.body))のような形で記述します。
    • -cオプションが指定され非MITM動作時、CONNECTメソッドを受け取ってサーバとの接続が確立できない場合にクラッシュする問題を修正
      • バージョン20220401以降で発生していたバグです。
    • MITMモードのバックエンドとしてGnuTLSが利用可能に
      • ビルド時、USE_MITMマクロと同時にUSE_GNUTLSマクロが定義されているとOpenSSLの代わりにGnuTLSをバックエンドとして使います。Linux等GnuTLSが標準の環境ではOpenSSLを使わずに済みます。