2015-12-23

隱藏 Facebook 最後上線時間 真正關閉聊天室

常常上 Facebook ,又不想讓別人知道自己在線上, 以為只要把聊天室關閉就好了嗎?

不知道從什麼時候開始,我注意到總有些朋友聊天室名字旁邊從來沒顯示綠色圈圈, 但常常在一分鐘之前上線, 可是一分鐘之前明明就都沒看到他上線,怎麼回事啊? 開分身帳號實驗之後才發現,那個一分鐘,其實代表「他在線上,只是沒開聊天室」。

不過,上線時間還是有辦法隱藏的。



隱藏上線時間的辦法

[2017/11/17 已確認過還有效!]

注意!隱藏上線時間之後, Facebook 將會變得很不方便, 像是新訊息、新通知、貼文的新留言將不會自動更新,要自己重新整理才會更新。 在手機上則只能用 Firefox 瀏覽器上線,不能用 Facebook 相關的 app。

如果可以接受這樣的不方便,覺得為了隱私著想這不算什麼,再繼續看下去吧!

另外,因為我比較常用 Firefox,所以只有研究 Firefox 如何阻擋網址, 如果 Chrome 有類似的附加原件也可以拿來用。


1. 安裝 Silent Block 附加元件,並找到 Firefox 的 profile 資料夾。 Windows 的路徑是 C:\Users\(使用者名稱)\AppData\Roaming\Mozilla\Firefox\Profiles\(一串亂碼).default , Linux 的路徑是 ~/.mozilla/firefox/(一串亂碼).default , 或是參考 詳細說明

2. 在 profile 資料夾裡建立一個 contentblock-regex.txt 文字檔。

3. 打開 contentblock-regex.txt ,將以下網址加到裡面。 Silent Block 很好用,一行一個規則,可以用 regex 來設定封鎖的網址, 也可以直接寫上一個字串,這樣有包含那個字串的網址就會連不上。
facebook.com/ajax/mercury/change_read_status.php
facebook.com/ajax/messaging/typ.php
m.facebook.com/messages
messenger.com/ajax/mercury/change_read_status.php
messenger.com/ajax/messaging/typ.php

edge-chat.facebook.com
edge-chat.messenger.com
facebook.com/ajax/chat
m.facebook.com/buddylist.php

封鎖前五個網址,可以分別隱藏電腦版訊息已讀、打字中、手機版 m.facebook.com 訊息已讀, 以及 www.messenger.com 網站的訊息已讀和打字中。 其中隱藏手機版訊息已讀,同時也將沒辦法從 m.facebook.com 查看訊息, 必須從電腦版網址 www.facebook.com ,詳情 嘗試在手機瀏覽器上隱藏 Facebook 訊息的已看過

後四個網址,則是隱藏最後上線時間(電腦和手機版和 www.messenger.com 網站版),同時 封鎖 edge-chat 會造成不會自動更新訊息和通知等, 封鎖 ajax/chat 會造成不能改變聊天室的開關狀態、側邊欄的顯示隱藏狀態等。


以下不是本文重點,只是好玩,可以略過。 如果要讓右上角通知、訊息、朋友的紅色數字不消失(重新整理後數字又會再出現), 可以增加封鎖以下網址。

www.facebook.com/ajax/notifications/mark_read.php
m.facebook.com/a/jewel_notifications_read.php
m.facebook.com/notifications.php

www.facebook.com/ajax/mercury/mark_seen.php
www.messenger.com/ajax/mercury/mark_seen.php
m.facebook.com/a/jewel_messages_read.php

pixel.facebook.com/ajax/gigaboxx/endpoint/UpdateLastSeenTime.php
m.facebook.com/a/jewel_requests_read.php
m.facebook.com/findfriends
m.facebook.com/friends

pixel.facebook.com/ajax/gigaboxx/endpoint/update_last_seen_time
www.facebook.com/friendjewel/friendconfirmednotifications

