说明

该接口返回 sensor_data,可拿去破盾

请求地址

https://akm.sakura-luo.top/akm_data?token=xxxx

POST application/json

求参数

属性

类型

必须

说明

_abck

string

cookie中_abck的值

bm_sz

string

cookie中bm_sz的值

requests_url

String

触发网址,一般是首页

ua

String

可指定破盾的ua,不指定随机返回

js_text

String

js报文

version

String

如果是3.0版本,传入3,2.0不用传入

请求示例

{
    "_abck": "238B9642300FA4F75CA3DC6925F6BCD9~-1~YAAQVf6Yc/AQrPqBAQAAOwsa/gjB3EW6gEF2Vz2sca3/8zIuGAGII8ysl0U2O5K4jkUHKNGR9Z+M3UVVfCEgu2Me8sJUOU26A+OPgv+fJhOFwOyOqt9n9F9YgsiBD8E+3DFqj+usABqUI5JzfXHsfiPT3+/Mf/sN9zNhWrWQXARlC6eMg7HcSP60qR4Se1xU7av5SQ8SqN+Jyw8viFKTIwYu+2Nr0n/2bogGSnWA5SEQGITlyVRmhn6dYZ4u9BhH35oJSNPegDqeT5/ieCyoH9m+hwguJag66GTcg1W7oFOwAhoEDRNcHZ4D277eshU8/GyC6qTOvmhOlFHYJgS+aojA9Rhy9B0GvOdhP0w0wOdvLhHfedDagiDM8EUQ4S6DJhR+E1+CxQ7MBrCZvUxKUjm/srCJRZ4ZYQJzZgdXVdr8K9GcaSgu~-1~-1~-1",
    "bm_sz": "C9AFEB5218F51852E151F8351E714FED~YAAQrQrgeiGSnPqBAQAAwMva/RBoFicD2GuIRKWkAeAUweYlbbD+imzoIe0/DAvK/QuveyC4IELvtXRsYChAO1IjLNpTMu+so8jVtRjPso5lRhd0OJr4BGcYtdtuKyILoOSYq8g6IsnH0qS59/LqP7gt1FpAtv8436jaWe1uwyrOW2KkA25Z/gKWPkmv8afRooqaUfwVCFmklt5BQyuGF4AFLozfycVZajDSPls74TJJfgr2n3RoYdGxA1+ToDG1McgrBXNwlQUaFc7tY07W7vsmnmTNb6tKDeRnYWrNHNL/EVoOFY2dwXZpmZWpyy7aqSYa6iEOZ/XiQ+1eBur+c4Qvgl3ks12mRdyoAaHYIPp2HJkIrvDY0739YxF0ss5algnzhUajDClHd6/A3eizzXk=~3485746~4470337",
    "requests_url": "https://wizzair.com/en-gb",
	"ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36",
	"js_text": "(function(){c4();VtJ();tBJ();var sj=function(J3,rW){return J3==rW;};var hV=function(){return p4["window"]["navigator"]["userAgent"]["replace"](/\\|"/g,'');};function VtJ(){rG=+ ! +[]+! +[]+! +[],UI=+ ! +[],X5=+[],tA=+ ! +[]+! +[]+! +[]+! +[]+! +[]+! +[]+! +[],Mf=[+ ! +[]]+[+[]]-[],k4=! +[]+! +[]+! +[]+! +[],zr=[+ ! +[]]+[+[]]-+ ! +[]-+ ! +[],m4=+ ! +[]+! +[]+! +[]+! +[]+! +[]+! +[],vA=! +[]+! +[],tI=[+ ! +[]]+[+[]]-+ ! +[],K4=+ ! +[]+! +[]+! +[]+! +[]+! +[];}var mL=function(DN,Az){retur"
}

应参数

属性

类型

说明

sensor_data

string

sensor_data的值。使用该值可直接过Akamai

ua

String

建议使用该userAgent

返回示例

{
    "sensor_data": "2;3485746;4470337;25,26,0,2,19,13;2!%kE~xs HOWa;p!8dTn,",
    "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36"
}

代码

import random
from concurrent.futures import ThreadPoolExecutor

import requests
from curl_cffi import requests
from curl_cffi.const import CurlHttpVersion
from loguru import logger


def get_akm_ck(requests_url: str, js_url: str, ck_len: int = 0, proxy: str = None):
    ua_list = [
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36',
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36',
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36',
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36',
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36',
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',
    ]
    ua = random.choice(ua_list)

    headers = {
        'sec-ch-ua': '"Chromium";v="126", "Not;A=Brand";v="24", "Microsoft Edge";v="126"',
        'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"Windows"', 'sec-fetch-dest': 'document',
        'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1',
        'user-agent': ua
    }

    proxy = "http://127.0.0.1:7890"
    session = requests.Session(headers=headers, proxy=proxy, timeout=60, http_version=CurlHttpVersion.V2TLS,
                               impersonate="chrome124")

    try:
		js_resp = session.get(js_url)
        bm_sz = session.cookies.get("bm_sz")
        _abck = session.cookies.get("_abck")
        js_code = js_resp.text

        attack_flag = False
        for count in range(3):
            data = {
                'requests_url': requests_url,
                "_abck": _abck,
                "bm_sz": bm_sz,
                "ua": ua,
				"js_text": js_code
                "version": 1
            }
            token = "xxx"
            result = requests.post(f"https://akm.sakura-luo.top/akm_data?token={token}", json=data).json()

            data = {
                "sensor_data": result["sensor_data"]
            }
            ua = result["ua"]
            session.headers["user-agent"] = ua
            a = session.post(js_url, json=data)
            if not a.json()["success"]:
                raise Exception(a.text)
            _abck = session.cookies.get("_abck")
            bm_sz = session.cookies.get("bm_sz")

            flag = _abck.split("~")[1]

            if int(flag) == 0 or (len(_abck) >= ck_len and ck_len):
                attack_flag = True
                # logger.success(f"破盾完成,ck可用~")
                logger.debug(_abck)
                # logger.debug(f"ck长度:{len(_abck)}")
                # logger.debug(bm_sz)
                break

        if not attack_flag:
            logger.error(f"破盾失败~")
            # logger.debug(f"ck长度:{len(_abck)}")
            # logger.debug(_abck)
            return False

        return {
            "_abck": _abck,
            "bm_sz": bm_sz,
            "ua": ua,
            "ck_len": ck_len
        }
    except Exception as e:
        logger.error(e)
        return None


if __name__ == '__main__':
    Requests_url = "https://accounts.krafton.com/login"
    Js_url = "https://accounts.krafton.com/EnTh-6DVxFroF/ufYnIZJ/SBhyvwY/SzEuJGVkJJfXXuk7/dzojDwE/HhkF/CmE4FykB"
    # 如果目标网站的akm的ck是-1,ck_len一定要传入,如果是0,可以传入空
    Ck_len = 0
    Proxies = None

    ck_info = get_akm_ck(Requests_url, Js_url, Ck_len, Proxies)
    logger.success(ck_info)

    with ThreadPoolExecutor(max_workers=20) as executor:
        futures = [executor.submit(get_akm_ck, Requests_url, Js_url, Ck_len, Proxies) for _ in range(1000)]