• v20250614 08fb9fa157

    NanashiNoGombe released this 2025-06-14 13:18:12 +02:00 | 0 commits to master since this release

    • https接続時の証明書検証をデフォルトで行うように
    • https接続時の証明書検証を無効にする-kオプションを追加
    • https接続時の証明書検証に使うPEM形式のCA証明書バンドルのパスを指定する--ca-bundleオプションを追加
    • MITM機能のバックエンドにwolfSSLとmbedTLSを利用可能に
    • 5chが返すSet-Cookieヘッダの形式が微妙に変わった影響で2ch.netなドメインで接続するクライアントに対して正しいドメイン名のcookieを返せなくなっていた問題を修正

    --ca-bundleオプションにはパスを与える代わりに、次の特殊な引数を与えることができます。

    • --ca-bundle @curl

      libcurlのビルド時に決まる既定のCA証明書バンドルのパスを利用します。

    • --ca-bundle @system

      proxy2chのデフォルト動作です。libcurlのビルド時に決まる既定のCA証明書バンドルのパスに加え、可能であればシステムのルート証明書ストアも検索します。システムの証明書ストアが利用可能かはOS・libcurlのバージョン・利用するバックエンドの組み合わせに依存しており、詳しい条件はここを参照してください。

    コンパイル時にDEFAULT_CA_BUNDLEマクロの値にパスを定義することで、proxy2chが利用するデフォルトのCA証明書バンドルのパスを設定することができます。-DDEFAULT_CA_BUNDLE=/path/to/cacert.pemのような感じです。

    -kオプションを指定する以外に、以下の場合は証明書の検証がデフォルトで無効になります。有効化したい場合は--ca-bundleオプションを明示的に与えてください。

    • proxy2chをDISABLE_CERT_VERIFICATIONマクロを定義してビルドしたとき
    • proxy2chのビルド時にDEFAULT_CA_BUNDLEマクロが定義されておらず、かつ
      • Windows 7未満のWindows環境
      • WindowsでOpenSSL系のバックエンドを使い、libcurlのバージョンが7.71.0未満の場合

    Windows以外の環境ではシステムやパッケージマネージャが提供するlibcurlが有効なCA証明書バンドルに正しく紐付けられていることがほとんどですが、Windowsではそのような仕組みがないため、Schannel以外のバックエンドではCA証明書の扱いに難儀することが多いです。

    本バージョンよりmacOS用バイナリでもMITMを有効化しています。ppc/i386/x86_64用ではlibcurlとwolfSSLをstatic linkしています。arm64用ではシステムにあるLibreSSLを利用する関係でmacOS 13.0以降が必要です。

    Downloads
  • v20250530 26906baced

    NanashiNoGombe released this 2025-05-30 15:18:08 +02:00 | 33 commits to master since this release

    notabugが不安定だったりリリースファイルのアップロードができなかったりで放置されているため、codebergへリポジトリを移行しました。notabug側ではリリースの発行はこれを最後に行いませんが、gitリポジトリ自体はアクティブなミラーとして残しておきます。gitのリモートリポジトリの参照先としてはどちらも同等なので、随時切り替えることができます。

    • libcurlでhttps接続を行う際に使われるTLSの最大バージョンを指定する--tls-maxオプションを追加

      デフォルトのTLSバージョンだとCloudflareの規制に引っかかり、バージョンを下げたい場合に使います。1.0 1.1 1.2 1.3 の4つのいずれかを指定できます。なお、3.0以降のOpenSSLではTLSv1.0や1.1の使用は禁止されているため、指定するとhttps通信ができなくなります。

    • libcurlが複数のTLSバックエンドに対応している場合に選択する--tls-backendオプションを追加

      無効な値を指定すると使用中のlibcurlで利用可能なバックエンド一覧が表示されます。

    • -aオプションが指定されていない時に各種ログインやbbsmenu取得にcurlデフォルトのUser-Agentが使われないように

      curl/xxxなUser-Agentが機械的に弾かれているようなので、とりあえず代わりにMozilla/5.0を送るようにしました。

    • --api-usageのデフォルト値をallからreadに変更

      書き込みAPI関係のヘッダが存在するとbbs.cgiから拒否されるようになったことによる措置です。

    5chへhttps接続する際の規制が強化されたため、Windows用バイナリで使用するcurlのTLSバックエンドを規制を受けにくいと思われるSchannelに戻しました。同梱されているlibcurl.dllはSchannelとOpenSSL (3.5LTS) の双方をサポートしているため、必要に応じて--tls-backendオプションで切り替えることができます。--tls-backend opensslでOpenSSLが、--tls-backend schannelでSchannelが選択されます。なお、Windows7未満の古いWindowsでは互換性を考慮してデフォルトでOpenSSLが選択されるようになっています。

    Downloads
  • v20250527-snapshot 5aba69396b

    NanashiNoGombe released this 2025-05-27 16:10:12 +02:00 | 38 commits to master since this release

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

    5chにおいてCloudflareのbot判定(?)が厳しく行われるようになり、一部環境で影響が出ています。User-Agent等リクエストヘッダで判定される場合と、https接続のセッション状態から判定される場合があり、後者は接続に使われるTLSプロトコルスタックの実装によって発動する条件が異なるようです。

    バージョン20250503のWindows用バイナリに使われているOpenSSL 3.0.16の場合、TLSv1.2を使うと問題は起きませんが、TLSv1.3を使うと最初のリクエストに対しては必ず403が返ってきて、keep-alive状態の同じセッションで再度リクエストを送ると正常なレスポンスが返ってくるという正直意味不明な挙動をしています。TLSv1.3で問題ない実装 (OpenSSL 3.5等) もあればTLSv1.2でもダメなものもあるようで、単純にTLSのバージョンや暗号スイートで判定しているわけではなくclient hello等のセッション情報から総合的な判定を行っているように見えます (TLS fingerprintingと言うらしい)。

    このような背景からproxy2chに--tls-maxオプションを追加し、https接続時に使用されるTLSのバージョンを選択可能にしました。このWindows用バイナリではOpenSSL 3.0.16が使われる都合上、デフォルトが--tls-max 1.2相当になっています。1.0や1.1も指定可能ですが、5chは1.2未満のTLS接続を受け入れないようです。

    Downloads
  • v20250503 c9ca1bb43a

    NanashiNoGombe released this 2025-05-03 06:43:32 +02:00 | 44 commits to master since this release

    前回の正式リリース版 (20230713) からの主な更新点は以下の通りです。

    • --direct-datの動作をデフォルトに

      既に--direct-datで使っていた場合やAPIを使っていた場合は問題ありませんが、そうでない場合は現行のスレッドに対して差分取得を行うと不整合が生じて全体の再取得が必要になる可能性が高いです。--no-direct-datオプションで引き続きread.cgi経由でのログ取得を行うことも可能です。

    • 5chの最新の仕様への追従

      新しい投稿確認画面、過去ログサーバ (kako.5ch.net) 上のログ取得、read.cgiが出力するhtmlの変更等に対応しています。過去ログサーバ上のログ取得には-sオプションが必要です。

    • 5ch投稿時に必要なクッキーの管理を代行する--manage-bbscgi-cookiesオプションを追加

      主にAPIに対応したまま更新が行われていない専ブラは5chへの書き込みに際してcookieを無視するものが多く、書き込みに支障があることが多いため、このオプションを有効にするとproxy2chが書き込み時に送受信されるクッキーの管理を代行します。このオプションを有効にすると、クッキーの閲覧/削除や各種アカウントでログインが可能なwebインターフェイスが利用できます。詳細はREADMEを参照してください。

    • bbsmenuの生成機能を追加

      proxy2chがmenu.5ch.netの代わりにいくつかの条件のもとでbbsmenuを生成します。詳細はREADMEを参照してください。

    • Talk掲示板に対応

      Talkが2ch互換の掲示板としてアクセス可能になります。書き込みと本物のdatの取得にはAPIキーが必要です。APIを使わない場合は公開されているjsonからdatを生成する動作になり、書き込みはできません。

    このリリースから、Windwos用のバイナリはMITM有効版のみを配布します。これに伴いlibcurlに加えてlibsslとlibcryptoのDLLが起動に必須になります。また、libcurlのTLS用ライブラリの依存先をSchannel (Windows内蔵のTLS/SSLプロトコルスタック) ではなくOpenSSL (バージョン3.0.16) に変更しています。そのため、libcurl自体もlibsslとlibcryptoのDLLに依存します。これはWindows XPでの動作改善のため (XPのSchannel実装は現在のWeb環境でのhttps接続には使い物にならない故) です。従来通りOpenSSLに依存しないlibcurlを使いたい場合は、Schannelフォルダにdllを同梱してあるので差し替えてください。

    Downloads
  • v20250429-snapshot 8d9476bffa

    NanashiNoGombe released this 2025-04-29 05:10:36 +02:00 | 53 commits to master since this release

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

    • --direct-datの動作をデフォルトとし、オプションの指定は不要に
      • 従来のようにread.cgiもしくはAPI経由でdatを取得したい場合は代わりに--no-direct-datオプションを指定してください。
    • 無効なMonaTicketが送られた場合のサーバからのエラー応答がE3000からE3100に変化したのに対応
    • -sオプションで接続先がhttpからhttpsに変化した場合、bbs.cgiに渡されるリファラもhttpからhttpsに自動で書き換えるように
    • --manage-bbscgi-cookiesが指定されている場合に利用可能なcookie管理用のwebインターフェイスを実装
      • webブラウザからhttp://localhost:9080/5ch/cookiesでアクセスできます。proxy2chの管理下にあるcookieの閲覧と削除が可能です。
    • --manage-bbscgi-cookiesが指定されている場合に利用可能などんぐり/be/UPLIFTアカウントのログイン用のwebインターフェイスを実装
      • webブラウザからhttp://localhost:9080/5ch/accountsでアクセスできます。
      • ログイン/ログアウトをスクリプト等で自動化したい場合、http://localhost:9080/5ch/accountsに対して以下のパラメータをapplication/x-www-form-urlencoded形式でPOSTしてください。
        • service : donguri, be, uplift のいずれか
        • action : login, logout のいずれか
        • mail : メールアドレス (actionlogoutの場合は不要)
        • pass : パスワード (actionlogoutの場合は不要)
      • curlでログインする場合は例えばcurl -d "service=donguri" -d "action=login" --data-urlencode "mail=foo@example.com" --data-urlencode "pass=my-secret-password" http://localhost:9080/5ch/accountsとします。
      • 一度ログインすると約12時間後を目安に再ログインします。
      • UPLIFTはアカウントがなくテストのしようがないので動くか不明です。

    webインターフェイスのアドレスlocalhost:9080のポート番号の部分はデフォルトの9080番で待ち受けている場合の話です。-pで変更している場合は適宜読み替えてください。なお、 -gを付けて外部からの接続を受け付けている場合でもlocalhost以外からのアクセスは不可です。

    no space left on deviceと言われてアップロードが不可なので一時的にバイナリを別の場所に置きます。

    ビルド環境を変えてからWinXPでテストしていなかったのですがXPで動くかもしれないビルドも試験的に置いておきます。

    Downloads
  • v20250404-snapshot c76012d515

    NanashiNoGombe released this 2025-04-04 16:17:31 +02:00 | 71 commits to master since this release

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

    • 投稿時のタイムスタンプを現在時刻の10秒前に設定する--bbscgi-fix-timestampオプションを追加
    • luaスクリプトでリクエストボディのtimeを弄ると投稿確認に失敗する可能性がある問題を修正

    (主に新仕様の投稿確認画面に対するリクエストで?) リクエストボディのtimeフィールドが現在時刻から大きくずれていると「投稿時刻がおかしい」エラーが出るようになったようなので、その対処です。

    Downloads
  • v20250403-snapshot bde9aa1f39

    NanashiNoGombe released this 2025-04-03 12:47:27 +02:00 | 73 commits to master since this release

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

    20250401 snapshotは--skip-bbscgi-confirmationを指定した際に誤ったContent-Lengthヘッダを付与してしまうことがあるため、更新を推奨します。

    このバージョンではオプションなしで新しい投稿確認処理に対応するようになっています。新しい--bbscgi-confirmationオプションで挙動を制御することもできます。

    • --bbscgi-confirmation auto

      • ブラウザには投稿確認画面が表示されますが、proxy2chがリクエストに介入して正しいフォームを送るように修正を行います。デフォルトであり、オプションを指定しない場合はこの動作になります
    • --bbscgi-confirmation skip

      • ブラウザには投稿確認画面は表示されなくなり、proxy2chが確認処理を代行します。--skip-bbscgi-confirmationと同じ動作です。autoでうまくいかない場合はこちらを使ってください。
    • --bbscgi-confirmation none

      • proxy2chは投稿確認処理には介入しません。

    --skip-bbscgi-confirmation--bbscgi-confirmation skipのエイリアスです。

    Downloads
  • v20250401-snapshot 5e1a342b8f

    NanashiNoGombe released this 2025-03-31 14:18:14 +02:00 | 77 commits to master since this release

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

    • 5ch/bbspinkへの投稿に関係するcookieをproxy2ch側で処理する--manage-bbscgi-cookiesオプションを追加

      • これは20240613 snapshotの時点で追加されていた機能ですが、一応ここで説明しておきます。
      • 主にAPIに対応したまま更新が行われていない専ブラは5chへの書き込みに際してcookieを無視するものが多く、書き込みに支障があることが多いため、このオプションを有効にするとproxy2chが書き込み時に送受信されるcookieの管理を代行します。
      • 有効時は専ブラ側にSet-Cookieヘッダは透過的に送られますが、専ブラ側からのCookieヘッダはBeやUplift関係のものを除いて無視されます。
      • --keystoreオプションで指定したファイルがcookieの永続的な保管庫として利用されます (APIのMonaKey用のものと共用)。指定しなかった場合はproxy2chを終了した時点で全てのcookieは破棄されます。
      • curlのcookie engineを利用しているためlibcurlが7.77.0未満の場合は利用できません。
    • 5ch.netの新しい投稿確認処理をproxy2ch側で代行する--skip-bbscgi-confirmationオプションを追加

      • 仕様変更により、投稿確認画面のフォームを正しく送信しないと必要なcookieを貰えなくなったため、一部板で確認画面が無限ループする場合はこのオプションを有効にすると解決する可能性が高いです。
      • やや行儀が悪いですこのオプションを有効にした場合は (新仕様の) 投稿確認画面は表示されなくなります。
      • このオプション有効時はproxy2chがレスポンスボディを解析する必要がある関係上、クライアントから送られてきた、あるいはオプションやluaスクリプトで上書きしたAccept-Encodingヘッダの値は無視されます。
    • --direct-dat有効時に過去ログサーバ上で公開されているスレッドを取得するように

      • 一部の旧サーバの過去ログがkako.5ch.netというサーバ上で公開されるようになりましたが、依然としてread.cgi経由でhtml版が表示できるのみで生datは公開されていないようです。--direct-datオプションが有効な時でも過去ログサーバ上にログが見つかった場合はread.cgi経由でログを取得するようにしました。
    • read.cgiの出力が変更されhtmlからの変換に失敗するようになっていた問題を修正

      • まだread.cgiモードを使っている人は--direct-datに移行しましょう。
    • 書き込み時に「Cookieの内容が壊れている」旨のエラーが出た場合、専ブラ側にSet-Cookieヘッダを送ってMonaTicket cookieの無効化を促すように

      • 実際に無効化が行われるかは専ブラがcookieの有効期限を正しく処理しているかによります。
    Downloads
  • v20240709-snapshot 0c9b7d46c1

    NanashiNoGombe released this 2024-07-09 11:09:34 +02:00 | 86 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の代わりとしては欠陥品です。

    Downloads
  • v20240613-snapshot d85275e6d7

    NanashiNoGombe released this 2024-06-13 12:37:54 +02:00 | 88 commits to master since this release

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

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

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

    Downloads