网络爬虫-58同城·招聘联系电话js解密

一个简单的cryptojs加密的网站,58同城·招聘的隐藏电话号码 如下图示

目标网站 → 58同城·招聘

网络爬虫-58同城·招聘联系电话js解密_第1张图片

注意,58招聘查看联系方式是需要登录授权的,所以前面的步骤一一省略,仅分析抓包请求,如何通过requests拿到我们想要的电话号码

接下来进行抓包分析,我们点击电话沟通,看看是加载了哪些请求

网络爬虫-58同城·招聘联系电话js解密_第2张图片

不难发现 这个异步请求给我们返回了一个值 virtualNum 虚拟电话号码 于是可以联想到这个数据是经过了加密的 于是接下来就需要在网页上去寻找加密算法

在上一篇icgoo电子元件网js加密破解分析 中已经介绍过了如何使用chrome去全局搜索js方法 这里就不再重复啰嗦了 直接上图

网络爬虫-58同城·招聘联系电话js解密_第3张图片
网络爬虫-58同城·招聘联系电话js解密_第4张图片
网络爬虫-58同城·招聘联系电话js解密_第5张图片

有点js基础的童鞋不难发现 这里实际上是使用了cryptojs来对电话号码进行逆向解密的,有点类似于公钥加密,私钥解密的东西,一眼就可以看出来。。。 于是就可以欢快地把这段js趴下来运行了. 对cryptojs不太懂的童鞋可以面向百度了解一波,我们这里就不啰嗦了,直接在58招聘这个页面搜到cryptojs拿来运行。

网络爬虫-58同城·招聘联系电话js解密_第6张图片

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)

效果图如下

网络爬虫-58同城·招聘联系电话js解密_第7张图片

到此分析结束。结果能完全对应上。实际上这个网站的js加密难度为入门级,初学者可以多试试这类网站。多断点调试,多全局搜索,多用fiddler抓包,每个流程,每个函数一层一层地去解析,实际上再难的网站也是一步一步解析出来的。

github传送门 → 58同城·招聘联系电话js解密

你可能感兴趣的:(MySpider)