天津滑块验证码

目标网址

aHR0cDovLzYwLjI5LjIwMi44Njo4MDkwLyMvVmlld0JzZHRReUpieHhMaXN0

分析

  1. 进入网站后,captcha/get 获取验证码
  2. 滑动滑块后,captcha/check 校验验证码,这里返回一个 secondKey
  3. 请求的时候带上 secondKey 就可以正常访问

加密点

直接请求后,源代码中搜索 pointJson 加密关键词,即可找到加密点
image.png
进入加密函数后,找到是一个标准的AES加密
image.png

滑块

滑块使用opencv进行识别

import cv2
def get_x(bg_img: str, tp_img: str, save_img=None) -> int:
    bg_img = cv2.imread(bg_img)  # 背景
    tp_img = cv2.imread(tp_img)  # 滑块
    bg_edge = cv2.Canny(bg_img, 100, 200)

    tp_edge = cv2.Canny(tp_img, 100, 200)

    res = cv2.matchTemplate(bg_edge, tp_edge, cv2.TM_CCOEFF_NORMED)

    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
    print(min_val, max_val, min_loc, max_loc)
    if save_img: # 对滑块进行校验,保存到本地查看结果
        bg_img = cv2.imread(save_img)
        cv2.rectangle(bg_img, (0, 0), (max_loc[0], 200), (0, 0, 255), 1)
        cv2.imwrite('3.png', bg_img)  # 保存在本地

    return max_loc[0]
    
bg_name = "bg.png" # 背景图片
tp_name = "tp.png" # 滑块
xx = get_x(bg_name, tp_name) # 获取到xx,为滑动的距离

构建加密参数

data = {
        "captchaType": "blockPuzzle", # 为固定值
        "pointJson": result, # 距离加密后的参数
        "token": token, # 验证码返回的token
    }

使用这个参数进行正常访问

js加密部分

// js 加密库中,直接用填充方式就行了
CryptoJS = require("crypto-js")

function run(text,secretKey) {
  k = CryptoJS.enc.Utf8.parse(secretKey)
  srcs = CryptoJS.enc.Utf8.parse(text)
  var en = CryptoJS.AES.encrypt(srcs, k, {
    mode: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7
  });
  console.log(en.toString())
  return en.toString()
}
text = '{"x":114.7,"y":5}'
secretKey = "JnVdVHxGJgxFz4EI"
run(text,secretKey)

end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值