lwmy

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

前几年很火的一个web端免费加密,现在也还能遇到,主要就是访问量词,第一次获取一个返回cookie,第二次根据第一次返回cookie生成的新的cookie,然后带上这个cookie在访问就行了。
关于这点,已经有很多人做了解析1,随便搜一下就能搜到,所以这里就不展开说了,直接上代码吧。注意cookie是每次一换的,也就是meigecookie都只能使用一次。

import execjs
import requests
import tool
'''加速乐(也就是cookie的表头中含有jsl的),加速乐是中国领先的 互联网安全 提供商 知道创宇 推出的一款在线免费网站 CDN 加速、网站安全防护平台。
致力于系统化解决网站访问速度过慢及网站反黑客问题。三次获取cookie后才能正常访问'''

def get_cookie(url, proxies=None):
    cookies={}
    # 第一次请求,获取第一次cookie
    response = requests.get(url, verify=False, timeout=10, proxies=proxies)

    # 上传第一次获取的cookie
    cookies.update(response.cookies)

    content = re.search(r'document.cookie=(.*);location.hre', response.text).group(1)
    content_remove = execjs.eval(content).split(';')[0].split('=')[1]

    #  第二次上传cookie
    cookies['__jsl_clearance_s'] = content_remove
    # 第二次请求获取cookie,替换shijianc戳
    response = requests.get(url, cookies=cookies, verify=False, timeout=10, proxies=proxies)
    print(response)
    # 正则提取解密用到的字典
    datas = re.findall(r';}};go\((.*?)\)</script>', response.text)[0]

    # 解密代码
    content_js = '''var CryptoJS = require('crypto-js');
    
    var hash = {
        'md5': function (a) {
            return CryptoJS.MD5(a).toString()
        },
        'sha1': function (a) {
            return CryptoJS.SHA1(a).toString()
        },
        'sha256': function (a) {
            return CryptoJS.SHA256(a).toString()
        }
    }
    
    
    data = goooo;
    
    
    function decrypt_jsl_cookie() {
        var chars = data["chars"]["length"];
        for (var i = 0; i < chars; i++) {
            for (var j = 0; j < chars; j++) {
                var cookie = data["bts"][0] + data["chars"]["substr"](i, 1) + data["chars"]["substr"](j, 1) + data["bts"][1];
                if (hash[data['ha']](cookie) === data["ct"]) {
                    return [data['tn'],cookie]
                }
            }
        }
    }
    '''.replace('goooo', datas)
    content_cookie = execjs.compile(content_js).call('decrypt_jsl_cookie')

    # 将第二次获取的cookie上传到cookie字典
    cookies['__jsl_clearance_s'] = content_cookie[1]
    cookies_str = [f'{keys}={values};' for keys, values in cookies.items()]
    cookies = ''.join(cookies_str)
    return cookies

#  目标url
url = 'https://www.example.com'

cookies = get_cookie(url)
print(cookies)
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'
}
headers['Cookie'] = cookies
#  第三次请求,获取正常网页
response3 = requests.get(url, verify=False, headers=headers, timeout=10, proxies=proxies)
print(response3.text)

posted on 2024-10-09 09:18  白望仙  阅读(6)  评论(0编辑  收藏  举报