感覺好像又很久沒寫文章了 XD

最近因為 Tampermonkey 上架蘋果 App Store,老牌套件上架 Safari 肯定要支持一下的!

但也因為裝了之後發現,我常用的 Twitter direct 沒辦法在 Safari 的版本中生效

就花了點時間分析了一下可以怎麼在 Safari 上解決這問題

By the way, uBlock 已經包含了這個過濾器。如果你是 Chrome/FireFox 的使用者,

直接開啟 uBlock filters – Annoyances 就能達到這個功能囉~

如果是 Safari 的愛用者,那就可以繼續看下去了

TL;DR

Loon 新增 Plugin

https://raw.githubusercontent.com/BeeeeeMo/Loon-plugins/refs/heads/main/Plugins/tco_direct.plugin

QX/Surge 的使用者,可以用資源轉換器或是 ScriptHub 轉換,直接改我的 Script 也是沒問題的 XD

Twitter 超連結追蹤器是什麼?

其實這個 “超連結追蹤器” 的名字是我瞎掰的,其實就是 t.co 啦

只要貼文中有超連結,Twitter 就會偷將實際連結轉為 t.co 縮址,

而真正顯示出來的網址躲在下面

雖然你表面上看起來是 www.psychovision.online,我們看看網頁原始碼,他其實是 t.co 的縮址

所以在你點下這個超連結時,你以為你會直接進到表面上看到的連結

但實際上是先進到 https://t.co/syVDv8Slnd,伺服器偷偷記錄你的瀏覽資訊後

再把你帶去你 www.psychovision.online

必須先聲明一下,Twitter 不一定會用這個縮址來追蹤用戶 但不代表他做不到

啊我就是不想在進入網站之前,先去 Twitter 的伺服器走一圈咩 😠

我們可以問問 AI t.co 到底會不會追蹤使用者

🤖 GPT-4 Turbo

🤖 Claude 3.5 Sonnet V2

🤖 Gemini 1.5 Pro

看起來我沒誤會 Twitter,他可能真的會追蹤使用者

該怎麼做

首要目標就是把真正的連結替換回去,因為我們已經知道 Twitter direct 跟 uBlock 可以做到這個功能

但在 Safari 下 Twitter direct 無法正常運作,我就先不從 Userscript 的角度下手 我不想寫 JS

至於 uBlock 的部分,經過我的觀察,這個功能的實現就在 uBlock filters – Annoyances 這個過濾器當中,Link

看起來是修改 response 然後用 regex 來替換內容

現在我們的方法已經有了,來分析在 Safari 下 Twitter 的請求

從上面的 Rule 中可以知道,是要分析路徑中帶有 /graphql 的請求

過濾之後可以從 TweetDetail 的請求找到 tweet 中 url 相關的資訊,

搭配上面的 Rule,可以知道 url 的數值會被嵌入在貼文中,

所以我們只要想辦法把 url 的值改成 expanded_url 的值就好啦~

MitM 登場!

什麼是 MitM? 可以參考 Wiki 中間人攻擊

Loon/QX/Surge 剛好可以做這方面的事情,我們只要寫 討厭的 JS 就能輕鬆的修改 response,

下面這個就是 MitM 修改 url 的主程式

let body = $response.body;

body = body.replace(
  /,"expanded_url":"([^"]+)","url":"[^"]+"/g,
  ',"expanded_url":"$1","url":"$1"'
);

$done({ body });

沒錯,就是這麼簡單,中間的 Regex 甚至跟 uBlock rule 一模一樣 XD

我已經寫成 Plugin 了,有 Loon 的朋友可以直接來這邊取用 Github - Loon-plugins

啟用之後我們再瀏覽一次相同的貼文

成功 🎉🎉🎉

結語

我之前不是在用 QX,怎麼現在改用 Loon?

因為 QX 不更新,沒辦法 MitM http/2,有些 APP 沒辦法改 😠

但必須說,不太推薦在 Mac 上裝 Loon,因為他還沒出 macOS 版,

目前是用 M 系列處理器來執行 iPadOS 的 App 多少會有不穩定的地方

推薦用 Surge 執行起來相對穩定非常多

至於為什麼這篇文章沒有 Loon 的細部操作?

因為 Loon 在 Mac 下還有很多 Bug,

e.g MitM 一些 domain 會導致網站無法進入、隨機情況下無法正常聯網等等的玄學問題

所以我不太推薦一般使用者

這篇文章主要是提供一些解決問題的思路而已,最後只是透過 Loon 來 PoC

接下來應該會再做幾個跟 Loon 相關的 Plugin,請大家拭目以待 XD