js混淆动态cookies
进入页面打开开发者工具进行抓包!(data/attachment/forum/202012/31/121013vvbpigbyz8y4gvct.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
一个简单的GET访问链接是:`http://match.yuanrenxue.com/api/match/2?page=2`
直接访问提示出错,看一下题目cookies动态加密,肯定是在cookies上面做了手脚,我们携带cookies进行调试。
!(data/attachment/forum/202012/31/121141k7admjzz484tt3ai.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
得到了正确的结果可以看到m应该就是动态加密的
我们全局抓包看一下这个cookies从何而来。根据经验,一定有一条请求是给cookies赋值的。
!(data/attachment/forum/202012/31/121744gubcb8xu0iuhi0hi.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
我们看到这条数据加载了两次,我们观察对比一下这两条数据。
!(data/attachment/forum/202012/31/121828ffgzff6gt6jl81t8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
!(data/attachment/forum/202012/31/121843s0bv2kcci9krhkbz.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
我们对比发现第一条数据的时候还是没有cookies的第二条就带上了cookies。
所以我们推测第一条数据一定动了什么手教让第二条的数据带上了cookies。猜测可能返回的协议头setcookies但是观察发现返回的协议头并没有添加cookies的操作。
我们用fidder再次进行全局抓包看一下第一条数据有没有什么异常。
!(data/attachment/forum/202012/31/122445oae5o4y6kggayg1a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
我们看到第一条不带cookies的数据返回了一个scprit之类的东西,大胆猜测就是执行了这段js导致第二条数据带着cookies
!(data/attachment/forum/202012/31/122558q0ag6lgkhoa876kg.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
我们赋值返回的代码通过解混淆工具解密,将解密后的js代码放入notepad++中格式化。
js我不太懂,直接拉到最后查看他返回的是什么东西。
!(data/attachment/forum/202012/31/123156cmm6o9s4l9ko09ww.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
我们可以看到他真正执行的也就w()函数至于w函数里面的X() 上面有明确的定义。
解释一下意思就是把X函数当作参数传入W函数中,进行运算
我们查看js代码发现X函数只有一句代码
Date["parse"](new Date());
那这是什么意思呢....没有js基础我们直接扔到console跑一下看结果是什么
!(data/attachment/forum/202012/31/123538o96xo4a4aan94xbx.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
emmm....很明显是一个时间戳也就是取当前的时间戳传入到W()函数中。
然后我们看一下W这个函数
!(data/attachment/forum/202012/31/123738cfgutuhfumpv0nrm.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
在W函数中cookies赋值,然后location["reload"]();,这句代码的意思是刷新当前页面,我们捋一下思路。
也就是说刚开始页面是没有cookies的我们访问这个页面之后,发送了第一条“2”的数据返回的这串混淆之后的代码,执行代码里面的W()函数,给cookies赋值,赋值之后刷新次页面再次访问“2”,这个时候赋值的cookies就被带上了。
那么我们下来就要研究cookies是怎么计算出来的了
我们先对比一下
m=619d080ec6de17273e546e68e37e507d|1609388594000
document["cookie"] = "m" + M() + "=" + V(Y) + "|" + Y + "; path=/";
path应该是一个路径,大概是页数之类的东西,我们先不管,对比这两个m我们猜测M()返回的是一个空,我们去看一下M()这个函数,
!(data/attachment/forum/202012/31/124537ej12ppj2thkplkjm.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
我们看到M这个函数里面又包含了a4()和K(),a4()函数的定义就在M()函数里面
!(data/attachment/forum/202012/31/124959locx896cgukokxzf.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
我们把定义+执行扔到console发现没有返回值,先不管这个a4()
我们直接分析K
```
function K(Y, Z) {
if (Z) {
return J(Y);
}
return H(Y);
}
```
我们发现K这个函数是有参数的,但是M()里面的K并未传入参数,因此K()也没有用
!(data/attachment/forum/202012/31/125312b9i9i81ignb5g19r.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
简化之后的M()我们再次观察。
一行一行往下看我们看待了eval()函数,引起了我们的重视,会不会就是在这里动的手脚呢,我们查看eval()函数里面的参数,参数是L()我们去观察一下L()这个函数
```
function L(Y, Z) {
let a0 = "";
for (let a1 = 0; a1 {JS}')
res = requests.get(url,headers = headers)
return res.json()
if __name__ == '__main__':
sum_num = 0
for page_num in range(1,6):
info =Get_data(page_num,Get_JS())
price_list = for i in info['data']]
print(f'第{page_num}页发布日热度的值:{price_list}')
sum_num += sum(price_list)
time.sleep(1)
print(f'发布日热度值总和:{sum_num}')
```
热爱就要做到极致.
宝贝,中间有一部分文字内容也不见了..不知道是bug还是什么 {:3_41:}@李恒道
小陈 发表于 2020-12-31 13:59
宝贝,中间有一部分文字内容也不见了..不知道是bug还是什么
哥哥,哪里文字内容少了.... 哥哥 这中间有一部分分析不见了...直接python代码了。我也不知道是不是我操作问题哈哈哈没事儿哥哥... {:4_108:}{:4_97:}
页:
[1]