极验4代滑块(js逆向)

import requests
from requests.exceptions import RequestException
import json, re
import time
import execjs
import hashlib
import ddddocr

class jyHuaKuai:
    def __init__(self):
        self.headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0",
            "Referer": "https://www.geetest.com/"
        }
        self.session = requests.Session()

    def get_load(self):
        codes = ""
        with open("huakuai_js.txt", "r", encoding="utf-8") as f:
            codes = f.read()
        run = execjs.compile(codes)
        challenge = run.call("uuid")
        params = {
            "callback": "geetest_" + str(int(time.time())*1000),
            "captcha_id": "24f56dc13c40dc4a02fd0318567caef5",
            "challenge": challenge,
            "client_type": "web",
            "risk_type":"slide",
            "lang":"zh"
        }
        url = "https://gcaptcha4.geetest.com/load"
        try:
            res = self.session.get(url=url, params=params, headers=self.headers)
        except requests.exceptions.RequestException as e:
            print("请求错误",e)
        else:
            pattern = re.compile(r"\((.*)\)")
            data = json.loads(pattern.findall(res.text)[0])["data"]
            captcha_id = "24f56dc13c40dc4a02fd0318567caef5"
            return data["lot_number"], data["bg"],data["payload"], data["process_token"], data["slice"],data["pow_detail"]["datetime"],captcha_id

    def get_md5(self,pow_msg):
        md5 = hashlib.md5(pow_msg.encode("utf-8")).hexdigest()
        return md5

    def get_x(self,bg_url, slice_url):
        try:
            bg_img = self.session.get(url=bg_url, headers=self.headers).content
            slice_img = self.session.get(url=slice_url, headers=self.headers).content
            ocr = ddddocr.DdddOcr(det=False, ocr=False,show_ad=False)
            result = ocr.slide_match(slice_img, bg_img, simple_target=True)

        except requests.exceptions.RequestException as e:
            print("图片请求错误", e)
        else:
            return result.get("target")[0]


    def do_verify(self):  # slice是滑块,bg是背景图
        lot_number, bg, payload, process_token, slices, day_time, captcha_id = self.get_load()
        base_picurl = "https://static.geetest.com/"
        setLeft = self.get_x(base_picurl+bg, base_picurl + slices)
        codes = ""
        with open("huakuai_js.txt", "r", encoding="utf-8") as f:
            codes = f.read()
        run = execjs.compile(codes)
        pow_msg = run.call("get_md5",day_time, captcha_id,lot_number)
        pow_sign = self.get_md5(pow_msg)
        result = run.call("get_w",setLeft,lot_number, pow_msg, pow_sign)
        login_params = {
            "callback": "geetest_"+str(int(time.time()*1000)),
            "captcha_id": captcha_id,
            "client_type": "web",
            "lot_number":lot_number,
            "risk_type":"slide",
            "payload":payload,
            "process_token": process_token,
            "payload_protocol":1,
            "pt":1,
            "w": result
        }
        login_url = "https://gcaptcha4.geetest.com/verify"
        try:
            self.headers["Host"] = "gcaptcha4.geetest.com"
            self.headers["Connection"] = "keep-alive"
            self.headers["Cookie"] = "sajssdk_2015_cross_new_user=1; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2218d9c8c39489e7-02453ffb814c9fe-26001851-921600-18d9c8c3949b02%22%2C%22first_id%22%3A%22%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E8%87%AA%E7%84%B6%E6%90%9C%E7%B4%A2%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fcn.bing.com%2F%22%2C%22%24latest_landing_page%22%3A%22https%3A%2F%2Fwww.geetest.com%2F%22%7D%2C%22%24device_id%22%3A%2218d9c8c39489e7-02453ffb814c9fe-26001851-921600-18d9c8c3949b02%22%7D; captcha_v4_user=462c43ac9b7b42949a02f9b687e5058f; Hm_lvt_25b04a5e7a64668b9b88e2711fb5f0c4=1707728453,1707733452; Hm_lpvt_25b04a5e7a64668b9b88e2711fb5f0c4=1707735520"
            req = self.session.get(url=login_url, params=login_params, headers=self.headers)
        except requests.exceptions.RequestException as e:
            print("请求错误", e)
        else:
            print(req.status_code)
            print(req.text)



if __name__ == "__main__":
    huakuai = jyHuaKuai()
    huakuai.do_verify()

上述代码中的cookie,id等等不变量要换成本机的环境

get_w()js代码见https://github.com/KTVICTORY18/js-中的huakuai_js

js代码中有一个参数是时不时地更新,有时效性

根据提供的引用内容,美团滑块验证的js逆向过程如下所示: 1. 首先,需要获取主页接口的参数,包括csrf、uuid、token_id和continues等。这些参数可以在第一个链接返回的源码中找到。 2. 接下来,使用这些参数进行登入接口的请求,其中包括两个加密参数password和h5Fingerprint。 3. 然后,通过验证码获取的接口来获取验证码相关的参数,如verifyMethodVersion、slider、yodaVersion、timestamp、sign、ses和requestCode等。 4. 在获取到这些参数后,可以进行验证接口的请求。该请求需要使用到加密参数behavior和_token,以及动态参数v_c和3eac9809,同时还需要在请求头中添加Authencation。 总结起来,美团滑块验证的逆向过程可分为以下步骤: 1. 获取主页参数 2. 逆向pwd和h5Fingerprint 3. 请求page_data链接 4. 逆向Authencation、behavior和_token 5. 发起最终的验证请求 需要注意的是,以上仅是根据提供的引用内容进行的分析,具体的逆向过程可能还需要进一步的研究和分析。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【2023-03-10】JS逆向之美团滑块](https://blog.csdn.net/qq_26079939/article/details/129442967)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [美团滑块(1-18,js逆向)](https://blog.csdn.net/weixin_44772112/article/details/128721509)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值