实现的目标:可以通过js加密逆向后,得到加密参数,请求获取数据。此方法同样适用于被前端js加密的用户名、密码爆破。
js加密逆向分析
首先,分析获取数据的api。抓包,发现是:
这个网站不存在分页,是鼠标下滑动态加载数据的,所以利用selenium爬虫效率低,效果也不是很好。
当然如果是菜鸟,最好还是利用这种方式。
先爬一下看看,发现返回的数据是加密的,先不管他。
我们分析请求参数,发现是两个加密的请求参数,分别是payload和sig。
如果把这两个参数去掉,或者这两个参数是错误的,则request无法返回正确的数据。
所以,需要对这两个进行js逆向,还原加密算法。
经过调试发现规律如下(至于怎么找断点,怎么找到实现加密算法的位置,本篇不做介绍)。
找到了sig的地方,下断点:
调试截图如下(只截图了payload的方法):
payload加密分析:
首先是payload加密,payload加密前:
{sort: 1, start: 40, limit: 20}
需要“翻页”动态加载数据,只要需要更改start即可,这个表示是开始条数,limit表示一次加载20条,比如60、80、100、120等等。
第1次进入e2(e) ,进去前e还是明文的payload,进去了_u_e(e) 返回t '{sort:1,start:40,limit:20}' 值没变。
接着返回e2(e)继续执行for循环,返回的值如下。这个时候,payload被加密了,但是还不是返回的值,继续下一步调试。
,x177wb:d`ym{1l$'=x10nx02x04x15p8[ '&olwx022
接着到了第一次进入e1(e) 中,这个时候e就是加密后的payload传进去。返回u,就是加密的payload了。
lbc3v0i6zgb5bxsxtcqnprbubwyjfnzejcm7oxr/ah8q
这个是只要payload不变,加密值就不变,还是相对比较简单的。
sign加密分析
sign的值是把加密后的payload值加上常量_p拼接后,作为参数,传到sig(e)中去,payload+_p如下:
lbc3v0i6zgb5bxsxtcqnprbubwyjfnzejcm7oxr/ah8qw5d80nfzhayb8eui2t649rt2mnrmve2o
这里的e就是加密后的payload,而sign调用的方法是md5(e + _p).touppercase(),结果是:
1268d4d682cf9d0c6c3cb4d6e4c3c87f
new t(!0).update(n)[e]() 是payload + -p这个常量:t.prototype.update = function(e) 实际就是这个函数
他又调用了hex函数 finshed函数 调用了 hash函数
lbc3v0i6zgb5bxsxtcqnprbubwyjfnzejcm7oxr/ah8qw5d80nfzhayb8eui2t649rt2mnrmve2o
跟踪分析发现,就是一个普通的md5加密函数,然后转换成大写。这个就可以不用js实现,直接python实现md5加密。
使用python去实现以上两个参数的加密,修改原来的python脚本如下:
再次请求:
发现返回的值是d,也是加密的,可以使用拦截技术,获取到js解密函数,解密d得到明文。
区块链玩家的众生相都是怎样的
荣耀8和荣耀v8有什么区别?荣耀8和荣耀v8评测对比
简述基于SMS远程数据采集系统的设计
电阻箱概述与特点
iPhone手机速度大PK,iPhoneX不如iPhone8
python爬虫之某站JS加密逆向分析
微软开启远程办公模式 后勤服务类工作人员仍会支付全额工资
鸿利智汇荣获“中国LED行业显示供应链企业25强”
射频放大器的应用领域
安徽移动正在全面实施5G﹢计划来推进5G通信网络的建设
芯联集成:8英寸硅基产能17万片/月,产品已供货大部分新能源汽车品牌
吉利和荣威是中国最牛的汽车?这样想就错了!五菱宏光才能说牛
云安全成“新常态”,AWS将云安全视为战略上的“生命线”
5G与4G的比较
单片机控制数码管闪烁的设计
中空编码器的优点_中空编码器的功能
中国安防芯片设计发展
电梯IP五方对讲的常见问题以及解决方法
欧诺华破壁机:以厨房一方天地,享受品质生活
云计算、大数据、人工智能和区块链等新兴技术与金融业务不断融合