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

ShareTrace 内部処理の調査

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for meow meow
April 25, 2026

ShareTrace 内部処理の調査

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 2. ShareTraceの使い⽅ u インストール、 共有リンクの仕様上の注意

    u 3. 各プラットフォームの実⾏結果と追跡の理屈 u TikTok、Discord、Instagram...など u 4. APIをどうやって発⾒しているかの推測 u 5. まとめ
  3. 内部処理を調査する意味 u 便利ツールの出⼒は、過程を理解していないと正当性を 主張できない u 例: 裁判でShareTraceで得た証拠を出したとしても「そんな出⾃ のわからないツールから出た情報なんか信じられるか」と⾔われた ら終わり u

    さらに「どうやって⾒つけたのか」を知りたい u コードから⼿法そのものを学べるのでは、という期待 u 「猫に⿂をやるのではなく、⿂の捕り⽅を教える」的な(?) (興味本位以外の)
  4. 「リンクを共有したんだから、 共有主がわかるのは当たり前では?」 ...という質問が想定される u 実際には「当たり前」ではない u 共有した本⼈は ⾃分のアカウント情報が埋め込まれている⾃覚が ない可能性がある u

    「共有 → リンクをコピー」を押しただけで、UIに警告は出ない u URL上の識別⼦は短縮 / ハッシュ / Base64 / SSR埋め込み JSON などで ⽬視では読めない u 受け⼿が⼀段掘らないと出てこない情報 u つまり匿名に⾒えるが、実は紐付いている状態 u この⾮対称性をShareTraceは可視化する
  5. 主なユースケース u ジャーナリズム / ファクトチェック u 情報源(特に偽情報と疑われるもの)の発信元アカウントを辿る u 機微情報、プライバシー保護、OpSec u

    企業 u 組織の共有運⽤が本当に匿名化されているかの検査 u 個⼈ u ⾃分が発信しているリンクから、どこまで素性が漏れているか確認 (主にSNSアカウント調査の)ピボットを増やすことに役に⽴つという意味では めちゃくちゃでかい
  6. [備考]有志によるWeb アプリ版 u Flask 実装のセルフホスト版 u https://github.com/voelspriet/sharetrace-web u @henkvaness⽒によるWebApp版 u

    https://share.whopostedwhat.com/ u 説明や、デモの対象とするターゲットも⽤意されており、 CLIを叩く前に所感を掴むのにオススメ 界隈の著名⼈がこぞってシェアしたり保守しているのを ⾒ると、本当にこのツールがインパクトあるんだろうなと 思う
  7. Platform 抽出できる情報 有効な共有リンクフォー マット 無効なリンク TikTok User ID, Username, Display

    Name, Country, Device, Timestamp vm.tiktok.com/ZMxxxxxx / vt.tiktok.com/... ブラウザのアドレスバーから 取った tiktok.com/@user/video/1 23... Instagram Username, Display Name, User ID, Profile Pic ?igsh=... を含む共有リン ク 素の /p/Cxxx/ URL、数⽇以 上経過したリンク Discord User ID, Username, Display Name, Avatar, Creation Time discord.gg/xxxxx discord.com/invite/xxxxx vanity招待、プロフィール・ メッセージURL ChatGPT Display Name chatgpt.com/share/<uui d> ̶ 抽出できる情報は公式リポジトリ、 有効な共有リンク、無効なリンクは デモWebサイトから引⽤ 現在は抽出できなくなってる 対応プラットフォームと抽出される情報 26/4/19時点
  8. 対応プラットフォームと抽出される情報 Platform 抽出できる情報 有効な共有リンクフォー マット 無効なリンク Claude Display Name, UUID

    claude.ai/share/<uuid> ̶ Perplexity Username, Avatar, User ID perplexity.ai/search/<slu g> ̶ Microsoft Email (SharePoint / OneDrive リンク) *- my.sharepoint.com/:x:/p /username/... “Anyone with the link” の 1drv.ms 匿名URL Pinterest Username, User ID, Display Name, Avatar 短縮リンク pin.it/XXXXX webサイトからコピーした pinterest.com/pin/123.../ 26/4/19時点 抽出できる情報は公式リポジトリ、 有効な共有リンク、無効なリンクは デモWebサイトから引⽤
  9. Platform 抽出できる情報 有効な共有リンクフォー マット 無効なリンク Substack User ID, Name, Handle,

    Bio ?r=XXXXX を含む紹介リン ク ?r= の無い通常の投稿URL Suno Username, Display Name, Avatar suno.com/song/<uuid> suno.com/playlist/... ̶ Telegram User ID (joinchat リンク) t.me/+AbCdEf... t.me/joinchat/AAAA... メッセージリンク t.me/c/123/456、公開チャ ネル t.me/channelname 対応プラットフォームと抽出される情報 26/4/19時点 抽出できる情報は公式リポジトリ、 有効な共有リンク、無効なリンクは デモWebサイトから引⽤
  10. アジェンダ u 1. はじめに u 2. ShareTraceの使い⽅ u インストール、 共有リンクの仕様上の注意

    u 3. 各プラットフォームの実⾏結果と追跡の理屈 u TikTok、Discord、Instagram...など u 4. APIをどうやって発⾒しているかの推測 u 5. まとめ
  11. インストールと実⾏(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はクオートで囲むんだほうがいい(? や & がシェルに⾷われる)
  12. アジェンダ u 1. はじめに u 2. ShareTraceの使い⽅ u インストール、 共有リンクの仕様上の注意

    u 3. 各プラットフォームの実⾏結果と追跡の理屈 u TikTok、Discord、Instagram...など u 4. APIをどうやって発⾒しているかの推測 u 5. まとめ
  13. TikTokで追跡できる理屈 1. 短縮URL vm.tiktok.com/XXXXX をリダイレクト追跡 2. Android ブラウザを偽装してページHTMLを取得 3. HTML内の

    webapp.reflow.global.shareUser JSON を正規表現でパース 取れるもの u User ID / Username / 表⽰名 / アバター u 共有者の国・デバイス・タイムスタンプ (投稿者ではなく 共有者)
  14. Discord で追跡できる理屈 u エンドポイント: GET discord.com/api/v9/invites/{code} u レスポンスの inviter.id /

    inviter.username / inviter.avatar を参照 u さらに Snowflake ID から アカウント作成⽇時 も算出可 能 u 計算式: ((snowflake_id >> 22) + 1420070400000) / 1000
  15. Pinterestで追跡できる理屈 u ① 短縮URL pin.it/XXXXX のリダイレクト先( Locationヘッダー)から invite_code を抽出 u

    ② InviteCodeMetadataResource API に invite_code を渡してリクエスト u ③ レスポンスの sender フィールドを参照 u 取得情報: Username / User ID / 表⽰名 / アバター / プロフィールURL u 通常ピンのURLは対象外、招待コード付き共有リンクのみ 有効
  16. Telegramで追跡できる理屈 t.me/joinchat/JdJoSRcUuUma-UHZN3NTmg を例に説明 u ① ハッシュ部分を Base64url デコード → 16バイトのバイ

    ナリ: 25 D2 68 49 17 14 B9 49 ... u ② 先頭4バイトをリトルエンディアンで読む → 0x4968D225 = 1231606309(これがUser ID) 通常の利⽤だとまず気づかない。
  17. 現状動いていないモジュール プラット フォーム 原因 ChatGP T OGPが "Shared by NAME

    via ChatGPT" → "Shared via ChatGPT" に変化 プラットフォーム側の仕様変更への追従が必要
  18. アジェンダ u 1. はじめに u 2. ShareTraceの使い⽅ u インストール、 共有リンクの仕様上の注意

    u 3. 各プラットフォームの実⾏結果と追跡の理屈 u TikTok、Discord、Instagram...など u 4. APIをどうやって発⾒しているかの推測 u 5. まとめ
  19. ① DevToolsで観察する u 共有リンクを開いた状態で DevTools の Network タブ を⾒る u

    どのAPIが叩かれているかが⼀覧で⾒える u Sources タブで HTML ソースの埋め込みJSONが⾒える u 例: u TikTok: webapp.reflow.global.shareUser u Substack: window._preloads
  20. ② URLを⽬で読む u コードを書くまでもなく構造が⾒える u Microsoft: SharePoint URLはメールが _ 区切りでその

    まま⼊っている u Telegram: Base64をデコードすると、先頭4バイトが User ID と判明 u 同じアカウントで複数の招待リンクを⽣成 → 先頭4バイトが⼀致 u ⾃分のUser IDと⽐較してビンゴ u パターン認識 + 統計的推測
  21. アジェンダ u 1. はじめに u 2. ShareTraceの使い⽅ u インストール、 共有リンクの仕様上の注意

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

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