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