一個簡單的cryptojs加密的網站,58同城·招聘的隱藏電話號碼 如下圖示
注意,58招聘查看聯繫方式是需要登錄授權的,所以前面的步驟一一省略,僅分析抓包請求,如何通過requests拿到我們想要的電話號碼
接下來進行抓包分析,我們點擊電話溝通,看看是加載了哪些請求
不難發現 這個異步請求給我們返回了一個值 virtualNum 虛擬電話號碼 於是可以聯想到這個數據是經過了加密的 於是接下來就需要在網頁上去尋找加密算法
在上一篇icgoo電子元件網js加密破解分析 中已經介紹過了如何使用chrome去全局搜索js方法 這裏就不再重複囉嗦了 直接上圖
有點js基礎的童鞋不難發現 這裏實際上是使用了cryptojs來對電話號碼進行逆向解密的,有點類似於公鑰加密,私鑰解密的東西,一眼就可以看出來。。。 於是就可以歡快地把這段js趴下來運行了. 對cryptojs不太懂的童鞋可以面向百度瞭解一波,我們這裏就不囉嗦了,直接在58招聘這個頁面搜到cryptojs拿來運行。
js代碼如下(cryptoJS過長所以未在此展示)
var CryptoJS=CryptoJS // 內容太長請去原網站複製
function getRealPhone(word) {
var key = CryptoJS.enc.Utf8.parse("RIOHwmVrvD+tt8Xv")
, decrypt = CryptoJS.AES.decrypt(word, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return CryptoJS.enc.Utf8.stringify(decrypt).toString()
}
python代碼如下
import execjs
js = execjs.compile(open("js.js", "r").read())
token = "EteFNAJt19Y7/qQuQIhDvlMNBD2PGpoWvoGEmqZm4xE="
realPhone = js.call("getRealPhone", token)
print(realPhone)
效果圖如下
到此分析結束。結果能完全對應上。實際上這個網站的js加密難度爲入門級,初學者可以多試試這類網站。多斷點調試,多全局搜索,多用fiddler抓包,每個流程,每個函數一層一層地去解析,實際上再難的網站也是一步一步解析出來的。
github傳送門 → 58同城·招聘聯繫電話js解密