2026年6月15日星期一

ProtonVPN 免費用戶其實可以咁樣玩:用 WireGuard 官方 Client 解鎖特定地區(USA)兼打破單一設備限制!

差唔多成10年無更新個Blog。因為最近要同人分享免費又好用的VPN,乘機試玩吓用AI Agent去按我的風格用語去寫(係,本篇大部份係 AI寫的)。

是咁的,話說平時如果有需要用到 VPN,好多人都會推薦瑞士嘅ProtonVPN。佢無廣告、唔限流量,而且背景乾淨、安全系數高,喺眾多免費 VPN 之中算係神級存在。

不過,近年 ProtonVPN 官方 App 對免費用戶開始加強限制,最令人頭痛嘅有兩點:

  1.  無得揀地區:以前免費用戶仲可以自己揀美國 (USA)、荷蘭 (NL) 或日本 (JP)。而家一開 App 只能撳 "Quick Connect",由系統隨機分派伺服器。如果你想要美國 IP 嚟睇片或者入特定網站,分分鐘要中斷再連、連完再中斷,撞十幾次都未必撞得中,真係非常之唔科學。
  2.  限制單一設備:官方聲明免費用戶同時間只能有一台設備(1 Connection)在線。

但所謂「上有政策,下有對策」,其實 Proton 官方一直有提供一個「後門」,等我哋可以唔洗用佢個臃腫嘅官方 App,而係直接用 WireGuard 官方 Client 嚟連線!

咁樣做有咩好處?等我同大家分析吓:

點解要用 WireGuard 官方 Client 代替 ProtonVPN App?

  • 直接選取特定地區(例如美國 USA)
雖然喺官方 App 入面免費用戶無得揀地區,但如果你登入 Proton 網頁版後台,喺產生 WireGuard 設定檔(Configuration File)嘅時候,佢係允許免費用戶指定國家甚至特定免費伺服器的!你只需要下載美國(USA)嘅設定檔匯入  WireGuard Client,連線時就必定係美國 IP,完美繞過官方 App 嘅隨機限制。
  • 安全、無後門、更乾淨
官方 ProtonVPN Client 雖然功能多,但背景跑緊唔少服務,仲有機會收集 telemetry(遙測數據)。而WireGuard官方 Client 係 100% 完全開源嘅,代碼極度精簡,經過全球無數資安專家審查,確保沒有任何後門,安全系數最高,用得最安心。
  • 親測:打破單一設備限制,多機同時在線!
官方宣稱免費用戶同時間只可以連一部機。但我親身測試過,只要你下載咗 WireGuard 設定檔(一部設備開一個),你可以將設定檔(甚至下載幾個唔同伺服器嘅設定檔)分發去你嘅 PC、手機、平板。同時連線完全無問題!完全無出現過「上一部機被踢出線」或者「唔俾連線」嘅情況,多台設備依然穩定上網,簡直係免費用戶嘅大福利!
  • 極致輕量、慳電、秒連線
WireGuard 係目前最先進、最輕巧嘅 VPN 協議。官方 App 每次連線都要轉圈圈等十幾秒,而 WireGuard Client 撳一下「Activate」,真係一秒即通,而且對系統資源同手機電池幾乎零負擔,完全唔會發熱、慳電好多。 

 實操教學:如何取得 USA 伺服器嘅 WireGuard 設定並連線? 

要搞掂呢個設定,其實非常之簡單:
  • 第一步:申請 Proton 帳號
如果你仲未有帳號,先去ProtonVPN 官網註冊一個免費帳號(註冊一個帳號就可以同時使用 ProtonMail、ProtonVPN 等服務)。

  •   第二步:去官網後台下載 WireGuard 設定檔
  1. 登入 Proton Account Dashboard
  2. 喺左邊 Menu 搵到 Downloads 進入。
  3. 向下碌,搵到 WireGuard configuration 部分。
  4. 進行以下設定:
    • Name:自己起個名,例如 Proton_US_Free。
    • Platform:選擇你使用嘅平台(例如 Windows / Android 等,呢個只係方便你分類,設定檔其實通用)。
    • Server:選擇 Free servers
    • Country:揀選 United States(或者荷蘭 Netherlands、日本 Japan)。
    • 揀好之後,你可以選擇 Create 產生,然後撳 Download 下載個 .conf 檔案。
