WiFi 萬能鑰匙是怎麼收集數據的?

看大家都說是來自分享,可是最初總要有一些基礎數據啊,難道都是線下員工一個一個找出來的??那不得累屎了。。


WiFi萬能鑰匙的基礎功能並不是採用某些答案所述「密碼庫窮舉(逐個嘗試)暴力破解」的方式獲得正確密碼,而是通過用戶上傳分享的熱點(主動或「被動」)到後台伺服器的方式收集、積累數據。後台伺服器維護者一份熱點資料庫,其中包含著熱點名稱(或者用來唯一標識的MAC地址)以及與其對應的密碼字元串。查詢密碼時,用戶將周圍掃描到的陌生熱點信息上傳,伺服器後台查詢到相對應的密碼(如果分享過的話)後返回給APP供用戶選擇使用。不過WiFi共享鑰匙有一個「深度解鎖」的功能與「暴力破解」沾點邊,但它也僅僅是使用幾個常見的較為簡單的密碼來嘗試連接熱點,不能稱得上算「密碼庫窮舉」。

現在WiFi萬能鑰匙充實密碼庫的方式主要是用戶主動分享,畢竟用戶基數變大了,但在以前可不是這樣。早期的WiFi萬能鑰匙得到熱點密碼數據的手段並不高明,甚至可以說是不光彩的。

我們知道Android系統中有個文件是用來存儲WiFi密碼的,那就是/data/misc/wifi/wpa_supplicant.conf

它的內容應該是這個樣子:

此文件只有當獲得root許可權後才能訪問。

圖上顯示有兩個WiFi熱點「network」,ssid是熱點名稱,psk是密碼。上面那個是我的私人熱點,另一個「Bjume」則是某商家提供的免費熱點。請注意,其中的密碼是明文顯示的「bjume2013」。

得到了這個文件,或者能看到這個文件的內容,就意味著能得到這台手機登錄過的所有WiFi熱點,以及它們的明文密碼!

早期版本的WiFi萬能鑰匙會向用戶申請root許可權:

雖然我不是專職的Android開發者,但我畢竟也開發過一些自用的小工具,對系統提供的介面和許可權還是略知一二的。WiFi萬能鑰匙的所有業務功能,包括掃描周邊的WiFi信號、通過網路查詢對應WiFi信號的密碼、輸入密碼登錄WiFi、通過網路將用戶在應用中輸入的密碼上傳到伺服器,這些都可以使用基本的系統API實現,不知道它為甚麽要申請root許可權。難道是為了訪問wpa_supplicant.conf文件?單從這一點上作惡意揣測似乎不太妥當,畢竟在android上很多別的行為也需要root(雖然我實在不知道WiFi萬能鑰匙哪個功能有這個需求),那麼接下來的證據就無法迴避了。

我對com.snda.wifilocating.apk文件進行了反編譯,在得到的很多smali腳本中,有這麼一個很有意思:

/home/feng/documents/com.snda.wifilocating.apk/smali/com/snda/wifilocating/a/i.smali:
1049 invoke-direct {v2, v3}, Ljava/io/DataOutputStream;-&>&(Ljava/io/OutputStream;)V
1050
1051: const-string v3, "cat /data/misc/wifi/wpa_supplicant.conf&>/data/data/com.snda.wifilocating/wifi.conf
"
1052
1053 invoke-virtual {v2, v3}, Ljava/io/DataOutputStream;-&>writeBytes(Ljava/lang/String;)V

1051行,WiFi萬能鑰匙不僅訪問了wpa_supplicant.conf這個文件,還把其中的內容複製了出來,放到了自己的緩存文件夾里。

我實在想不通WiFi萬能鑰匙的哪個功能需要使用用戶登錄過的所有熱點密碼(注意1.0這個版本還沒有熱點備份功能),因此唯一合理的推測便產生了!當然這種推測仍然沒有十足的依據,但事實不是已經很清楚了么?沒有依據的指控叫做誹謗,為了以免有「誹謗」的嫌疑,避免產生無謂的糾紛,結論我就不點破了。

望團隊好自為之。


1、用戶主動輸入的(非root機器)

2、把用戶存下來的密碼主動上傳(root機器)

