Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ShareTrace 内部処理の調査

Avatar for meow meow
April 25, 2026

ShareTrace 内部処理の調査

2026/04/25(土) 秋葉原電脳倶楽部 技術発表会 #30 で発表した資料です
https://akiba.connpass.com/event/390273/

Avatar for meow

meow

April 25, 2026

More Decks by meow

Other Decks in Technology

Transcript

  1. 発表概要 u 2026年4⽉に話題になった、共有リンクから背後にいる アカウントを調査するツール『ShareTrace』の 内部ロジックを追ったことについて報告する u 各プラットフォームの共有リンクから 『何が』『どうやって』 取れるのかを1つずつ⾒ていく u

    最後に抽出ロジックを抽象化して、こういう⼿法をそもそも どう⾒つけているのかを推測 ⚠免責事項 本発表は機微情報保護の勉強を⽬的として作成されました。 本発表の内容を不正に利⽤した場合、刑事罰、⺠事訴訟の対象となることがあります。 本発表の内容を⽤いたことにより起こした、いかなる損害、損失に対し著者は⼀切責任を負いません。
  2. アジェンダ u 1. はじめに u ShareTrace概要 u 2. ShareTraceの使い⽅ u

    インストール、 共有リンクの仕様上の注意 u 3. 各プラットフォームの実⾏結果と追跡の理屈 u TikTok、Discord、Instagram...など u 4. APIをどうやって発⾒しているかの推測 u 5. まとめ
  3. Platform 抽出できる情報 有効な共有リンクフォー マット 無効なリンク TikTok ユーザID, ユーザネーム, 表⽰ 名,

    国, デバイス,...など vm.tiktok.com/ZMxxxxxx / vt.tiktok.com/... ブラウザのアドレスバーから 取った tiktok.com/@user/video/1 23... Instagram ユーザID, ユーザネーム, 表⽰ 名, プロフィール写真 ?igsh=... を含む共有リン ク 素の /p/Cxxx/ URL、数⽇以 上経過したリンク Discord 招待リンクを発⾏した、 ユーザID, ユーザネーム, 表⽰ 名, アバター画像, アカウント作 成時刻 discord.gg/xxxxx discord.com/invite/xxxxx 提携サーバーのカスタム招待 リンク、またはプロフィール /メッセージの直接URL。 ChatGPT 表⽰名 chatgpt.com/share/<uui d> ̶ 抽出できる情報は公式リポジトリ、 有効な共有リンク、無効なリンクは デモアプリ(p.16)から引⽤ 現在は抽出できなくなってる 対応プラットフォームと抽出される情報 26/4/19時点
  4. 対応プラットフォームと抽出される情報 Platform 抽出できる情報 有効な共有リンクフォー マット 無効なリンク Claude 表⽰名, ユーザーID claude.ai/share/<uuid>

    ̶ Perplexity ユーザ名, ユーザーID, アバ ター perplexity.ai/search/<slu g> ̶ Microsoft メールアドレス *- my.sharepoint.com/:x:/p /username/... “Anyone with the link” の 1drv.ms 匿名URL Pinterest ユーザネーム, ユーザID, 表⽰ 名, アバター, ...など 短縮リンク pin.it/XXXXX webサイトからコピーした pinterest.com/pin/123.../ 26/4/19時点 抽出できる情報は公式リポジトリ、 有効な共有リンク、無効なリンクは デモアプリ(p.16)から引⽤
  5. Platform 抽出できる情報 有効な共有リンクフォー マット 無効なリンク Substack ユーザネーム, ハンドル名, Bio,...など ?r=XXXXX

    を含む紹介リン ク ?r= の無い通常の投稿URL Suno ユーザネーム, 表⽰名, アバ ター, ...など suno.com/song/<uuid> suno.com/playlist/... ̶ Telegram 招待リンクを発⾏した User ID t.me/+AbCdEf... t.me/joinchat/AAAA... メッセージリンク t.me/c/123/456、公開チャ ネル t.me/channelname 対応プラットフォームと抽出される情報 26/4/19時点 抽出できる情報は公式リポジトリ、 有効な共有リンク、無効なリンクは デモアプリ(p.16)から引⽤
  6. 主なユースケース u ジャーナリズム / ファクトチェック u 情報源(特に偽情報と疑われるもの)の発信元アカウントを辿る u 機微情報、プライバシー保護、OpSec u

    企業 u 組織の共有運⽤が本当に匿名化されているかの検査 u 個⼈ u ⾃分が発信しているリンクから、どこまで素性が漏れているか確認 (主にSNSアカウント調査の)ピボットを増やすことに役に⽴つという意味では めちゃくちゃでかい
  7. 「リンクを共有した時点で、 共有主がわかるのは当たり前では?」 ...という質問が想定される u 実際には「当たり前」ではない u 共有した本⼈は ⾃分のアカウント情報が埋め込まれている⾃覚が ない可能性がある u

    「共有 → リンクをコピー」を押しただけで、UIに警告は出ない u URLに明⽰化されているわけではなく気づきにくい u 受け⼿が⼀段掘らないと出てこない情報 u 他⼈の投稿に対して共有リンクを発⾏しても有効 u 同⼀⼈物が運⽤しているがプライベートにしているアカウ ントを追跡されるリスクがある(次のスライド)
  8. アジェンダ u 1. はじめに u ShareTrace概要 u 2. ShareTraceの使い⽅ u

    インストール、 共有リンクの仕様上の注意 u 3. 各プラットフォームの実⾏結果と追跡の理屈 u TikTok、Discord、Instagram...など u 4. APIをどうやって発⾒しているかの推測 u 5. まとめ
  9. インストールと実⾏(README.mdより) ターミナルでpythonのモジュール実⾏をするだけ。 インストール u git clone https://github.com/soxoj/sharetrace.git u cd sharetrace

    u pip install -r requirements.txt 実⾏ u python -m sharetrace <url> u urlはクオートで囲むんだほうがいい(? や & がシェルに⾷われる)
  10. [備考]有志によるWeb アプリ版 u Flask 実装のセルフホスト版 u https://github.com/voelspriet/sharetrace-web u @henkvaness⽒によるデモアプリ u

    https://share.whopostedwhat.com/ u 説明や、デモの対象とするターゲットも⽤意されており、 CLIを叩く前に所感を掴むのにオススメ @henkvaness⽒によるデモアプリ
  11. アジェンダ u 1. はじめに u ShareTrace概要 u 2. ShareTraceの使い⽅ u

    インストール、 共有リンクの仕様上の注意 u 3. 各プラットフォームの実⾏結果と追跡の理屈 u TikTok、Discord、Instagram...など u 4. APIをどうやって発⾒しているかの推測 u 5. まとめ
  12. Discord で追跡できる理屈 u エンドポイント: GET discord.com/api/v9/invites/{code} u レスポンスの inviter.id /

    inviter.username / inviter.avatar を参照 u さらに Snowflake ID から アカウント作成⽇時 も算出 GitHub リポジトリより
  13. Pinterestで追跡できる理屈 u ① 短縮URL pin.it/XXXXX のリダイレクト先( Locationヘッダー)から invite_code を抽出 u

    ② InviteCodeMetadataResource API に invite_code を渡してリクエスト u ③ レスポンスの sender フィールドを参照 GitHub リポジトリより
  14. Telegram u 共有リンク: t.me/joinchat/JdJoSRcUuUma- UHZN3NTmg u 出⼒は 数値ID のみ →

    1231606309 u ユーザー名解決は別途必要 実⾏結果(Webアプリ版)
  15. Telegramで追跡できる理屈 t.me/joinchat/JdJoSRcUuUma-UHZN3NTmg を例に説明 u ① ハッシュ部分を Base64url デコード → 16バイトのバイ

    ナリ: 25 D2 68 49 17 14 B9 49 ... u ② 先頭4バイトをリトルエンディアンで読む → 0x4968D225 = 1231606309(これがUser ID) 通常の利⽤だとまず気づかない。 GitHub リポジトリより # 22⽂字 → 2⽂字不⾜ → "==" を補う Base64urlデコード → 16バイトのバイナリ('¥x25¥xD2..) 先頭4バイトをリトルエンディアンの 32bit整数として読む
  16. 現状動いていないモジュール プラット フォーム 原因 ChatGPT OGPが "Shared by NAME via

    ChatGPT" → "Shared via ChatGPT" に変化 プラットフォーム側の仕様変更への追従が必要
  17. アジェンダ u 1. はじめに u ShareTrace概要 u 2. ShareTraceの使い⽅ u

    インストール、 共有リンクの仕様上の注意 u 3. 各プラットフォームの実⾏結果と追跡の理屈 u TikTok、Discord、Instagram...など u 4. APIをどうやって発⾒しているかの推測 u 5. まとめ
  18. ① ブラウザ開発者ツールで観察 u 共有リンクを開いた状態で 開発者ツール の Network タ ブを⾒る u

    どのAPIが叩かれているかが⼀覧で⾒える u Sources タブで HTML ソースの埋め込みJSONが⾒える u そこから地道に⾒つけているのではないか
  19. ② URLを⽬で読む u 構造を観察 u Microsoft: SharePoint URLはメールが _ 区切りでそのまま⼊

    っている u Telegram: Base64をデコードすると、先頭4バイトが User ID と判明 u 同じアカウントで複数の招待リンクを⽣成 → 先頭4バイトが⼀致し、 怪しいと推測 u 処理過程を地道に読解
  20. アジェンダ u 1. はじめに u ShareTrace概要 u 2. ShareTraceの使い⽅ u

    インストール、 共有リンクの仕様上の注意 u 3. 各プラットフォームの実⾏結果と追跡の理屈 u TikTok、Discord、Instagram...など u 4. APIをどうやって発⾒しているかの推測 u 5. まとめ
  21. まとめ u ShareTraceの実⾏、コードリーディングを通して、どう情報を抽出 しているのかの仕組みを理解した u 全体的にブラウザがやっていることの再現 u 脆さもある u プラットフォームの仕様変更でいつ壊れてもおかしくない

    u 実際に ChatGPT は現時点で取得不能 u 技法がオープンになる前に、⾃分で⾒つける姿勢が⼤事だと思っている u ⾃分で⾒つけるとなった場合、アプローチは2つありそう u ブラウザ開発者ツール の Network などの タブで通信を観察 u URL・バイナリを⽬で読んで構造を推測