溫馨提示:Proton 免費帳號最多可以同時建立 5 個 WireGuard 設定檔,如果要多過 5 個,只需要刪除舊有唔用嘅 Profile 再 Create 新嘅就得。另外,由於免費用戶極多,有時某個免費伺服器可能會因為高負載而變慢。如果發現連線卡頓,可以隨時上官網後台刪除舊 profile,再重新揀選另一個美國免費伺服器編號(例如選 US-FREE#102 等較低負載嘅 server)下載新 .conf 檔換上,咁就完美啦!
  • 第三步:下載安裝 WireGuard 官方 Client
WireGuard 官方下載頁面,根據你嘅平台下載安裝對應嘅官方 Client(支援 Windows, macOS, Android, iOS, Linux 等,極度推薦手機版,真係好輕量)。

  • 第四步:匯入設定檔並連線
    1. 打開 WireGuard Client。
    2. 點擊 Add Tunnel (新增隧道) -> Import tunnel(s) from file...。
    3. 選擇頭先下載嘅 .conf 檔案匯入。
    4. 撳一下 Activate (啟用),一秒之內就會成功連線! 
結語

經呢個方法設定完之後,以後不論係電腦定係手機,都可以一鍵直連美國嘅免費 VPN,唔洗再忍受官方 App 每次隨機亂分配地區嘅痛苦,連線速度快,仲可以幾部設備一齊用,安全又慳電。

茶包射了,簡單記錄於此,希望幫到有需要嘅朋友!

結案!

2017年11月24日星期五

為Android還原Wifi設定的終極方法

近日有朋友轉了新手機,我一如以往的幫忙由舊機過渡至新機。一直以來,Android系統舊機換新機是極度方便簡單,只需要在新機第一次設定時以相同的Google帳號登入,系統便會給你選擇是否由其他手機轉移資料至新機,所有應用程式及部份應用程式的資料、甚至wallpaper都會自動經雲端過渡至新機上,基本上只需處理whatsapp與wechat的資料轉換即可。

但不知道是Huawei EMUI的問題還是Android Oreo的變動問題,新機上所有wifi 設定一個也沒有給還原過來!在網上搜尋過一些手動處理 Android還原的方法,包括手動用bmgr (Android backup manager)和 adb backup都不見效,由於新舊機都沒有ROOT,所以直接抄 wpa_supplicant.conf這個方案亦不可行,舊機70多個wifi設定要手動逐個逐個重新設定實在不是辦法。

最後,唯有用一些時間,寫了個十分簡單的app,以讀取經 adb backup檔 extract出來的設定檔(extract 方法見 "How to extract, create or edit android adb backups")或是直接抄出來的wpa_supplicant.conf,自動化地在新機重新設定所有wifi網絡。Case closed!

既然app已寫好,雖然簡單,但亦發佈至Play Store,供有緣人發現及使用。

WifiConfigRestorer

2017年10月25日星期三

一次為國內版Samsung Galaxy S6 (SM-G9209) root機及安裝 Google Service過程

是咁的,話說有朋友有部國內版Samsung Galaxy S6 (SM-G9209),問我點解無Google Play Store,裝Apps好麻煩,可唔可以裝返Google Play Store

事前準備:
1. 要root/裝 Google Play Service,當然係先裝個 custom recovery。用開TWRP,當然係上TWRP網站下載對應型號的recovery

2. 喺Samsung機上改recovery,當然係要用Odin,所以亦上Odin網站下載了

3. Google Play Service安裝檔,當然係上OpenGApps下載。S6 CPU係ARM64,Android Version係6,唔想裝咁多嘢,所以揀nano variant

4. Root的部份,以往會用SuperSU,但今時今日識用梗係用Magisk,Open source得嚟仲可以自由隱藏root,唔洗root完連開個Pokemon Go都唔得

5. 要用Odin成功連接PC與S6,下載Samsung Android USB driver

萬事俱備(我以為係),開工。

過程:
1. 安裝 Samsung Android USB driver,關S6,按vol down+home+power進入download mode,連接PC,運行Odin,成功!

2.嘗試用Odin寫入TWRP recovery,出現"CROM locked"而失敗;上網搵到原來要上Samsung Apps下載一個叫CROM Service的App去unlock bootloader先;

3. Unlock了bootloader同入download mode,用Odin寫入TWRP recovery,成功!但reboot後發現recovery就置換回原本的;

4. 試了幾次都如是,所以先嘗試root了機先,由於無TWRP,所以Magisk亦裝不了,唯有用ChainFire的CF-Auto-Root,下載了相應型號的CF-Auto-Root,再用Odin寫入,成功了!

5. 因為始終想用Magisk,所以root了後,dump了boot partition出來,用Magisk Manager的Patch功能來改Boot partition,然後用SuperSU的unroot清除CF-Auto-Root,最後再用Odin寫入已Patch的Magisk Boot Partition,成功用Magisk root!

6. 在已root的情況下寫入TWRP不同version,但皆無法進入custom recovery,反反覆覆嘗試都失敗,唯有回復至原廠recovery;

7. 在沒有custom recovery的情況下,下載ChainFire的FlashFire app,嘗試安裝Google Play Service,但出現error說system partition不夠空間;

8. 下載所需空間更小的pico variant,再次嘗試,但都係出現system partition空間不足情況。翻查記錄檔,原來只差1xx KB左右的空間。上網找資料,原來可以用gapps-config檔可微調安裝的元件。

9. 以gapps-config排除了Google TTS元件,終於成功安裝Google Play Service。Reboot 後終於見到Google登入和Google Play Store

10. 但會每隔一段時間出現"Google Play服務已終止",查logcat說取不到location權限。最後進入應用程式,查看每一個與Google有關的應用,檢查權限,發現Google Play Service一個權限也沒被授予,設定完權限後,已再沒有"Google Play服務已終止",所有功能亦正常使用,成功了!

結案!

2017年2月6日星期一

Privacy Policy of "WifiDuck"

This Privacy Policy is meant to help you understand what data this app collects, why this app collects it and what this app does with it.

Information this app collects
"WifDuck" does NOT process or store any data on our servers.

Privacy Policy of "ContactSyncDuck for Facebook"

This Privacy Policy is meant to help you understand what data this app collects, why this app collects it and what this app does with it.

Information this app collects

"ContactSyncDuck for Facebook" DO NOT store any data on our servers.  NO data is processed and stored on our servers. NO device-specific information is collected and we DO NOT associate your device identifiers with the facebook id.

Why it is collected and how we use it

The facebook id is stored only on your device. This app use the facebook id to download the profile picture when this app runs on your device.

How the data is transmitted

The facebook id is transmitted to Facebook servers (not our servers) using encrypted https traffic. 

How to request data deletion

 Since we do not store any data on our servers. You need not request data deletion. You can delete the facebook id you entered in the note filed on your contacts whenever you want.

2017年1月9日星期一

Java Program存取使用 Let's encrypt證書的 SSL網站

為推動全網使用https,一群大機構贊助成立了 Let's encrypt為網站發出免費SSL證書。因為免費、安全、申請及更新全自動化等因素,可以預期越來越多網站會使用 Let's encrypt證書。

現時 Let's encrypt所發出的證書由 IdenTrust的DST Root CA X3作為根憑證,一般的較近代的系統及瀏覽器都已預設信任,認受性已很高。

不過,如果所使用的JDK版本較舊(Java 7 < 7u111, Java 8 < 8u101),而又有種種原因未能即時升級的話,在其運行的程式遇上 Let's encrypt的證書時便會發生錯誤:javax.net.ssl.SSLHandshakeException。

要解決的話,只需於 IdenTrust網站上下載 DST Root CA X3證書,匯入至有關 JDK的 cacerts檔案內便可:

1. 下載DST Root CA X3證書,儲存為檔案 DSTRootCAX3.pem,內容像這樣:
-----BEGIN CERTIFICATE-----
上述連結的下載內若
-----END CERTIFICATE-----

2. 以JDK內的 keytool程式匯入該證書至 cacerts內,例如:
/jrockit64_160_28/jre/bin/keytool -trustcacerts -keystore /jrockit64_160_28/jre/lib/security/cacerts -storepass changeit -noprompt -importcert -alias dstrootcax3 -file DSTRootCAX3.pem

當中:cacerts的檔案位置一般在以下地方,密碼為: changeit
{jdkroot}/jre/lib/security/cacerts

完成後,便不會發生 javax.net.ssl.SSLHandshakeException 錯誤了。

2015年6月17日星期三

同步Facebook頭像相片至電話聯絡人

電話嘅聯絡人可以存相片這個功能歷史攸久 ,即使以往嘅feature phone都已經有呢個功能。但相信一般人唔會逐個逐個為朋友影相再放入聯絡人,所以直至智能電話+Facebook的有機結合,電話聯絡人才會有較多機會有相片出現。

最初用HTC Sense嘅電話,入面我認為做得最好嘅就係聯絡人同Facebook嘅連結,因為一般聯絡人嘅名稱同Facebook friend嘅名稱唔相同,HTC Sense俾人可以手動連結,不單止咁,HTC Sense係會將有關的連結記錄(主要係facebook id)存儲喺相關聯絡人入面嘅備註欄位內。咁樣做嘅優點,就係即使你有日清除資料(如回復出廠設定)或換機(但只限同樣係HTC機),只要再同步,所有連結返晒嚟,唔洗再設定過!

後來轉了用非HTC Sense嘅電話,無咗呢個功能,但好在找到UberSync,識得認HTC Sense的記錄,非常好,一直用到今日。

但由於Facebook於1/5/2015開始強制使用新Graph API,而新的API限制程式取得Friend List,因此令市面上大部份使用Graph API同步Facebook頭像相片至電話聯絡人的Apps(如一直用開很好用的 UberSync)基本上變成無用,整個phonebook變回無相狀態。

後來發現,原來用facebook id下載用戶Facebook頭像相片係唔洗任何權限的,所以花咗啲時間,寫了ContactSyncDuck for Facebook 呢個App會讀取聯絡人內備註欄有facebook id的資料,再下載Facebook頭像相片至聯絡人。呢個App除了識讀HTC Sense所記下的連結記錄外,你亦可手動新增,格式為:<Facebook>id:facebookid</Facebook>

呢個App還有個好處,即使該人不是你的Facebook Friend,你照樣可以在備註欄新增該facebook id,一樣可以下載頭像相片。

至於點樣可以知道某Facebook朋友的facebook id呢?你可以開啟該人的Facebook page,然後用browser的檢視原始碼功能,搜尋profile id就可以搵到。但係簡單啲,可以用呢個網頁嘅功能去搵。

另外,如果該人更新了頭像相片,呢個App都會識得在下次同步時下載最新相片。

用咗之後,我個電話聯絡人終於回復番有相片嘅狀態啦!