Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ShareTrace 内部処理の調査
Search
meow
April 25, 2026
Technology
36
0
Share
ShareTrace 内部処理の調査
2026/04/25(土) 秋葉原電脳倶楽部 技術発表会 #30 で発表した資料です
https://akiba.connpass.com/event/390273/
meow
April 25, 2026
More Decks by meow
See All by meow
GitFive 内部処理の調査
meow_noisy
0
37
バニラVisaギフトカードを棄てるのは結構大変
meow_noisy
0
420
learnwithjohnbest氏の物理学的ファクトチェック術を学ぶ
meow_noisy
0
73
ユーザースクリプトでUIコンポーネントを非表示にするなど
meow_noisy
0
89
Pandocでmd→pptx便利すぎワロタwww
meow_noisy
2
2.2k
marpで出力したpptxのスライドをコピペすると白紙になる問題の調査
meow_noisy
0
83
FRAVIAの"Learning to transform question into effective queries"を読む
meow_noisy
0
67
『FRAVIA: The Art of Searching』を読む
meow_noisy
1
95
Stranger Case V3 作戦会議
meow_noisy
0
500
Other Decks in Technology
See All in Technology
世界の中心でApp Runnerを叫ぶ FINAL
tsukuboshi
0
250
Oracle Cloud Infrastructure:2026年4月度サービス・アップデート
oracle4engineer
PRO
0
380
カオナビに Suspenseを導入するまで / The Road to Suspense at kaonavi
kaonavi
1
440
自動テストだけで リリース判断できるチームへ - 鍵はテストの量ではなくリリース判断基準の再設計にあった / Redesigning Release Criteria for Lightweight Releases
ewa
7
3.5k
古今東西SRE
okaru
1
150
Digital Independence: Why, When and How
wannesrams
0
300
オライリーイベント登壇資料「鉄リサイクル・産廃業界におけるAI技術実応用のカタチ」
takarasawa_
0
350
AIと乗り切った1,500ページ超のヘルプサイト基盤刷新とさらにその先の話
mugi_uno
2
320
ボトムアップの改善の火を灯し続けろ!〜支援現場で学んだ、消えないための3つの打ち手〜 / 20260509 Kazuki Mori
shift_evolve
PRO
2
600
知ってた?JavaScriptの"正しさ"を検証するテストが5万以上もあること(Test262)
riyaamemiya
1
170
新卒エンジニア研修、ハンズオンの設計における課題と実践知/ #tachikawaany
nishiuma
2
130
2026年春のAgentCoreアプデ 細かいやつ全部まとめ
minorun365
3
210
Featured
See All Featured
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
1
31
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
160
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
23k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.9k
Typedesign – Prime Four
hannesfritz
42
3k
RailsConf 2023
tenderlove
30
1.4k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
180
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
For a Future-Friendly Web
brad_frost
183
10k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
160
New Earth Scene 8
popppiees
3
2.2k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
410
Transcript
秋葉原電脳倶楽部 技術発表会 #30 meow (@meow_noisy) _ 2026年4⽉25⽇(⼟) ShareTrace 内部処理の調査
発表概要 u 2026年4⽉に話題になった、共有リンクから背後にいる アカウントを調査するツール『ShareTrace』の 内部ロジックを追ったことについて報告する u 各プラットフォームの共有リンクから 『何が』『どうやって』 取れるのかを1つずつ⾒ていく u
最後に抽出ロジックを抽象化して、こういう⼿法をそもそも どう⾒つけているのかを推測 ⚠免責事項 本発表は機微情報保護の勉強を⽬的として作成されました。 本発表の内容を不正に利⽤した場合、刑事罰、⺠事訴訟の対象となることがあります。 本発表の内容を⽤いたことにより起こした、いかなる損害、損失に対し著者は⼀切責任を負いません。
アジェンダ u 1. はじめに u ShareTrace概要 u 2. ShareTraceの使い⽅ u
インストール、 共有リンクの仕様上の注意 u 3. 各プラットフォームの実⾏結果と追跡の理屈 u TikTok、Discord、Instagram...など u 4. APIをどうやって発⾒しているかの推測 u 5. まとめ
背景 u 2026年4⽉初旬、界隈で急に sharetrace というツール が話題になった u 「共有リンクからアカウントを追跡できる」という⼝ぶりで拡散 u どういうロジックで追跡しているのか気になった
ので内部処理を⾒てみることにした https://x.com/cyb_detective/status/2041437639278993863
ShareTrace 概要 u プラットフォームが発⾏する共有リンクから背後のユーザー の情報を明らかにするツール u 抽出できる情報の種類: ユーザー名、表⽰名、ID、アバター、場合 によってはメール u
対応プラットフォーム: 10種以上(次スライド) u Python 製 / CLI で動作
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時点
対応プラットフォームと抽出される情報 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)から引⽤
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)から引⽤
主なユースケース u ジャーナリズム / ファクトチェック u 情報源(特に偽情報と疑われるもの)の発信元アカウントを辿る u 機微情報、プライバシー保護、OpSec u
企業 u 組織の共有運⽤が本当に匿名化されているかの検査 u 個⼈ u ⾃分が発信しているリンクから、どこまで素性が漏れているか確認 (主にSNSアカウント調査の)ピボットを増やすことに役に⽴つという意味では めちゃくちゃでかい
「リンクを共有した時点で、 共有主がわかるのは当たり前では?」 ...という質問が想定される u 実際には「当たり前」ではない u 共有した本⼈は ⾃分のアカウント情報が埋め込まれている⾃覚が ない可能性がある u
「共有 → リンクをコピー」を押しただけで、UIに警告は出ない u URLに明⽰化されているわけではなく気づきにくい u 受け⼿が⼀段掘らないと出てこない情報 u 他⼈の投稿に対して共有リンクを発⾏しても有効 u 同⼀⼈物が運⽤しているがプライベートにしているアカウ ントを追跡されるリスクがある(次のスライド)
ありそうな機微情報 漏えいシナリオ このカフェおしゃれ〜☕ このカフェおしゃれ〜☕ ⚠他⼈の投稿に対して 共有リンクを発⾏しても有効
アジェンダ u 1. はじめに u ShareTrace概要 u 2. ShareTraceの使い⽅ u
インストール、 共有リンクの仕様上の注意 u 3. 各プラットフォームの実⾏結果と追跡の理屈 u TikTok、Discord、Instagram...など u 4. APIをどうやって発⾒しているかの推測 u 5. まとめ
本発表で使⽤するリポジトリ u オリジナルは @loaded ⽒のリポジトリ u https://github.com/loaded/sharetrace (削除済) u しかし、何らかの事情でアカウントごと削除されている
u forkは複数残っている u 今回はstar数の多い @soxoj ⽒のfork を使⽤ u https://github.com/soxoj/sharetrace
インストールと実⾏(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はクオートで囲むんだほうがいい(? や & がシェルに⾷われる)
注意点: 共有リンク ≠ 普通のURL u 共有リンクは 「共有ボタンを押した瞬間」に⽣成されるト ークン付きURL u ブラウザのアドレスバーのURLではない
[備考]有志によるWeb アプリ版 u Flask 実装のセルフホスト版 u https://github.com/voelspriet/sharetrace-web u @henkvaness⽒によるデモアプリ u
https://share.whopostedwhat.com/ u 説明や、デモの対象とするターゲットも⽤意されており、 CLIを叩く前に所感を掴むのにオススメ @henkvaness⽒によるデモアプリ
ツール使⽤時の倫理について 公式README.mdの翻訳。本当に気をつけましょう。
アジェンダ u 1. はじめに u ShareTrace概要 u 2. ShareTraceの使い⽅ u
インストール、 共有リンクの仕様上の注意 u 3. 各プラットフォームの実⾏結果と追跡の理屈 u TikTok、Discord、Instagram...など u 4. APIをどうやって発⾒しているかの推測 u 5. まとめ
調査対象 u 表のうち、以下のプラットフォームの実⾏と、どういう理 屈でやっているかを(Claudeを利⽤して)調査 u TikTok u Discord u Instagram
u Perplexity u Pinterest u Telegram
[備考]内部処理を調査する意味 u 便利ツールの出⼒は、出⼒過程を理解していないと正当性 を主張できない u 例: 裁判でShareTraceで得た証拠を出したとしても「そんな出⾃ のわからないツールから出た情報なんか信じられるか」と⾔われた ら終わり u
コードから「どうやってそれを⾒つけたのか」を掴みたい u 別のプラットフォームにも応⽤可能なノウハウにしたい (興味本位以外で)
TikTok 実⾏結果 u Xで投稿されているTikTokのリンク u これを踏んでも、他⼈の動画が出るだけ u ShareTraceでURLを解析すると、共有リンクを発⾏した TikTokアカウントが表⽰される DIVER
OSINT CTF 2024 “uploader” より
TikTokで追跡できる理屈 1. 短縮URL vm.tiktok.com/XXXXX をリダイレクト追跡 2. Android ブラウザを偽装してページHTMLを取得 3. HTML内の
webapp.reflow.global.shareUser JSON を正規表現でパース GitHub リポジトリより
Discord 実⾏結果 u ⾃分のサーバーで招待リンクを⽣成し試した u ⾃分のDiscordアカウントがヒット u 招待リンクをexpireさせるとヒットしなくなる
Discord で追跡できる理屈 u エンドポイント: GET discord.com/api/v9/invites/{code} u レスポンスの inviter.id /
inviter.username / inviter.avatar を参照 u さらに Snowflake ID から アカウント作成⽇時 も算出 GitHub リポジトリより
Instagram 実⾏結果 u ⼿軽に試せるアカウントがないが、確かに、スマホアプリ の紙⾶⾏機のアイコンからリンクを作成すると、⾃分のア カウントが発⾒できた u webブラウザ版だと上⼿くいかなかった
Instagramで追跡できる理屈 u Android ブラウザを偽装して招待リンクの ページHTMLを取得 u HTML内の user_for_shid_logged_out キーのJSON をパースして取得
GitHub リポジトリより
Perplexity 実⾏結果 Perplexity 実⾏結果(Webアプリ版)
Perplexityで追跡できる理屈 u 公開REST APIを叩くだけ u エンドポイント: GET perplexity.ai/rest/thread/{slug} u レスポンスの
entries[0] から投稿者情報を参照 u 取得情報: Username / アバター / User ID
Pinterest 実⾏結果 u 短縮リンク pin.it/XXXXX が対象 u 通常のピンURL (pinterest.com/pin/123...) では動か
ない Pinterest 実⾏結果(Webアプリ版)
Pinterestで追跡できる理屈 u ① 短縮URL pin.it/XXXXX のリダイレクト先( Locationヘッダー)から invite_code を抽出 u
② InviteCodeMetadataResource API に invite_code を渡してリクエスト u ③ レスポンスの sender フィールドを参照 GitHub リポジトリより
Telegram u 共有リンク: t.me/joinchat/JdJoSRcUuUma- UHZN3NTmg u 出⼒は 数値ID のみ →
1231606309 u ユーザー名解決は別途必要 実⾏結果(Webアプリ版)
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整数として読む
現状動いていないモジュール プラット フォーム 原因 ChatGPT OGPが "Shared by NAME via
ChatGPT" → "Shared via ChatGPT" に変化 プラットフォーム側の仕様変更への追従が必要
取得⼿法のざっくり分類 u スライドでは扱えなかった部分もあるが、次のような分類 になりそう ⼿法 プラットフォーム HTML内埋め込みJSON解析 TikTok, Instagram, Substack
OGP内の情報 ChatGPT 内部API利⽤ Discord, Perplexity, Suno, Claude URLデコードのみ(通信不要) Microsoft, Telegram
アジェンダ u 1. はじめに u ShareTrace概要 u 2. ShareTraceの使い⽅ u
インストール、 共有リンクの仕様上の注意 u 3. 各プラットフォームの実⾏結果と追跡の理屈 u TikTok、Discord、Instagram...など u 4. APIをどうやって発⾒しているかの推測 u 5. まとめ
どうやってAPIを発⾒しているか の推測 ここまで抽出できる理屈を追ってきたが、そこから抽象化し てみると、アプローチは主に2つあるのではないかと思って いる 1. ブラウザの開発者ツールで観察する 2. URLやバイナリを⽬で読む
① ブラウザ開発者ツールで観察 u 共有リンクを開いた状態で 開発者ツール の Network タ ブを⾒る u
どのAPIが叩かれているかが⼀覧で⾒える u Sources タブで HTML ソースの埋め込みJSONが⾒える u そこから地道に⾒つけているのではないか
② URLを⽬で読む u 構造を観察 u Microsoft: SharePoint URLはメールが _ 区切りでそのまま⼊
っている u Telegram: Base64をデコードすると、先頭4バイトが User ID と判明 u 同じアカウントで複数の招待リンクを⽣成 → 先頭4バイトが⼀致し、 怪しいと推測 u 処理過程を地道に読解
共通している発想 u ブラウザが内部的にやっていることを真似るだけ u 特別な脆弱性を突いているわけではないが、ブラウザを使っている だけだと⾒えない部分を利⽤ u プラットフォームが埋め込んでいる情報を読んで解析して 地道に⾒つけている u
抽象化して横展開できるような銀の弾丸は無かった。 u ツール公開者には本当に尊敬しかない。
アジェンダ u 1. はじめに u ShareTrace概要 u 2. ShareTraceの使い⽅ u
インストール、 共有リンクの仕様上の注意 u 3. 各プラットフォームの実⾏結果と追跡の理屈 u TikTok、Discord、Instagram...など u 4. APIをどうやって発⾒しているかの推測 u 5. まとめ
まとめ u ShareTraceの実⾏、コードリーディングを通して、どう情報を抽出 しているのかの仕組みを理解した u 全体的にブラウザがやっていることの再現 u 脆さもある u プラットフォームの仕様変更でいつ壊れてもおかしくない
u 実際に ChatGPT は現時点で取得不能 u 技法がオープンになる前に、⾃分で⾒つける姿勢が⼤事だと思っている u ⾃分で⾒つけるとなった場合、アプローチは2つありそう u ブラウザ開発者ツール の Network などの タブで通信を観察 u URL・バイナリを⽬で読んで構造を推測
ご清聴ありがとうございました @meow_noisy