[2017/11/17]:新增兩個網址,另外 Firefox 57 目前還不支援 Silent Block, 可以改安裝 Simple Blocker,在所有附加元件的頁面那裡選擇 Simple Blocker,在框框裡加入這些網址就行了。 Adblock Plus 和 uBlock Origin 的自訂清單也可以,但如果是直接在新分頁打開網址好像就封鎖不了,改天再研究。


4. 手機上的設定

在手機 Firefox 上,也是去安裝 Silent Block ,把 contentblock-regex.txt 放到想放的資料夾, 再去 about:config 裡面的 extensions.silentblock.altdir 設定位置就行了,例如 /storage/sdcard0/SilentBlock ,如圖。


5. contentblock-regex.txt 存檔後,重開 Firefox 設定才會生效,然後就成功了!

記得把手機上 Facebook 和 Messenger 之類的 app 解除安裝。

注意!這招可能隨時會因為改版之類的而失效,總之我會盡量繼續研究。



實驗過程

既然要隱藏上線時間,就來研究一下 Facebook 到底怎麼把上線時間的訊息傳出去。 安裝 HttpFox 附加元件按下 Start 開始偵測, 停在 Facebook 網頁上隨便動一下游標,就會顯示出一些網址, 其中那個 5-edge-chat.facebook.com 有個 chat 看起來就很可疑,先試著擋掉這網址看看。

host 把 5-edge-chat.facebook.com 擋掉後繼續用 FB,對方還是一樣看到 1m , 看一下 HttpFox 竟然出來了 6-edge-chat.facebook.com , 啊,更可疑了。

一樣用 host 擋掉後,接著又再出來 0-edge-chat, 3-edge-chat, 還有只有 edge-chat 的網址,這樣下去擋不完啊。

於是找到了 Silent Block 這個附加元件來一次阻擋這些網址, 使用方式很簡單,建立一個 contentblock-regex.txt 的文字檔,放到 Firefox 的 Profiles 資料夾 (windows 的路徑是在 C:\Users\...\AppData\Roaming\Mozilla\Firefox\Profiles\... .default 這個資料夾) ,再重開 Firefox。 以後每次修改完存檔後,也都要重開 Firefox 才會生效。

直接把 edge-chat.facebook.com 這句加到 contentblock-regex.txt , Firefox 就無法連上包含這串文字的網址。


繼續回去用 Facebook ,就發現自己明明一直在線上,別人看到的不再一直是 1m 了, 變成 2m, 3m, ... ,也就是別人終於看不到你在線上了!

至於數字要多久才消失,我也不知道。

然後如果原本有打開聊天室,從此聊天室就會顯示著 Unable to connect to chat.

有趣的是,此時雖然自己表面上看不到別人有沒有上線, 如果對方有上線並且有開聊天室,點他的名字跳出對話框, 他的名字旁就會出現綠色圈圈,然而此時對方看你並沒有上線 (沒有綠圈也不會變成 1m)。 雖然要點了才知道別人有沒有綠圈,也看不到顯示的數字, 至少已經成功達成原本的目標啦。 (更新:現在關閉聊天室也可以看得到別人的最後上線時間。)

重點是在這個狀態下傳訊息,別人還是收得到,而且他看你一樣還是沒有上線。

特別要注意的是,此時如果原本沒有打開聊天室,突然打開的話, 別人就馬上會看到你出現綠色圈圈,然後過一會兒才會消失,恢復到原本顯示的數字。

為了避免這種情形,我另外又找到一些網址如下,
www.facebook.com/ajax/chat/privacy/settings.php
www.facebook.com/ajax/chat/privacy/visibility.php
www.facebook.com/ajax/chat/opentab_tracking.php
www.facebook.com/ajax/chat/imps_logging.php

感覺其中一定有一個就是會在我打開聊天室的瞬間把我在線上的訊息傳出去的, 不管是哪一個,乾脆直接把 facebook.com/ajax/chat 加到 contentblock-regex.txt ,和 chat 有關的全部擋掉算了。

