案例网址:极志愿
加密参数+定位加密位置
要逆向的参数如下:
就这一个参数,这里搜索关键字加等号直接就是,但是我们还是用用xhr吧,不然太简单了:
这里异步后的第一个栈依旧加密好的,那就进入异步前:
data已经是明文了,说明就是拦截器,进入打断点:
一般都是成功的回调,然后运行过来观察返回值:
看看是哪个产生的(这里注意,我们看过之后就相当与执行过此代码了,最好重新触发断点过来看):
那说明就是t函数加密的,进去看:
赋值的位置,看看赋值的结果是啥:
那就是Qt函数进行的加密以及其他一些操作,这种还可以进去看(有些生成的是单独的加密密文,这种可能进去后就是加密的底层逻辑了,我们看不懂,这种可以根据密文长度或者关键字来判断是啥加密,看不出来就扣核心代码然后根据报错缺啥补啥),继续进去看:
赋值位置,打上断点了,运行过来看看:
根据长度感觉像md5,看看是不是:
4b70结尾,标准md5,只不过加了大写而已,再看看入参:
看了这些图应该明白,其实就ts和page要改:
咱们直接拿字符串即可:
复现逻辑+py调用
直接看复现代码吧,很简单:
py调用代码:
fromrandomimportrandomimportrequestsimportosimportexecjsimporttimeclassJSExecutor:def__init__(self,file_path):ifnotos.path.exists(file_path):print('NotFoundFile')withopen(file_path,'r',encoding='utf-8')asf:self.js_code=f.read()self.js_code=execjs.compile(self.js_code)defcall(self,func_name,*args):returnself.js_code.call(func_name,*args)defget_data(sign,ts,para_page):# cookie没有反爬cookies={}headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0',}json_data={'page':para_page,'page_len':10,'filter':{},'app_id':'98357f659cf8fb6001cff80f7c6b85f2','ts':ts,# 变化'platform':'desktop','v':210,'sign':sign,# 变化}response=requests.post('https://www.jizhy.com/gaokao/sch/filter',cookies=cookies,headers=headers,json=json_data)returnresponse.json()if__name__=='__main__':js_executor=JSExecutor('15.js')forpageinrange(1,4):js_params=js_executor.call('getSign',page)print(get_data(js_params['sign'],js_params['ts'],page))time.sleep(random())result:
拿下✌
小结
本文很简单,只需要找到加密位置,其他都不是事儿,文章如有什么问题请及时提出,加油加油