3、利用常用的密碼錶,暴力破解

4、人肉掃街


咳咳……這個問題的答案其實我覺得在

相比 iOS,Android 最不能忍受的缺點有哪些? 里好像剛好提到過了

adb shell su cat /data/misc/wifi/wpa_supplicant.conf

還是那句話,Android用戶不要隨便root機器。

至於IOS的話我確實不知道了。

另外,對於無法拿到的情況,也不會真的窮舉去暴力破解,而是用各種常用密碼去碰撞。比如CSDN之類的被拖庫後拿到的用戶密碼,這樣碰撞去試成功率是非常非常高的。


強烈不建議各位創業者模仿這個Wi-Fi分享做法做一個「銀行卡萬能鑰匙」之類的玩意,伺服器主動記憶別人的卡號、密碼;立即實現有錢同用共產豬義社會!


樓上說的是很大一部分,我這裡補充一下另一部分。

WiFi萬能鑰匙1.0時代

只是手法類型分類,並非與其版本掛鉤

主「破解」功能,就是常用的多位密碼窮舉

每個WiFi連一遍,總能找到12345678這樣的弱密碼。

於是,破解+分享就成了團隊的主要手段。

*(1.5)時代

記憶中WiFi萬能鑰匙有過那麼一個用新密碼換已有密碼使用權這樣的事情

2.0時代

單純的弱密碼破解並沒太大作用,而願意分享的用戶並不多,於是默認/主動「分享」,就被執行。

3.0時代

隨著萬能鑰匙做大,單純的破解已然是踩紅線的行為了,這時團隊弱化了破解功能,碼庫全了嗎,當然主打分享密碼,當然,默認自家WiFi主動分享選項是必不可少的。

4.0時代

為寫這一部分主動去下了個最新版逛了一圈

作為工具類應用,為了避免用完即刪的窘狀,鑰匙把諮詢與安全部分放進了軟體里,密碼數量已經不重要,面對投訴團隊出了撤銷分享功能,為了維持碼庫一些門坎少不了。有防同類競爭的因素,團隊又出了安全檢測部分,對各類防護手段都有所涉及,看到那麼多防護手段,聯繫到前幾年爆庫事件頻發,對之前團隊發展不免有了些猜想.....

鑒於本文極不負責任

匿,侵刪。


僅以用戶角度來說來說,下載安裝wifi萬能鑰匙打開就會有自動分享wifi密碼的選項,該選項需要用戶手動進行取消勾選。

看見周圍很多朋友看這些軟體宣傳動畫都是快速滑動,然後點確定進入,個人認為這可能是許多密碼共享的來源。


發一個簡單易懂的圖。


如果是WPA的加密模式,靠空口的暴力破解基本上是很難做到的,做到了也沒用,馬上還會重新協商密鑰。

我覺得如果前期是這樣做的,確實比較噁心,雖然三星靠雙卡雙待在中國貌似曾領先蘋果,但是我覺得還是有必要雙槍,安卓一個蘋果一個。

仔細想想確實沒有什麼更好的辦法,MAC+密碼是一種方法,另外的方法就是定期更換密碼了。

還有個方法是訪客網路,我家的apple extreme這個功能,啊,我上次忘記開我家的訪客網路,而是給別人了我家網路的SSID了。


知乎有很多人不過是一些利益至上的人。我家50的寬頻,我知道別人再用我家網,我不反對因為,把自己用不了剩餘價值給別用。請問你們在介紹別人的好處時,你們可想過這一點。


應該是技術針對分享的熱點做技術處理,如果沒有分享熱點,市場上很多同類軟體都不能破譯的。wifi萬能通也是需要用戶成功了解熱點才能顯示密碼,分享密碼。這一技術主要彌補目前很多手機了解網路後不顯示密碼的缺點。


推薦閱讀:

產品經理遇到最頭疼的產品設計問題是什麼?是怎麼解決的?
互聯網公司都要成熟的程序員,那半路出家的怎麼活?
互聯網網站應該如何存儲密碼?
大數據是什麼意思?
做網上校園零食店,如何能夠儘快的搶佔市場?

TAG:互聯網 | 移動互聯網 | 產品運營 | WiFi萬能鑰匙 |