然後很成功的就會沒辦法開關聊天室, 此外游標移到名字上也不會跳出框框(hovercard)、也不能隱藏聊天室...之類的, 反正不是很重要,至少終於不用擔心不小心洩漏行蹤了!


繼續實驗在手機上 (手機版網頁 m.facebook.com) 的情形。 保留剛才的設定,把網頁開到 m.facebook.com 用了一陣子,發現已經成功讓別人看不到自己在線上了耶。 換一個沒有阻擋網址的瀏覽器來試試,發現網頁一樣會連線到 edge-chat.facebook.com , 跟電腦版網頁一樣,然後別人就看到你的名字旁出現 1m 了。

太好了,還有辦法利用阻擋特定網址來隱藏行蹤,不像要 隱藏訊息的已看過 就沒辦法這樣。

為此,我在手機上不再用 Chrome 而改用 Firefox 來上 Facebook, 一樣安裝 Silent Block,參考 這一篇 的做法,把 contentblock-regex.txt 放到想放的資料夾, 再去 about:config 裡面的 extensions.silentblock.altdir 設定位置就行了。例如把他設定成: /storage/sdcard0/SilentBlock 。

另外手機版有個網址 m.facebook.com/buddylist.php 是聊天室的名單,如果有開聊天室,可以在這看到有誰在線上, 不過也會把自己的上線情形傳出去,保險起見也順便擋掉好了。

終於現在可以盡情在手機上瀏覽 Facebook ,不用擔心別人知道我正在線上了!

當然,要讓別人不知道正在線上的時候,除此之外也不要去按讚留言 (朋友可能會在動態上看到,超過 100 個朋友的朋友可以從右上角的 ticker 看到) 、 點進看社團文章 (會記錄誰看過;我改天來研究一下好了) 、 或是去讀訊息 (別人會看到已看過,除非先 動過手腳 ) 之類的。

這個方法雖然我才剛用不久,到目前為止都一直還可以成功的隱藏自己在不在線上, 不過也許還有我沒發現的其他管道也會洩漏行蹤, 或者也許哪天 Facebook 改版這招就失效了。 總之就是我不保證一定有效啦,而且我也不知道這樣可能會產生哪些副作用。

當然研究這個的目的,一方面為了好玩,一方面也為了隱私著想。 就算大部分人大部分時間都不會在意別人看得到自己在不在線上, 可能也會突然有需要隱藏行蹤的時候。這時就必須了解就算關閉聊天室, 別人還是看得到自己在不在線上的事實; 而不是只把頭埋進土裡,看不到大家,就以為大家看不到自己了。


同場加映:如何讓 Facebook 通知、訊息、朋友邀請的數字不要消失

經過嘗試後,我發現只要將以下網址加入 contentblock-regex.txt 阻擋掉就行了, 似乎沒有什麼好處,只是為了好玩。
[通知]
電腦版: www.facebook.com/ajax/notifications/mark_read.php
手機版: m.facebook.com/a/jewel_notifications_read.php
[訊息]
電腦版: www.facebook.com/ajax/mercury/mark_seen.php
手機版: m.facebook.com/a/jewel_messages_read.php
[朋友邀請]
電腦版: pixel.facebook.com/ajax/gigaboxx/endpoint/UpdateLastSeenTime.php
手機版: m.facebook.com/a/jewel_requests_read.php


2016/2/15 補充

阻擋網址隱藏 Facebook 最後上線時間,到目前都還成功,卻也發現一些缺點, 最明顯的就是不再及時跳出通知和顯示留言, 以及聊天室朋友的最後上線時間也不會更新,必須重新整理才更新。

暫時先不阻擋任何網址,果然別人一在貼文留言,就會馬上收到通知和顯示出留言。 觀察 HttpFox 或底下的 Network ,總有最後一個 ...edge-chat.facebook.com/pull?channel=... 一直在讀取資料中,所以新通知可以馬上出現, 讀到的資料分析一下就是通知或留言內容或聊天室時間等; 一小段時間後沒有新通知的話,會讀取到 for (;;); {"t":"heartbeat"} ,再出現新的。

