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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
meow
April 25, 2026
Technology
45
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
41
バニラVisaギフトカードを棄てるのは結構大変
meow_noisy
0
550
learnwithjohnbest氏の物理学的ファクトチェック術を学ぶ
meow_noisy
0
84
ユーザースクリプトでUIコンポーネントを非表示にするなど
meow_noisy
0
95
Pandocでmd→pptx便利すぎワロタwww
meow_noisy
2
2.4k
marpで出力したpptxのスライドをコピペすると白紙になる問題の調査
meow_noisy
0
93
FRAVIAの"Learning to transform question into effective queries"を読む
meow_noisy
0
71
『FRAVIA: The Art of Searching』を読む
meow_noisy
1
100
Stranger Case V3 作戦会議
meow_noisy
0
500
Other Decks in Technology
See All in Technology
「使われるデータ基盤」を目指してデータアナリストとワークショップをやった話
jackojacko_
2
930
GitHub Copilot CLIでWebアクセシビリティを改善した話
tomokusaba
0
130
Datadog 認定試験の概要と対策
uechishingo
0
190
Spring Boot における AOT Cache 活用テクニックと 起動時間改善事例
ntt_dsol_java
0
170
AI-DLCを活用した高品質・安全なAI駆動開発実践 / AI Driven Development
yoshidashingo
1
250
なぜハノーバーメッセに行くべきなのか 〜初参加だから語れること〜
tanakaseiya
0
180
JJUG CCC 2026 Spring AI時代の開発こそ標準化を武器に! ― 方式・プロセス・プラットフォームの標準化
s27watanabe
2
620
AI フレンドリーなエラー監視を TypeScript で実現する
shinyaigeek
2
190
Oracle Cloud Infrastructure:2026年5月度サービス・アップデート
oracle4engineer
PRO
1
270
さきさん文庫の書籍ができるまで
sakiengineer
0
310
開発を止めない CI/CD ~CI Visibilityによる継続的最適化~
pensuke628
0
200
プラットフォームエンジニア ワークショップ/ platform-workshop
databricksjapan
0
130
Featured
See All Featured
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
140
Believing is Seeing
oripsolob
1
130
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.3k
A Soul's Torment
seathinner
6
2.9k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
61
44k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
760
Product Roadmaps are Hard
iamctodd
PRO
55
12k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.1k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
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