今天学习JS解密的网站是:人口流动态势大数据,这是网址:https://unicom_trip.133.cn/city/?system=cjfcts。
在做JS解密的时候,我们一定要记住一个方法:缺什么补什么。这个必须牢记在心中,将会在后面的学习中体现出来。
废话不多说,我们正式开始。
- 进入网站后,F12抓包。(注:需要选择比较前的时间,因为最新的数据还没有出来)
从这个异步加载我们得到了数据:但是却不是我们想要的数据,这时候就要开始解密了。
我们先看一下加密数据:eyJpdiI6IjVCWDR6TE42NjlJVVZaSmdVT0RFRlE9PSIsInZhbHVlIjoiMVNkREJFb01BUVZ6blNnS0dvd1wvVDkzTERINzNLd3dHdFwvVEs5ZTdrZUwyY1NHSDdFNWc4Y1NMdG5jVE5vWlRNMUhcL3hSU2pSdFFBN1d4U09YTWplRUlMUHlPUDFYdHhHZjVlbGRPWU1Lemx0cWZHa0dZZGlzZytzcWE3NExGT2xaK0x3R1pnb0ZSd1VONnhIV2xCelwvOGtkSFRTWmNraVhnb0pqbG0zTmUrK1E5MFdWXC9qVWdUbTUwY21HUCtGN0dqV29DOHppQzZ2dkhhYXN6TVN6OGE5QUdObFYwR3ZRczYrblY1a0hcLzZyNGFtOFwvUVo5Wnk3Z1NWbGRheHR5TnVTU1E1dVJDc1FiQ2NCM1p0Z2dxQ29TRVlKcTRXcFd0aHR3WmhLeDBhTUZZZUI3UVQrbkJWRlRyRDJHNmlLc240VEFXbVMrZ3FDck11Q3BNTkF1SVdUVys2UU90TlJWczVDZHR5V25Xd3JPVVlhTWFNMVNPWDA2WWFGM3psdSsyTzVGRXFtMTNQUnhsdUw5OFpMNU1NbmlzSlFxcTk1UEFNOWJtVzQyQVpEWkRLOXllSUR1UUphcE9VclwvTW1yYlFvSlpEaFJhVWllRFUybkpHYWJPa0M0SXRDSTZmSmZCQTluMllvdFhYT1paTllIbFNDbzZsWnVLazVDQms1MWQ5NGdBSWxVd01HRnRGZUtleUNqOFZkSDlxajlcL0plZjA5OWNRbzVvYjBhSVZlTGhISlpTaERzbWNkZmhidXBMUmJiSWh0Q2w1QVwvV0Vwa3A2ZG11WUxJNmM3aHRRNlhpbVIrZGtHK1MzOGxuQ3RYSmtmYVgrdnRadjdTc0hTMFB2bjNpSDBSM21GMU1udHZXaDBrdCsxXC9HVzBQTGFTQ0FuV2IxbUFnRDgyT1puRTNDOUlKSEY0TGlOc0p4YURrQnpTWjAxTnpqRkhDOVYyWndsSE4zeXpQblpiRmNSZFkxRFhmMnVjSXArdklzMU1TVUp4NjdsRTBEWVc0YzYrSlZvWVwvMmpqODFwNkVnWjkzWW1YTXZ6VHFEOVZvb2xmN2JNWlM2K2lHaUF0aHJYclhuVjRcL1pVd1wvVmtXQWNaN1ZBMlZycnhZRGVLOUR5aEJzbjhuZ0hodkpkcG1aR3QrWHg5UlZTT3VjcjdrWXZcL1EyUEE4Rm9WcXVNMk9IdzR3bnVZUkdYRW1EZmErS3owblRuQzF1TXJJMFR0OGdsMVlaY3pvdlhSdVpDQ0dkemEzM05oZlRtb3hITHVZS0FzRWF3U1RuSmhHOFNadnQ0SzhFRXdcL3U5cWZPSE1nUkUxd0UrbFBpQVhFeXBhM2lUXC9kT1FcL3I2R2dJVXYxMVJrV1pmZUJVWkNpSHhPT2VuXC9Ud1pZWHcza0FvV1VvenBPamRHTWJDN0xtT1VmMmFjUVBwNFVUVjhIaHZLZFFKaWMxT0d5NkNzbU1LSUJ5eTV6aWkwYUozSHR1dkFwRkVkK2I1anc3TVEzTm9sVTZVcDYyK1huMStZZGRTOFdJcFVJd3Z3S21FNWlhSGFPSDVpcUdaVFwvdHIzVDVQeXgya2UyR0k2djBkNVlvdmFTUjJKVUVsWWNrUDQ5VmJ2S3ZkblZodzl0SG1ZNUFiK3FHdU1pNE9IcU1VVVZ2TmF4Y3JQaFRUR1dTeFlZUXFxUTFtVTBTZ3J3ZmhHQ1BaUzRoSVVKNmpiRnQxQm1xYzk0MFwvdkFqekU5WHBHYWErYjdvZ05jZ0Q0OXFNYThrVVBRMnlXdzd5S1VsRW83aGxWTklTbUl1aEJyQ2k0N0Q5akJ4RWhmV1hTM3lcLzZHWXFSNndVeHBRVjZONndEcGM2Skl5RUd6eG93XC9XaUNVXC8xeEVvRWk2bHFSWnZqYmtTc2R2UWUySGJteDJVZFJ5YWJpbEE9PSIsIm1hYyI6IjM5OTI5MjUyNDkwMjJhODUyYmE3Yzg0OGUxNWUyODRiNmQzMTBlZDRjNzljODQzYzJmMDVlNTNiZjI1NjBjZWYifQ==
是不是看不懂了?这儿我就直接说了,如果在以后的数据中看到加密数据后面有“==”的,有可能是base64加密。我们去base64解密网站解密一下这个数据。
出现数据了吧,可以看到是一个json类型的加密数据,我们先格式化一下解密后的数据:
知道是base64加密以后,我们就来找base64加密方法。因为解密后的数据是json类型的数据,所以我们来找一个关键词,叫:json.parse
看到这些是不是感觉跟我们想要的数据很像了是吧。我们进去js文件后,继续搜索json.parse,会发现这个函数,而且这个函数里又正好出现了base64。
经典操作:打断点。
可以看到 这儿的这个dataDdecode(data)就是js中加密的函数么我们把这个函数拿出来
这个dataDecode函数是有一个参数的,我们从前面抓包的图中就可以看出,其实这个传入的参数data就是我们在文章开头拿到的加密数据。我们先搭一个基本的框架来运行一下这段js代码,看看能不能出来结果:(execjs库在上一篇文章中已经讲过了,这儿就不再赘述)
这是基本的框架,我们来运行一下:
发现报错了:execjs._exceptions.ProgramError: ReferenceError: Base64 is not defined,这儿就要想起我开头给你们说的最关键的一点:缺什么补什么。
我们的js代码中存在base64,但是却没有定义,所以我们需要再次回到原来的js文件中找到这段定义base64函数的代码:
将这段function Base64()代码复制到我们的js文件中,再次运行:
发现又报错,说CryptoJS is not defined,那就再找到定义CryptoJS的代码,再添加进来。(这儿插入一点,如果加入了Base64这段代码,并没有出现CryptoJS未定义,而是出现这段报错:execjs._exceptions.ProgramError: TypeError: ‘JSON‘ 未定义,这儿就需要安装一个叫nodejs的程序,教程已经发了,传送门:"JSON"未定义解决办法,装好nodejs后这个报错就会解决)
现在我们去找定义CryptoJS的代码:
这儿定义CryptoJS的代码的代码非常长,大家在复制代码的时候一定要注意代码的完整性,不然是不会出结果的。
把这段代码加进去以后,我们再来运行:
哎,有数据了对吧,但是还是看不太清楚,我们来看看网页给我们显示出来的数据:
跟上面的数据一对比,是不是发现后面的百分比数据是一样的,但是前面的城市名是用固定的代码替换的,我们再去js文件中找找城市的代码是如何替换的:继续打断点
我们在控制台打印一下这部分数据:console.log(cityList):
因为这个编号都是固定不变的,所以我们可以直接复制到我们的py文件中就行了。因为现在数据我们已经拿到了,现在就是对拿到的数据进行格式化输出。
拿到的两个数据都是字典类型的,遍历替换就行。这些都是基础,就不说了。
for sourcecity in get_html_data:
for citycode in city_list:
if sourcecity["source_city"] == citycode["city_code"]:
sourcecity["source_city"] = citycode["city_name"]
print(sourcecity)
最终得到的结果是这样的:
这样我们就解析出来了加密的数据。