如果網頁放著一陣子再去動他, 就會出現 ...edge-chat.facebook.com/active_ping... 的網址,別人看到你的最後上線時間同時也會變成 1m。 可惜把 active_ping 的網址擋掉後,還是防止不了。 原來上面說的 pull 網址後面有個 idle 參數,就是閒置秒數, 在接收通知的同時傳送出去了。 完整 pull 網址如下,看起來只有 seq, cb, idle 參數每次都會改變:
https://3-edge-chat.facebook.com/pull?channel=p_100006579159942&seq=19&partition=-2&clientid=6db29472&cb=ks1o&idle=3&qp=y&cap=8&pws=fresh&isq=311&msgs_recv=19&uid=100006579159942&viewer_uid=100006579159942&sticky_token=14&sticky_pool=frc1c16_chat-proxy&state=active

突發奇想說不定可以用 Redirector 附加元件來把 idle 改掉,如圖:
Include pattern: (.*)edge-chat.facebook.com/(.*)&idle=(.*?)&(.*)
Redirect to: $1edge-chat.facebook.com/$2&idle=99999&$4

結論就是,不管改成 idle=99999 還是 idle= 還是沒有 idle, 或是連前面參數也固定 cb=ks1o&idle=3 或拿掉, 怎麼弄似乎都只會讓網址完全讀不到資料,就跟封鎖一樣不會顯示通知。

好吧...既然這兩個功能硬要綁在一起,我暫時也沒轍了。 到底是要讓他很方便的自動跳出通知和留言, 還是好好保護隱私,隱藏自己的最後上線時間呢? 我大概還是會選擇後者吧。


2016/5/9 補充

後來發現,Facebook 訊息還有一個已送達的標籤, 在 messenger 裡用填滿顏色的圈圈和白色打勾表示已送達。 我猜已送達後把網路關掉還是可以讀訊息, 也就是就算還沒已讀,對方可能已經讀了。 如果不想要讓對方看到已送達,我研究了一下, 發現需要封鎖以下網址:

www.facebook.com/messages
www.facebook.com/ajax/mercury/unread_threads.php
www.messenger.com/ajax/mercury/unread_threads.php
www.facebook.com/ajax/mercury/delivery_receipts.php
www.messenger.com/ajax/mercury/delivery_receipts.php

雖然看起來不是很重要,可是如果想要完全隱形, 不讓對方看到他傳來的訊息已送達卻未讀,好像自己故意不去讀訊息, 封鎖這幾個網址當然還是有必要的。 我不確定還有沒有別的網址,遇到再說吧。


7 comments :

  1. 您好,非常謝謝您分享如何保護自己隱私,不顯示上次上線時間的方法。期待您找到更方便的方法並分享之。

    另外,關於您寫的最後一點,我一直以為私訊出現打勾勾是對方已讀耶(通常也會在訊息內文底下出現 seen Date or Time)。而且我以為我已讀了某個訊息,然後改成 mark as unread 就可以了讓對方不知道我已讀或送達了,難道不是這樣嗎?

    ReplyDelete
  2. 請問一下 facebook上原始碼中的user id 有123456-0 and 123456-2 這兩個是什麼意思呢?

    ReplyDelete
    Replies
    1. 我也不知道耶,那整個清單是什麼意思我也一直看不懂,facebook 原始碼太複雜了

      Delete
  3. 您好,我有這個需求才找到這邊來的。雖然您寫的我看不懂,但我覺得您好認真好熱情,希望留個言給您加油!
    你好棒!你好棒!你好棒!

    ReplyDelete
  4. 好像這個方法又無法使用了

    ReplyDelete
  5. 玩得如此心機,真的太累了~
    使用得如此不光明正大,那還是乾脆使用LINE算了。

    ReplyDelete