JS逆向入门案例4——某数据服务平台数据爬取
JS逆向入门案例4——某数据服务平台数据爬取
- 前言
- 声明
- 网站
- 流程分析
- 总结
前言
由于这段时间本职工作比较繁忙,没有很多空余的时间去研究各大厂的加密风控了,想起来自己刚接触js逆向走过坎坷,所以决定出一期js入门案例分析,为刚接触js逆向的小伙伴提供一点思路,各位小伙伴有想要分析的网站也可以私信我,谢谢大家。
声明
本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!
网站
aHR0cDovL3dlYmFwaS5jbmluZm8uY29tLmNuLyMvbWFya2V0RGF0YURhdGU=
流程分析
老样子,打开F12进行抓包,查看了请求头和载荷,发现只有accept-enckey一个加密值,那接下来就找accept-enckey是如何加密的吧。
直接搜索发现结果太多了,直接堆栈寻找加密的地方。首先先从第一个堆栈打下断点。
重新点击搜索成功让断点断住,此时发现accept-enckey已经生成,并且往上翻可以看到加密值是随着e传进来的,那我们就看上一个栈
跟上一栈发现加密值还是随参数进来的,那就再跟上一个栈。
跟到这个栈已经可以看到加密参数的赋值了,直接打下断点,然后放开之前的断点,重新点击搜索,让断点断在这,控制台打印出结果正是加密结果,接下来就跟进这个函数,看看里面做了什么事。
跟进去后发现是一大段混淆代码,但是_0x1cee98这个大对象下面包含了各种各样的算法,应该是调用了加密的算法库,那我们现在只需要手动给它解这部分混淆就可以调用标准库完成这个加密了。学过ast的可以将全部混淆都解了,这样会更加清晰,我没学过,所以选择硬刚。
通过这样逐个打印替换,最终把这部分混淆解完就已经很清晰了,是一个CBC模式的AES加密算法,其中Math[‘floor’](_0x28b1b3[‘FarLR’](new Date()‘getTime’, 1000))就是取了时间戳再除1000,了解加密流程,接下来只需要调用标准库进行加密即可。
下面附上js版本的加密算法代码
const CryptoJS = require('crypto-js');function encrypt() {// 获取当前时间戳(秒)const currentTime = Math.round(new Date().getTime() / 1000).toString();// 从localStorage获取密钥,如果不存在则使用默认值const key = '1234567887654321';const encryptedData = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(currentTime),CryptoJS.enc.Utf8.parse(key),{iv: CryptoJS.enc.Utf8.parse('1234567887654321'),mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7});return encryptedData.toString();
}
总结
最后也是可以获取数据,过程中遇到问题的可以私信博主,人数多的话后面会考虑创建一个讨论群,但是仅限于入门的小伙伴,大佬们都来指点指点我!!!
base64解码(TEgtNTk3MQ==) ==》 添加博主