某市西城区总工会爬虫js逆向流程

网站链接aHR0cHM6Ly96Z2guYmp4Y2guZ292LmNuLw==

网站分析:直接请求会返回一串经过ob混淆的代码,直接用fiddler抓包,果然是一个首页html带着js代码,生成一个带有加密参数的链接再跳转到首页。

那么就暂时可以确定有两个加密的地方,一个是cookie一个是链接加密,后来经过分析可知跳转的加密链接所带的cookie是首页响应setcookie,那么就只要针对链接中的加密参数进行逆向就可以了。

接下来就是找到函数入口,经过一系列尝试之后发现,发现直接搜索/WZWSRELw==就可以找到链接中的参数,而且向下找只要一个地方使用了这个Q变量

 

 现在函数入口已经找到了,接下来就是扣代码,扣代码并不难,只要注意一下几个要点即可

1.大数组直接复制不能用,需要在浏览器使用copy方法复制粘贴到js代码中才可以,否则取出来的元素就是错的。

2.在解析混淆变量的函数中有一部是将整个函数转化成字符串传入变量P中,这里需要将其手动替换,因为本地格式化后的代码会有\n在字符串代码中,导致生成的参数和浏览器参数不一致。

 

3.代码中有两处格式化检测的js代码,直接搜索regex,将检测的变量换行删除即可过掉检测。

4. 有一处检测的地方较复杂,没看出来是检测什么的也没看懂代码为啥会在这儿一直循环。在浏览器断点跟随后发现只调用了一次,而且只返回了一个0,这里直接将其return一个0即可。

5.这个网站有一个有意思的地方就是,它的debugger不是无限的,调用n次dubugger后才会去生成加密链接,在网页上直接选择不在此处暂停,在本地不用管直接就会跳过。

6.每次请求首页响应的js代码有两个参数M,t是变化的,因为这两个变量每次的加密链接才是变化的。

7.最后加密链接一定要和首页响应的cookie对应上即可请求成功。

import re
import execjs
import requests
import json
import time

#首次请求
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
}
session = requests.session()
response = session.get('https://🐕头和谐/',headers = headers)
content = response.text
cookies = response.headers['Set-Cookie']

#加密参数生成
m = str(re.findall("M='(.*?)'",content)[0])
t = re.findall("t='(\d+)'",content)[0]
print(m,t)
data_hanshu = f"var Q = '/WZWSRELw==', M = '{m}', t = '{t}', B = 'WZWS_METHOD', H = 'WZWS_PARAMS', S = 'utf-8';\n"
# data_hanshu = f"var Q = '/WZWSRELw==', M = 'CPd$4d<', t = '3650', B = 'WZWS_METHOD', H = 'WZWS_PARAMS', S = 'utf-8';\n"
with open('./m3.js', 'r', encoding='UTF-8') as f1:
    for i_text in f1:
        data_hanshu += str(i_text)
aes_js = execjs.compile(data_hanshu)
data_data = aes_js.call('urlid')
wzws_cid = re.findall('wzws_cid=(.*?);',cookies.replace('\n',''))[0]
print(wzws_cid)


print(data_data)
#加密链接请求

headers = {
    'Cookie': f'wzws_cid={wzws_cid}',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
}
# session.cookies.update({'Cookie':cookies})
url = f"https://🐕头和谐{data_data}"
response = requests.get(url,headers = headers)
content = response.text
print(content)
#js代码为了防止产生纠纷不放在博客,可私信获取。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值