很久以前做了一個項目:需求是仿照"WiFi萬能鑰匙"做一個能一鍵上網(wǎng)借杰,這個功能提出的時候就被推翻了原因大家都知道:蘋果是不允許訪問到Wi-Fi列表的进泼,我們想在App的內(nèi)部拿到Wi-Fi的列表然后點擊某個Wi-Fi進行驗證上網(wǎng)(借助于私有的API但不能上線)那是不可能的,那Wi-Fi萬能鑰匙是怎么做到的呢乳绕?下面做一下猜測:
WiFi萬能鑰匙設(shè)計思路(iOS)
蘋果不提供獲取附近的Wi-Fi列表(Wi-Fi命和SSID簡單的信息提高)還有就是獲取安裝該軟件用戶連接過的WiFi的密碼洋措,這是WiFi萬能鑰匙需要攻克的第一個難題,解決的辦法那就是有一個通過蜘蛛網(wǎng)的方式收集用戶連接過的Wi-Fi信息济蝉,拿到這些信息就可以進行數(shù)據(jù)的匹配處理畢竟Wi-Fi這些信息一旦在安裝的時候設(shè)定好在一段時間內(nèi)用戶修改的很少。
獲取附近的Wi-Fi信息
1.定位查詢和收集
打開軟件的時候王滤,你應(yīng)該看到了它會向你申請「獲取位置信息」的請求,確定定位后就會把位置信息發(fā)送給萬能鑰匙的云端進行查找Wi-Fi信息和密碼的匹配淑仆。
那問題來了一開始的時候萬能鑰匙怎么會有你當前位置的Wi-Fi信息和密碼呢哥力?這個問題我們談到首先Android版的萬能鑰匙了。萬能鑰匙的Android版本比iOS版本出來的時間應(yīng)該早一年多左右,據(jù)萬能鑰匙說是蘋果的限制需要做技術(shù)的攻克寞射,據(jù)我個人猜測他們的技術(shù)人員應(yīng)該從開始就知道用建立龐大的數(shù)據(jù)庫進行匹配的思想了只是缺少數(shù)據(jù)锌钮,那問題就是收集了。
對于Android版本的發(fā)布對于極度想上網(wǎng)的網(wǎng)民絕對如同甘露梁丘,一時間會風靡這樣用戶量就會指數(shù)上升了,而Android系統(tǒng)的手機無線賬號數(shù)據(jù)是儲存在一個文件里的掏觉,那就是 /data/misc/wifi/wpa_supplicant.conf ,這個是系統(tǒng)文件澳腹,權(quán)限不夠高是無法訪問的杨何,而這個文件極其重要,得到了這個文件危虱,或者能看到這個文件的內(nèi)容,就意味著能得到這臺手機登錄過的所有 Wi-Fi 熱點埃跷,以及它們的明文密碼!Wi-Fi 萬能鑰匙就是需要這個文件里的內(nèi)容。所以如果用戶root了自己的手機集畅,軟件可以隨意獲取缅糟。這樣從一個用戶身上可以挖到至少一個WiFi id和WiFi密碼。
截圖掃描,暴力破解窗宦,撞庫分析
那對于沒有打開定位服務(wù)或者定位不準查不到的咋辦二鳄?Wi-Fi萬能鑰匙也提供了一種機制那就是上傳Wi-Fi列表的截圖這樣通過掃描能更加提高匹配的準確度媒怯,撞庫分析拿到數(shù)據(jù),自然少不了對數(shù)據(jù)進行統(tǒng)計和分析扇苞,拿到一些常用的弱口令,如八個8脖苏、四個123定踱、八個0等,了解路由設(shè)置和WiFi設(shè)置的人本來就不多崖媚,很多上門服務(wù)的師傅一般就將密碼設(shè)置成簡單好記的,這也很大程度提高了撞庫的成功率畅哑。對于拿不到密碼的WiFi肴楷,軟件毫無疑問會作出這種嘗試敢课,成本低、成功率還高濒募。還有一種情況就是云端查詢不到怎么辦很簡單暴力破解.
我的一鍵上網(wǎng)
通過對Wi-Fi萬能鑰匙的分析(應(yīng)該是正確的哈)和參考阿里一個叫做“喵街”的APP我的一鍵上網(wǎng)功能大概如下:
首先我是做外包的客戶是不能建一個像Wi-Fi萬能鑰匙那樣一個強大的后臺的(一些算法我們的后臺也是沒能力和時間去設(shè)計研究的)所以我們簡化這些步驟圾结。
介紹一下我的項目需求:
客戶想達到在他們在和他們合作的商場投放一種自定義協(xié)議的Wi-Fi發(fā)射器,但只有注冊這款A(yù)PP的用戶通過驗證登陸才可以使用筝野。
?在商場肯定要考慮到各個地方,一種我們需要選擇定位服務(wù)挥唠,另一種把商城的ID發(fā)給后臺進行查詢焕议,為了簡單我們選擇了第二種當用戶選擇某個商場的時候(商場是分樓層的為了提高信號需要分別投放Wi-Fi發(fā)射器)在列表的時候我們也會呈現(xiàn)這個商場的多個合作的商家這樣我們把商場的ID和商家的ID發(fā)給后臺就可以查詢到Wi-Fi的名稱當用戶點擊一鍵上網(wǎng)的時候就可以讓他手動的切換到設(shè)置頁面鏈接上這個Wi-Fi
鏈接上只是一個Wi-Fi熱點上網(wǎng)還是需要驗證的下面我分享我門驗證的幾個步驟:
1.獲取當前路由器的網(wǎng)關(guān)
2.拿到這個網(wǎng)關(guān)我們和這個路由器的網(wǎng)關(guān)進行異步請求
3.2中我們會得到一個key然后我們通過這個key進行MD5加密驗證成功就可以上網(wǎng)了(是不是很簡單)