Rachadura de código de verificação de controle deslizante de 4ª geração do Extreme Experience

prefácio

A quarta geração de experiência extrema parece ser muito mais simples, sem nenhuma habilidade, a parte ambiental ganhou diretamente em 5 minutos.

URL: aHR0cHM6Ly93d3cuZ2VldGVzdC5jb20vYWRhcHRpdmUtY2FwdGNoYS1kZW1v

1. Análise

Vá diretamente para o site oficial, deslize o controle deslizante para abrir o console e você
insira a descrição da imagem aqui
insira a descrição da imagem aqui
verá que há uma solicitação de verificação. A solicitação retornada por ele deve ser o local para enviar a distância móvel. Em seguida, observe quais dados são enviados, e você pode ver o extremo O teste antigo ainda é o parâmetro w. (Outros parâmetros podem ser obtidos na solicitação de carregamento, então não vou entrar em detalhes aqui, os leitores podem ir e ver por si mesmos)
blog.csdnimg.cn/6ddc72aafa984ba8bffeff9107279557.png)
Abra o iniciador, suba para a pilha e esta etapa é quase a mesma
insira a descrição da imagem aqui
. w parâmetro que queremos
insira a descrição da imagem aqui
. Olhando para o acima, o método de chamada de r é dado diretamente desta forma. Agora siga e olhe para ele. Este método
insira a descrição da imagem aqui
pode ver os dois parâmetros passados. O primeiro parâmetro é obviamente a informação do movimento distância e tempo. Independentemente disso, olhe o segundo parâmetro, isso é um objeto, e não há como copiá-lo diretamente (sou muito preguiçoso, tenho que baixá-lo, clique duas vezes no segundo parâmetro, você pode descobrir que neste método r, apenas um de seus valores é usado)

insira a descrição da imagem aqui
Podemos copiar este valor (isso seria muito confortável), e aqui, a entrada de parâmetros é basicamente clara.
insira a descrição da imagem aqui
A seguir, não se preocupe, crie o ambiente, economize tempo, então começaremos a observar seu js diretamente, podemos descobrir que é um js inteiro carregado e depois mexer nele, isso não está certo, apenas pegue tudo para baixo, um garanhão.
insira a descrição da imagem aqui
Depois de derrubá-lo, o Xiaomo alterou o código e analisamos diretamente, aqui é necessário apenas um valor de t, então é só passar esse valor como parâmetro.
insira a descrição da imagem aqui
Em seguida, exporte o r inteiro e pronto.
insira a descrição da imagem aqui
Em seguida, é claro, em vez de executá-lo diretamente localmente, jogue-o no navegador para ver se o código pode ser executado normalmente. O valor é normal, e aí esse parâmetro pode ser passado na requisição (não vou demonstrar aqui, é perda de tempo)
insira a descrição da imagem aqui
Depois é claro que é jogado direto no nosso nodejs para construir.

window=global;
document={
    
    };
better_proxy = function (o, callerName){
    
    
    return new Proxy(o, {
    
    
        set(target, property, value){
    
    
            console.table([{
    
    "类型":"set-->","调用者":callerName,"属性":property,"值":value}]);
            return Reflect.set(...arguments);
        },
        get(target, property, receiver){
    
    
            console.table([{
    
    "类型":"get<--","调用者":callerName,"属性":property,"值":target[property]}]);
            return Reflect.get(...arguments);
        },
    }
    );
}
window = better_proxy(window, "window")
document = better_proxy(document, "document")

Aqui está um proxy simples para você, assim que criar um objeto (o método é um pouco estúpido, mas não precisa pensar muito, basta preenchê-lo sem pensar). .
insira a descrição da imagem aqui
A seguir estão os dois que adicionei casualmente: Sempre que adicionar um objeto, lembre-se de adicionar um proxy a ele.

window=global;
document={
    
    };
better_proxy = function (o, callerName){
    
    
    return new Proxy(o, {
    
    
        set(target, property, value){
    
    
            console.table([{
    
    "类型":"set-->","调用者":callerName,"属性":property,"值":value}]);
            return Reflect.set(...arguments);
        },
        get(target, property, receiver){
    
    
            console.table([{
    
    "类型":"get<--","调用者":callerName,"属性":property,"值":target[property]}]);
            return Reflect.get(...arguments);
        },
    }
    );
}
window = better_proxy(window, "window")
document = better_proxy(document, "document")
window.location = {
    
    
    "ancestorOrigins": {
    
    },
    "href": "https://www.geetest.com/adaptive-captcha-demo",
    "origin": "https://www.geetest.com",
    "protocol": "https:",
    "host": "www.geetest.com",
    "hostname": "www.geetest.com",
    "port": "",
    "pathname": "/adaptive-captcha-demo",
    "search": "",
    "hash": ""
};
window.navigator= {
    
    
    userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
    appName:'Netscape'
}
document.body = {
    
    }
