前段時間有篇比較火的新聞,說的是女黑客破解了幾款共享單車的 app,這次我也給大家帶來一不小心破解了市面上兩款用藍牙開鎖的共享單車的經歷。
同學們,我回來了。
上次有心研究了一下共享單車,說是有點創業的想法。寫了一篇文章《共享單車上的智能鎖,做出來有多難?》記錄下心得和看法,沒想到獲得了不少的關注。既然大家都資瓷我,那我也不得不圍繞共享單車這個話題再更新一下,畢竟寫文章有人關注也是成就感滿滿的一件事。
藍牙解鎖的開鎖原理
我記得上篇文章中給大家介紹過各類共享單車的基本開鎖原理。有短信開鎖、GPRS 流量開鎖、藍牙 + GPRS 二合一開鎖這幾種方式,唯獨漏了一個單純使用藍牙的開鎖方式沒有介紹,而單純用藍牙開鎖的共享單車品牌,在市面上還是有幾款的。
講述我如何破解之前,我先來給大家說說共享單車單純只靠藍牙開鎖的開鎖原理。
手機掃碼后,服務器會通過流量4G網絡連接用戶手機,當業務層校驗完畢,手機會下載服務器發過來的加密包,再將包通過藍牙發送到鎖中進行解鎖。
說得容易理解一點,就是用戶的手機先發個請求開鎖的消息到服務器,服務器再把開鎖密碼發到手機,手機用這個開鎖密碼通過手機藍牙,與鎖內的藍牙配對后開鎖。整個過程里面,用戶的手機充當著一個中間人的角色,連接服務器與單車,單車鎖內部是不會與服務器直接聯系的(廢話,鎖內只有藍牙怎么連得上服務器建立通訊)。
破解全過程
知道這個原理就可以開始我的破解表演了(??????)??。
首先我下載了市面上我知道的兩款只用藍牙開鎖的共享單車 APP,之后對其進行破解。破解第一步是反編譯應用,靜態分析代碼,對關鍵函數進行掛鉤動態分析流程,關鍵是要看看它具體是怎樣進行開鎖操作的。(破解過程就不能細說了,我是在不傳播、不利用漏洞的前提下破譯,反編譯有可能造成違法哦,同學們不要模仿)
最后發現一如之前的推測所料,單純使用藍牙的共享單車開鎖時,用戶的手機既要和服務器交互,又需要和鎖上的藍牙交互,這個時候破解思路就出來了:我可以按照整個開鎖邏輯流程,自己模擬服務器請求以及和鎖上的藍牙交互。
破解X鳴單車
和服務器交互的主要目的是為了拿到一個 token,這里可以簡單的理解為共享單車上每輛車的一個密碼鑰匙吧。手機獲得這個密碼之后用藍牙連接單車就可以完成開鎖。成功了之后,我發現市面上的某一共享單車品牌X鳴,它三代之前的鎖的用的 token 每一輛車都相同。
所以,在獲得了車的密碼鑰匙后,以后我就可以不通過服務器直接開鎖全部單車,而服務器根本不會知道我已經解鎖了。簡直了,跟 ofo 被知道了機械密碼可以無限次使用一樣。如果用 ofo 類比的話,X鳴的鎖相當于所有車的密碼都一樣,只要知道一輛車的密碼就可以開所有車鎖。我是用一把“鑰匙”(一個 token)就可以開鎖所有這個品牌的單車。
如上圖所示,我先掃描附近的藍牙鎖,理論上可以把周圍的所有使用藍牙開鎖的單車都掃描出來,也可以手動結束掃描。掃描結束后點擊對設備進行開鎖就可以了,不需要經過它的服務器。因為X鳴三代后開鎖的算法變了,所以我在應用中增加掃描單車二維碼的功能,通過掃描來確定這臺車是第幾代,根據單車不同的版本來確定開鎖算法開鎖。(說得比較復雜,總之就是通過破解開鎖算法,X鳴所有的鎖我都能開)
關鍵是,因為所有的車都可以用一個 token 來開,所以我只要連接藍牙發送開鎖指令,十米內的所有X鳴單車的鎖就全開了。。。
破解X拜單車
首先這個X拜不是摩拜,是另一款以綠色為主題、藍牙開鎖的單車。
X拜單車與上面說的X鳴單車使用的一樣的鎖,原理也是一樣的。手機掃碼后,向服務器發起開鎖請求,然后手機作為中轉方把數據通過藍牙從服務器發往鎖,解鎖成功后,鎖通過手機把數據返回給服務器。
但是這個品牌的單車開鎖方式稍稍提高了安全性,每一輛車的一個密碼不一樣,并且同一輛車開鎖前后的密碼也不一致,所以這個密碼生成算法是在服務端進行的,客戶端不能知曉,導致客戶端每次開鎖必須經過服務器。
所以破解的關鍵在于我需要服務器給我發送開鎖的 token,又要讓服務器認為我沒開單車達到破解(騎車不花錢)的目的。破解過程也很簡單,我用手機向服務器發送一個開鎖請求,服務器發把電子密碼發過來,由手機藍牙發送開鎖指令到智能鎖,這樣我已經可以解鎖單車了。之后我故意把手機客戶端解鎖成功的消息丟掉,服務器收不到數據包,就會以為解鎖失敗,自然也不會扣費了。開鎖的圖我就不貼了,跟上面一樣。
為什么是藍牙鎖?
或許大家會有疑問,我為什么只破解藍牙鎖?原因很簡單,因為它不安全,容易被破解。我之前的文章提到過,智能鎖是共享單車的核心,而單純用藍牙開鎖的共享單車品牌,只可以算是“偽智能”。說白了,不直接聯網的單車鎖根本不能做到智能化,也滿足不了大部分用戶的體驗,藍牙鎖就是如此。寫這篇文章的目的也是告誡廣大有意創業共享單車的同學(比如我),單純用藍牙方式來開鎖的共享單車根本沒有出路,以下說說我自己的見解。
藍牙鎖無力駕馭共享單車的運營
1.藍牙鎖不安全
這個理由非常明顯,因為我都已經破解了嘛。這里強力吐槽下已經投放落地的幾款共享單車,一個 token 就能輕松破譯解鎖,本質上與機械鎖沒任何區別,只不過破解的方式更高級一點而已。如果用戶愿意,大可以用我剛剛的方法去解鎖。可能會有人說:我沒有你的技術我破解不了啊。嘻嘻,其實破解那個原理很簡單,普通用戶也輕松可以做到。
只要在開鎖之后馬上關掉藍牙,讓服務器獲取不到開鎖信息,就能一次開鎖無限使用。反正單車的定位信息也是通過用戶手機發送的,服務器最后連誰開的鎖,車子在哪都不知道。
2.藍牙鎖沒有定位
藍牙鎖的定位是通過手機發送車輛位置的,自身并與服務器建立連接。沒有GPS跟蹤,無法精準定位維修車輛。跟我們吐槽很多次用機械鎖的 ofo 一模一樣,沒有定位有什么劣勢我已經不想在復述了,你們可以參考下每天多少小黃車被丟棄,被盜。
這也是我破解藍牙鎖的原因之一,如果是帶定位的單車,我破解之后服務器獲取車子定位就知道被破解了,而現在它被破解之后,想找回來已經是不可能了。藍牙單車陷入了跟機械鎖單車的僵局,連單車被盜、丟失都不知道,運維成本也相應增加,算什么智能。
藍牙鎖極度影響用戶體驗
眾所周知,關于共享單車的用戶體驗體現在兩個方面:一是開鎖時間、二是舒適程度。單車騎起來的舒適程度見仁見智,我不作探究,主要是單車的開鎖時間的問題。
我的城市里有多款共享單車品牌,樓下也是慢慢排滿了各種顏色的單車。我觀察到,每天的下班時間,橙色的(摩拜)和黃色的(ofo)都不見了,只剩下那兩款用藍牙鎖的共享單車還剩一整排都沒人騎。我開始覺得奇怪,共享單車用戶忠誠度不會很高,而大家都有騎車的需求,為什么沒人騎呢?后來我想到了,用戶不是不想騎,是騎不了,沒有比這個這更坑爹的了。
原因是除去蘋果,不同的手機廠商的藍牙芯片版本兼容性太差了。比如說我用的華為手機上的藍牙能配對成功,但你用小米就不一定了。現在市場上還有這么多廠商牌子的安卓手機,因為采購的藍牙芯片差異太大,有時候同樣是一個牌子的手機,不同型號都有兼容問題。(不是隨口亂說的,我借了同事、家人共6臺的安卓手機測試樓下的X鳴單車、X拜單車,只有兩個開鎖成功)
所以別說照顧體驗縮短開鎖時間了,現在要求已經降到不管多少時間,我只要別開鎖失敗就好了。而單純用藍牙鎖的共享單車連這一點都做不到,何來用戶忠誠?用戶很可能試過一兩次失敗后就退押金,以后都不騎了,這樣的開鎖成功率無疑是走了一條死路。
藍牙鎖單車缺少持續運營的概念
我把只靠藍牙開鎖的共享單車吐槽成這樣,為什么還是有品牌用呢?原因有兩個:
1.藍牙鎖開鎖耗電極少
2.藍牙鎖成本便宜
不知道大家發現沒有,我提到的那兩個品牌的單車根本沒有我上次介紹的共享單車特有的充電方式(太陽能充電、騎車發電),原因是藍牙鎖的功耗極低,根本沒考慮過充電的問題。
藍牙鎖在待機情況下,功耗是微安級別的,選擇使用這樣的開鎖方式,共享單車的品牌運營商肯定考慮到這點:藍牙鎖比起 GPRS 鎖便宜不少(大概100~200塊),而且 GPRS 鎖還需要不斷的充電,而我用藍牙鎖不用充電就能用個好幾年,連充電裝置都省了,多好啊。可惜現實并不是這一回事。
上面已經說過了,沒有充電方式、沒有定位的概念、單車不能直接連接云端服務器是遲早要完的(如果他們想的是看市場的形勢,先搶占市場再等著被收購的套路當我沒說)。車子的位置不知道代表著一旦丟車就永遠找不回來了,車子一旦被盜也永遠不知道。單車的投放和維修不能及時掌控,線下維護成本巨高無比,走的運營套路跟機械鎖相差無幾。
正確的運營姿勢
以藍牙開鎖的共享單車運營時間的拉長,劣勢會越發明顯,甚至會去到無法運營的地步。一旦車丟了,或者車被破解了,或者過兩年后沒電了,那是不是徹底放棄了原來投放的車?不運營了嗎?我們知道 ofo就是這樣考慮的,車丟了我就不要了,反正成本低。但你要知道,藍牙鎖比起機械鎖成本高了十倍啊,要不就直接上機械鎖,要不就想辦法在藍牙開鎖的基礎上加上 GPRS 模塊才是正解。
之前我也幻想過,如果想快速創建品牌運營運營共享單車,除去考慮開鎖時間短、易用性佳等必要的用戶體驗外,還需要在車輛的安全性(防盜防丟失防破解)和單車鎖的成本之間作一個權衡。
單車藍牙鎖的確更便宜,兩年內無需充電的特點也縮減了硬件成本,但說到底并不安全,沒有定位也增加了運營成本。最好的解決方法應該是在藍牙鎖中添加 GPRS 模塊,用藍牙作為主要開鎖方式,一旦藍牙失效或失去服務器信息反饋,鎖中的 GPRS 被喚醒,讓鎖能與服務器直接建立連接。這樣既保證了安全性,減低開鎖失敗概率,也盡可能省電和節約硬件成本。
目前為止我還是贊同 云巴 這家的做法(估計有人又會說我打廣告寫軟文了),至于其他品牌方案,還需要更深入的考察和了解。