前段時間有篇比較火的新聞毅臊,說的是女黑客破解了幾款共享單車的 app薄料,這次我也給大家?guī)硪徊恍⌒钠平饬耸忻嫔蟽煽钣盟{(lán)牙開鎖的共享單車的經(jīng)歷狂丝。
同學(xué)們救斑,我回來了童本。
上次有心研究了一下共享單車,說是有點創(chuàng)業(yè)的想法脸候。寫了一篇文章《共享單車上的智能鎖穷娱,做出來有多難?》記錄下心得和看法运沦,沒想到獲得了不少的關(guān)注泵额。既然大家都資瓷我,那我也不得不圍繞共享單車這個話題再更新一下携添,畢竟寫文章有人關(guān)注也是成就感滿滿的一件事梯刚。
藍(lán)牙解鎖的開鎖原理
我記得上篇文章中給大家介紹過各類共享單車的基本開鎖原理薪寓。有短信開鎖亡资、GPRS 流量開鎖、藍(lán)牙 + GPRS 二合一開鎖這幾種方式向叉,唯獨漏了一個單純使用藍(lán)牙的開鎖方式?jīng)]有介紹锥腻,而單純用藍(lán)牙開鎖的共享單車品牌,在市面上還是有幾款的母谎。
講述我如何破解之前瘦黑,我先來給大家說說共享單車單純只靠藍(lán)牙開鎖的開鎖原理。
手機(jī)掃碼后,服務(wù)器會通過流量4G網(wǎng)絡(luò)連接用戶手機(jī)幸斥,當(dāng)業(yè)務(wù)層校驗完畢匹摇,手機(jī)會下載服務(wù)器發(fā)過來的加密包,再將包通過藍(lán)牙發(fā)送到鎖中進(jìn)行解鎖甲葬。
說得容易理解一點廊勃,就是用戶的手機(jī)先發(fā)個請求開鎖的消息到服務(wù)器,服務(wù)器再把開鎖密碼發(fā)到手機(jī)经窖,手機(jī)用這個開鎖密碼通過手機(jī)藍(lán)牙坡垫,與鎖內(nèi)的藍(lán)牙配對后開鎖。整個過程里面画侣,用戶的手機(jī)充當(dāng)著一個中間人的角色冰悠,連接服務(wù)器與單車,單車鎖內(nèi)部是不會與服務(wù)器直接聯(lián)系的(廢話配乱,鎖內(nèi)只有藍(lán)牙怎么連得上服務(wù)器建立通訊)溉卓。
破解全過程
知道這個原理就可以開始我的破解表演了(??????)??。
首先我下載了市面上我知道的兩款只用藍(lán)牙開鎖的共享單車 APP搬泥,之后對其進(jìn)行破解的诵。破解第一步是反編譯應(yīng)用,靜態(tài)分析代碼佑钾,對關(guān)鍵函數(shù)進(jìn)行掛鉤動態(tài)分析流程西疤,關(guān)鍵是要看看它具體是怎樣進(jìn)行開鎖操作的。(破解過程就不能細(xì)說了休溶,我是在不傳播代赁、不利用漏洞的前提下破譯,反編譯有可能造成違法哦兽掰,同學(xué)們不要模仿)
最后發(fā)現(xiàn)一如之前的推測所料芭碍,單純使用藍(lán)牙的共享單車開鎖時,用戶的手機(jī)既要和服務(wù)器交互孽尽,又需要和鎖上的藍(lán)牙交互窖壕,這個時候破解思路就出來了:我可以按照整個開鎖邏輯流程,自己模擬服務(wù)器請求以及和鎖上的藍(lán)牙交互杉女。
破解X鳴單車
和服務(wù)器交互的主要目的是為了拿到一個 token瞻讽,這里可以簡單的理解為共享單車上每輛車的一個密碼鑰匙吧。手機(jī)獲得這個密碼之后用藍(lán)牙連接單車就可以完成開鎖熏挎。成功了之后速勇,我發(fā)現(xiàn)市面上的某一共享單車品牌X鳴,它三代之前的鎖的用的 token 每一輛車都相同坎拐。
所以烦磁,在獲得了車的密碼鑰匙后养匈,以后我就可以不通過服務(wù)器直接開鎖全部單車,而服務(wù)器根本不會知道我已經(jīng)解鎖了都伪。簡直了呕乎,跟 ofo 被知道了機(jī)械密碼可以無限次使用一樣。如果用 ofo 類比的話陨晶,X鳴的鎖相當(dāng)于所有車的密碼都一樣猬仁,只要知道一輛車的密碼就可以開所有車鎖。我是用一把“鑰匙”(一個 token)就可以開鎖所有這個品牌的單車珍逸。
如上圖所示逐虚,我先掃描附近的藍(lán)牙鎖聋溜,理論上可以把周圍的所有使用藍(lán)牙開鎖的單車都掃描出來谆膳,也可以手動結(jié)束掃描。掃描結(jié)束后點擊對設(shè)備進(jìn)行開鎖就可以了撮躁,不需要經(jīng)過它的服務(wù)器漱病。因為X鳴三代后開鎖的算法變了,所以我在應(yīng)用中增加掃描單車二維碼的功能诫龙,通過掃描來確定這臺車是第幾代扛施,根據(jù)單車不同的版本來確定開鎖算法開鎖歹袁。(說得比較復(fù)雜,總之就是通過破解開鎖算法注盈,X鳴所有的鎖我都能開)
關(guān)鍵是,因為所有的車都可以用一個 token 來開叙赚,所以我只要連接藍(lán)牙發(fā)送開鎖指令老客,十米內(nèi)的所有X鳴單車的鎖就全開了。震叮。胧砰。
破解X拜單車
首先這個X拜不是摩拜,是另一款以綠色為主題苇瓣、藍(lán)牙開鎖的單車尉间。
X拜單車與上面說的X鳴單車使用的一樣的鎖,原理也是一樣的击罪。手機(jī)掃碼后哲嘲,向服務(wù)器發(fā)起開鎖請求,然后手機(jī)作為中轉(zhuǎn)方把數(shù)據(jù)通過藍(lán)牙從服務(wù)器發(fā)往鎖媳禁,解鎖成功后撤蚊,鎖通過手機(jī)把數(shù)據(jù)返回給服務(wù)器。
但是這個品牌的單車開鎖方式稍稍提高了安全性损话,每一輛車的一個密碼不一樣侦啸,并且同一輛車開鎖前后的密碼也不一致槽唾,所以這個密碼生成算法是在服務(wù)端進(jìn)行的,客戶端不能知曉光涂,導(dǎo)致客戶端每次開鎖必須經(jīng)過服務(wù)器庞萍。
所以破解的關(guān)鍵在于我需要服務(wù)器給我發(fā)送開鎖的 token,又要讓服務(wù)器認(rèn)為我沒開單車達(dá)到破解(騎車不花錢)的目的忘闻。破解過程也很簡單钝计,我用手機(jī)向服務(wù)器發(fā)送一個開鎖請求,服務(wù)器發(fā)把電子密碼發(fā)過來齐佳,由手機(jī)藍(lán)牙發(fā)送開鎖指令到智能鎖私恬,這樣我已經(jīng)可以解鎖單車了。之后我故意把手機(jī)客戶端解鎖成功的消息丟掉炼吴,服務(wù)器收不到數(shù)據(jù)包本鸣,就會以為解鎖失敗,自然也不會扣費了硅蹦。開鎖的圖我就不貼了荣德,跟上面一樣。
為什么是藍(lán)牙鎖童芹?
或許大家會有疑問涮瞻,我為什么只破解藍(lán)牙鎖?原因很簡單假褪,因為它不安全署咽,容易被破解。我之前的文章提到過生音,智能鎖是共享單車的核心宁否,而單純用藍(lán)牙開鎖的共享單車品牌,只可以算是“偽智能”久锥。說白了家淤,不直接聯(lián)網(wǎng)的單車鎖根本不能做到智能化,也滿足不了大部分用戶的體驗瑟由,藍(lán)牙鎖就是如此絮重。寫這篇文章的目的也是告誡廣大有意創(chuàng)業(yè)共享單車的同學(xué)(比如我),單純用藍(lán)牙方式來開鎖的共享單車根本沒有出路歹苦,以下說說我自己的見解青伤。
藍(lán)牙鎖無力駕馭共享單車的運營
1.藍(lán)牙鎖不安全
這個理由非常明顯殴瘦,因為我都已經(jīng)破解了嘛狠角。這里強(qiáng)力吐槽下已經(jīng)投放落地的幾款共享單車,一個 token 就能輕松破譯解鎖蚪腋,本質(zhì)上與機(jī)械鎖沒任何區(qū)別丰歌,只不過破解的方式更高級一點而已姨蟋。如果用戶愿意,大可以用我剛剛的方法去解鎖立帖⊙廴埽可能會有人說:我沒有你的技術(shù)我破解不了啊。嘻嘻晓勇,其實破解那個原理很簡單堂飞,普通用戶也輕松可以做到。
只要在開鎖之后馬上關(guān)掉藍(lán)牙绑咱,讓服務(wù)器獲取不到開鎖信息绰筛,就能一次開鎖無限使用。反正單車的定位信息也是通過用戶手機(jī)發(fā)送的描融,服務(wù)器最后連誰開的鎖铝噩,車子在哪都不知道。
2.藍(lán)牙鎖沒有定位
藍(lán)牙鎖的定位是通過手機(jī)發(fā)送車輛位置的稼稿,自身并與服務(wù)器建立連接薄榛。沒有GPS跟蹤讳窟,無法精準(zhǔn)定位維修車輛让歼。跟我們吐槽很多次用機(jī)械鎖的 ofo 一模一樣,沒有定位有什么劣勢我已經(jīng)不想在復(fù)述了丽啡,你們可以參考下每天多少小黃車被丟棄谋右,被盜。
這也是我破解藍(lán)牙鎖的原因之一补箍,如果是帶定位的單車改执,我破解之后服務(wù)器獲取車子定位就知道被破解了,而現(xiàn)在它被破解之后坑雅,想找回來已經(jīng)是不可能了辈挂。藍(lán)牙單車陷入了跟機(jī)械鎖單車的僵局,連單車被盜裹粤、丟失都不知道终蒂,運維成本也相應(yīng)增加,算什么智能遥诉。
藍(lán)牙鎖極度影響用戶體驗
眾所周知拇泣,關(guān)于共享單車的用戶體驗體現(xiàn)在兩個方面:一是開鎖時間、二是舒適程度矮锈。單車騎起來的舒適程度見仁見智霉翔,我不作探究,主要是單車的開鎖時間的問題苞笨。
我的城市里有多款共享單車品牌债朵,樓下也是慢慢排滿了各種顏色的單車子眶。我觀察到,每天的下班時間序芦,橙色的(摩拜)和黃色的(ofo)都不見了壹店,只剩下那兩款用藍(lán)牙鎖的共享單車還剩一整排都沒人騎。我開始覺得奇怪芝加,共享單車用戶忠誠度不會很高硅卢,而大家都有騎車的需求,為什么沒人騎呢藏杖?后來我想到了将塑,用戶不是不想騎,是騎不了蝌麸,沒有比這個這更坑爹的了点寥。
原因是除去蘋果,不同的手機(jī)廠商的藍(lán)牙芯片版本兼容性太差了来吩。比如說我用的華為手機(jī)上的藍(lán)牙能配對成功敢辩,但你用小米就不一定了。現(xiàn)在市場上還有這么多廠商牌子的安卓手機(jī)弟疆,因為采購的藍(lán)牙芯片差異太大戚长,有時候同樣是一個牌子的手機(jī),不同型號都有兼容問題怠苔。(不是隨口亂說的同廉,我借了同事、家人共6臺的安卓手機(jī)測試樓下的X鳴單車柑司、X拜單車迫肖,只有兩個開鎖成功)
所以別說照顧體驗縮短開鎖時間了,現(xiàn)在要求已經(jīng)降到不管多少時間攒驰,我只要別開鎖失敗就好了蟆湖。而單純用藍(lán)牙鎖的共享單車連這一點都做不到,何來用戶忠誠玻粪?用戶很可能試過一兩次失敗后就退押金隅津,以后都不騎了,這樣的開鎖成功率無疑是走了一條死路奶段。
藍(lán)牙鎖單車缺少持續(xù)運營的概念
我把只靠藍(lán)牙開鎖的共享單車吐槽成這樣饥瓷,為什么還是有品牌用呢?原因有兩個:
1.藍(lán)牙鎖開鎖耗電極少
2.藍(lán)牙鎖成本便宜
不知道大家發(fā)現(xiàn)沒有痹籍,我提到的那兩個品牌的單車根本沒有我上次介紹的共享單車特有的充電方式(太陽能充電呢铆、騎車發(fā)電),原因是藍(lán)牙鎖的功耗極低蹲缠,根本沒考慮過充電的問題棺克。
藍(lán)牙鎖在待機(jī)情況下悠垛,功耗是微安級別的,選擇使用這樣的開鎖方式娜谊,共享單車的品牌運營商肯定考慮到這點:藍(lán)牙鎖比起 GPRS 鎖便宜不少(大概100~200塊)确买,而且 GPRS 鎖還需要不斷的充電,而我用藍(lán)牙鎖不用充電就能用個好幾年纱皆,連充電裝置都省了湾趾,多好啊∨刹荩可惜現(xiàn)實并不是這一回事搀缠。
上面已經(jīng)說過了,沒有充電方式近迁、沒有定位的概念艺普、單車不能直接連接云端服務(wù)器是遲早要完的(如果他們想的是看市場的形勢,先搶占市場再等著被收購的套路當(dāng)我沒說)鉴竭。車子的位置不知道代表著一旦丟車就永遠(yuǎn)找不回來了歧譬,車子一旦被盜也永遠(yuǎn)不知道。單車的投放和維修不能及時掌控搏存,線下維護(hù)成本巨高無比瑰步,走的運營套路跟機(jī)械鎖相差無幾。
正確的運營姿勢
以藍(lán)牙開鎖的共享單車運營時間的拉長祭埂,劣勢會越發(fā)明顯面氓,甚至?xí)サ綗o法運營的地步兵钮。一旦車丟了蛆橡,或者車被破解了,或者過兩年后沒電了掘譬,那是不是徹底放棄了原來投放的車泰演?不運營了嗎?我們知道 ofo就是這樣考慮的葱轩,車丟了我就不要了睦焕,反正成本低。但你要知道靴拱,藍(lán)牙鎖比起機(jī)械鎖成本高了十倍啊垃喊,要不就直接上機(jī)械鎖,要不就想辦法在藍(lán)牙開鎖的基礎(chǔ)上加上 GPRS 模塊才是正解袜炕。
之前我也幻想過本谜,如果想快速創(chuàng)建品牌運營運營共享單車,除去考慮開鎖時間短偎窘、易用性佳等必要的用戶體驗外乌助,還需要在車輛的安全性(防盜防丟失防破解)和單車鎖的成本之間作一個權(quán)衡溜在。
單車藍(lán)牙鎖的確更便宜,兩年內(nèi)無需充電的特點也縮減了硬件成本他托,但說到底并不安全掖肋,沒有定位也增加了運營成本。最好的解決方法應(yīng)該是在藍(lán)牙鎖中添加 GPRS 模塊赏参,用藍(lán)牙作為主要開鎖方式志笼,一旦藍(lán)牙失效或失去服務(wù)器信息反饋,鎖中的 GPRS 被喚醒把篓,讓鎖能與服務(wù)器直接建立連接籽腕。這樣既保證了安全性,減低開鎖失敗概率纸俭,也盡可能省電和節(jié)約硬件成本皇耗。
目前為止我還是贊同 云巴 這家的做法(估計有人又會說我打廣告寫軟文了),至于其他品牌方案揍很,還需要更深入的考察和了解郎楼。