document.head = {
    
    }
document.documentElement = {
    
    }
window.location = better_proxy(window.location, "window.location")
window.navigator = better_proxy(window.navigator, "window.navigator")
document.body = better_proxy(document.body, "document.body")
document.documentElement = better_proxy(document.documentElement, "document.documentElement")

Na verdade, todos os suplementos acima estão quase prontos, faltando o último (faça você mesmo), parece que não é muito bom dar todos.
insira a descrição da imagem aquiO resultado é o seguinte:
insira a descrição da imagem aqui
não fale sobre nenhuma confusão, apenas invente violentamente, mas, existem tantos segundos parâmetros, todos eles são usados ​​para criptografia?
insira a descrição da imagem aqui
Como uma pessoa preguiçosa, coloquei diretamente um agente nele e você pode ver que um pt é usado para tantos, então apenas dê um pt e pronto.
insira a descrição da imagem aqui
Neste ponto, este experimento extremo 4 acabou.

Dois, verificação

Então acabou, vamos jogar sem verificação, volte para a solicitação de carregamento anterior e você pode ver que muitos parâmetros são exigidos pela solicitação de verificação. Ele também contém a imagem de fundo do código de verificação e a imagem da lacuna do código de verificação.
insira a descrição da imagem aqui
Peça ao carteiro para convertê-lo em python e, em seguida, podemos executar a próxima etapa, o reconhecimento da lacuna do código de verificação.
insira a descrição da imagem aqui
Usei o código do grandalhão abaixo.
Como usar python para identificar a lacuna na verificação do slider code_python

import cv2
def identify_gap(bg,tp,out):
 '''
 bg: 背景图片
 tp: 缺口图片
 out:输出图片
 '''
 # 读取背景图片和缺口图片
 bg_img = cv2.imread(bg) # 背景图片
 tp_img = cv2.imread(tp) # 缺口图片
 
 # 识别图片边缘
 bg_edge = cv2.Canny(bg_img, 100, 200)
 tp_edge = cv2.Canny(tp_img, 100, 200)
 
 # 转换图片格式
 bg_pic = cv2.cvtColor(bg_edge, cv2.COLOR_GRAY2RGB)
 tp_pic = cv2.cvtColor(tp_edge, cv2.COLOR_GRAY2RGB)
 
 # 缺口匹配
 res = cv2.matchTemplate(bg_pic, tp_pic, cv2.TM_CCOEFF_NORMED)
 min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res) # 寻找最优匹配
 
 # 绘制方框
 th, tw = tp_pic.shape[:2] 
 tl = max_loc # 左上角点的坐标
 br = (tl[0]+tw,tl[1]+th) # 右下角点的坐标
 cv2.rectangle(bg_img, tl, br, (0, 0, 255), 2) # 绘制矩形
 cv2.imwrite(out, bg_img) # 保存在本地
 
 # 返回缺口的X坐标
 return tl[0] 

Basta passar duas fotos, e o último parâmetro é a posição da imagem do resultado de entrada. (As duas fotos estão no corpo de retorno devolvido pela solicitação de carga)
insira a descrição da imagem aqui
Finalmente, obtém-se a distância que ele precisa percorrer.
Chame js novamente, apenas passe na distância do movimento (passe para o primeiro parâmetro)

function init(data_x){
    
    
    let mydata = '{"setLeft":'+data_x+',"passtime":1915,"userresponse":'+data_x+'.81178591310345,"device_id":"自己搞(网页上都有的)","lot_number":"自己搞(网页上都有的)","pow_msg":"自己搞(网页上都有的)","pow_sign":"自己搞(网页上都有的)","geetest":"captcha","lang":"zh","ep":"123","rigp":"199241198","yeg6":"d6w9","em":{"ph":0,"cp":0,"ek":"11","wd":1,"nt":0,"si":0,"sc":0}}'
    mydata_obj={
    
    
        "pt": "1",
    }
    mydata_obj = better_proxy(mydata_obj, "mydata_obj")
    result = window.code(mydata, mydata_obj)
    console.log(result)
}
module.exports = {
    
    
    init
}

insira a descrição da imagem aqui

Resumir

Não é difícil, está ficando cada vez mais fácil, e os iniciantes podem usá-lo como um curso introdutório

aprender de

Como identificar lacunas no slider captcha com python_python

Acho que você gosta

Origin blog.csdn.net/qq_41866988/article/details/132020587
Recomendado
Clasificación