如何使用WhatsApp收集大量數據附腳本
如果你想要拿到所有WhatsApp用戶的手機號碼、頭像、以及狀態信息,那麼我告訴你,這其實是一件非常簡單的事情,而且這些用戶甚至都不需要將你添加到他們的通訊錄裡面。
大概在幾年之前,WhatsApp開始允許我們在Web瀏覽器中使用WhatsApp了。這是一種提升用戶體驗度的絕佳方法,因為與那手機屏幕里還沒巴掌大的九宮格鍵盤相比,使用鍵盤來輸入信息會更加的方便,而且複製粘貼或者添加附件也非常的簡單。雖然優點如此之多,但缺點也肯定會有。壞消息就是,從技術角度出發,我們將有可能利用WhatsApp的Web介面來創建一個龐大的WhatsApp用戶資料庫。需要注意的是,可能只有一小部分用戶不會受到影響:即那些沒有修改隱私設置的用戶(但WhatsApp並不鼓勵這種不修改隱私設置的行為)。接下來,我會給大家演示如何利用WhatsApp的API介面來收集大量有趣的用戶信息。
簡單介紹
Web版WhatsApp需要通過用戶的手機號來與WhatsApp伺服器進行連接。簡而言之,也就是瀏覽器只需要根據一個特定的手機號就能讓後台伺服器返回所有與該手機號有關的信息。可能返回的信息如下:
用戶頭像;
與用戶狀態相關的文本信息,例如「嗨,我正在使用WhatsApp」等等;
用戶當前的在線/離線狀態;
我們發現,上述這些信息是可以通過手機號來請求獲取的。也就是說,這個手機號所對應的WhatsApp是否將你添加為好友其實並不重要。因為這種通過手機號來請求用戶信息的操作不會受到任何的限制,所以我們就可以創建一個完整的WhatsApp用戶資料庫,然後保存用戶的手機號碼、用戶頭像、狀態文本信息、以及在線/離線狀態。我們可以通過這些信息構建出一個與用戶手機號相關的完整時間軸,而這個時間軸可以告訴我們用戶的上線與離線時間。
目前,幾乎所有的網站在用戶瀏覽器中呈現內容時,都包含有一種特殊的程序來決定網站的功能及表現形式,這種特殊的程序就是我們所說的JavaScript代碼,這些JS代碼決定了用戶在點擊某個按鈕或移動滑鼠時網站應該產生怎樣的動作。除此之外,它們也可以與伺服器進行連接,並請求某些類型的數據。當然了,Web端WhatsApp也不例外。它會向WhatsApp的後台伺服器發送一個手機號碼,幾毫秒之後它便會收到有關這個手機號碼的信息。對於我們來說,這種JavaScript程序的好處就是任何人都可以查看到它的源代碼,而且我們還可以將其用於其他的地方。我正是利用了這種可能性開發出了一個腳本,這個腳本可以向伺服器請求大量手機號碼所對應的賬號信息,更加重要的是,任何一個人都可以編寫出這樣的一種腳本。下面這張圖片顯示的是我的腳本請求的400個隨機手機號所對應的信息:
隱私方面的擔憂
那麼,當我們拿到這些信息之後,我們能做些什麼呢?首先你要知道的是,任何人都可以創建出這樣的一種資料庫,我們不僅可以知道一個用戶(手機號)何時上線下線,而且還可以知道某個用戶頭像所對應的手機號碼。接下來我跟大家說一個最貼近實際的使用場景。面部識別技術想必大家都聽說過吧?這項技術近幾年已經發展得很不錯了,你可以設想一下,當你走在街上看見了一個美女(或帥哥),然後偷偷拍了一張TA的照片,而現在你只需要將這個照片放到資料庫中進行比對,你就可以拿到TA的手機號了。如果這是一個你所討厭的人,那麼你還可以利用TA的照片、手機號、以及其他的信息並通過面部識別系統來登錄TA的某些在線服務。是不是很簡單呢?這就是我對WhatsApp這個問題所產生的擔憂。
WhatsApp給出的回應
我非常支持「負責任的漏洞披露」,所以當我發現了這個漏洞之後,我便立刻與Facebook(因為WhatsApp是Facebook旗下的產品)取得了聯繫。總而言之,他們已經意識到了這件事情(有可能收集到大量用戶數據),但是他們並不認為這個問題與用戶隱私有關。他們給出的回復如下:
雖然他們的回復看起來也沒什麼問題,而且我自己甚至差點都被他們說服了。但是冷靜下來仔細想想,總是感覺怪怪的…
技術分析
不建議非技術人員閱讀這部分內容,因為你們可能會看不懂…
Web端WhatsApp使用了一個文檔中沒有提到的API,你可以隨意使用這個API,但你首先得自己弄清楚怎麼去使用它。這裡,JavaScript API在與WhatsApp伺服器進行通信時使用了一個WebSocket。
我在我的腳本中使用了三個API,第一個是Store.ProfilePicThumb.find( ),我用它來收集用戶頭像。你可以這樣使用它:
請注意,你必須在Web端WhatsApp所運行的同一標籤中發送請求,你還需要在頁面DOM中添加一個元素。
第二個API是Store.Wap.statusFind( ):它可以收集手機號所對應的文本信息:
第三個API是Store.Presence.find( ),它可以用來請求用戶的在線/離線狀態:
通過將這些API調用放到一個循環中,我們就可以不斷向伺服器請求信息了。
本文轉自:51CTO
點擊展開全文


TAG:IT永無止境 |