日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Python爬虫-JS破解openlaw加密cookie

發布時間:2023/12/14 javascript 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python爬虫-JS破解openlaw加密cookie 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡單介紹:

? ? 最近做研究js混淆加密,以openlaw作為網站進行學習研究。openlaw主頁裁判文書欄中有大量案件信息,同時能夠為客戶提供標準的法律專業知識以及智慧和經驗成果。過程中遇到一些反爬措施,記錄下來。需要抓取的頁面如下:

發現問題:

? ? 利用chrome瀏覽器清除cookie模擬第一次訪問,發現存在cookie:

利用Fiddler抓包解析,用戶第一次訪問會發送兩次請求:

第一次請求返回加密的js用于生成cookie同時攜帶cookie發送第二次請求返回正常數據:

分析cookie構造:

s_token和_003相同,SESSION第一次請求得到服務器傳到客戶端的響應頭Set-Cookie,所以只需要找到c_token生成方式用python模擬即可破解,感覺希望就在眼前。

破解流程:

一:新建html文件將第一次請求返回源碼js格式化后復制,同時在js的最低端加上debugger并在chrome中打開

利用Console功能進行js代碼解析。只有$表示的第三段代碼可能和c_token有關系,得到相對應的參數:

其中$.$表示Function從而將方法中代碼進行調試:

得到對cookie加密JS代碼,得到c_token以及s_token生成過程:

之后通過python模擬js進行c_token的生成,和c_token完全一樣,至此以為破解完畢。

可是,通過正則提取_003模擬生成c_token之后添加cookie發送請求,出乎意料的未抓到想要的數據,再次重復解析JS生成c_token過程,發現js代碼生成token參數不斷變化導致無法通過固定的python方式模擬生成.

二:想到通過PyV8(Python2)或者PyExecJS(Python3)來執行每次請求返回的js代碼以生成cookie,添加到請求頭中。至于PyV8和PyExecJS的安裝和使用教程自行百度吧!博主用的PyExecJS.直接上源代碼吧。

import requests import re import execjs import time from get_proxy import func_proxy ip_list = [] header1 = {'Host': 'openlaw.cn','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3','Accept-Encoding': 'gzip, deflate','Connection': 'keep-alive','Upgrade-Insecure-Requests': '1' } # 代理ip ip_list.append(func_proxy()) resp = requests.get(url='http://openlaw.cn/judgement/a66ac059bf924212a9b90f740e098060', proxies=ip_list[0],headers=header1)content = resp.text #帶有js混淆加密內容html標簽 print(content) # 第一次請求服務端返回的SESSION session1 = resp.headers['Set-Cookie'].split("=")[1].split(';')[0] # 生成token的必要參數,正則提取 js1 = re.findall(r'_003(\s{1})=(\s{1})(.*?);', content, re.S)[0][2] # 主要的js混淆加密代碼,正則提取 js2 = re.findall(r'\$\.\$\(\$\.\$\(\$\.\$\$\+(.*?)\)\(\)\)\(\);', content, re.S)[0] file = "jube.js" # 加載js文件, ctx = execjs.get().compile(open(file, encoding='utf-8').read()) data = ctx.call('Encrypted', js2)func_js = data[213:-196] # 執行生成c_token的方法,返回c_toke ctx2 = execjs.compile(func_js).call('_a', eval(js1))header1 = {'Host': 'openlaw.cn','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3','Accept-Encoding': 'gzip, deflate','Cookie': 's_token=%s; c_token=%s; SESSION=%s' % (eval(js1), ctx2, session1),'Connection': 'keep-alive','Upgrade-Insecure-Requests': '1','Referer': 'http://openlaw.cn/judgement/a66ac059bf924212a9b90f740e098060' }resp = requests.get(url='http://openlaw.cn/judgement/a66ac059bf924212a9b90f740e098060', proxies=ip_list[0],headers=header1) print(resp.content.decode())

破解混淆加密所需要的固定js參數文件

function Encrypted(code) {$ = ~[];$ = {___: ++$,$$$$: (![] + "")[$],__$: ++$,$_$_: (![] + "")[$],_$_: ++$,$_$$: ({} + "")[$],$$_$: ($[$] + "")[$],_$$: ++$,$$$_: (!"" + "")[$],$__: ++$,$_$: ++$,$$__: ({} + "")[$],$$_: ++$,$$$: ++$,$___: ++$,$__$: ++$};$.$_ = ($.$_ = $ + "")[$.$_$] + ($._$ = $.$_[$.__$]) + ($.$$ = ($.$ + "")[$.__$]) + ((!$) + "")[$._$$] + ($.__ = $.$_[$.$$_]) + ($.$ = (!"" + "")[$.__$]) + ($._ = (!"" + "")[$._$_]) + $.$_[$.$_$] + $.__ + $._$ + $.$;$.$$ = $.$ + (!"" + "")[$._$$] + $.__ + $._ + $.$ + $.$$;$.$ = ($.___)[$.$_][$.$_];data = eval(eval(code));return data }

openlaw網站js混淆加密實驗的結果如下

參考博客:https://zhuanlan.zhihu.com/p/32344678

本博客僅用于學習研究,切勿用于商業用途

總結

以上是生活随笔為你收集整理的Python爬虫-JS破解openlaw加密cookie的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。