某像滑块还原

声明:本文仅限交流学习使用,请勿使用在任何非法商业活动,禁止用于非法用途。否则后果自负。如有侵权,请告知删除,谢谢

分析流程

1.获取验证码

2.验证码还原

3.环境检测分析

一、获取验证码

1.某像中完整的验证码是长在叼样的

某像滑块还原_第1张图片

2.而接口返回的验证码图片是撕裂的

某像滑块还原_第2张图片

3.话不多说先看看验证码接口图片参数、OK了这些参数没什么东西,下面看下图片还原

w: 300    验证码宽固定
h: 150    验证码高固定
s: 50     未知固定
ak: 99de95ad1f23597c23b3558d932ded3c    滑块
c: 6266217fsZ7JJoGNGHTUbHx82jSrbDTdMxgJ9xA1    随机数
jsv: 1.5.26.108    滑块版本
aid: dx-1650860742126-54245604-3    时间戳随机数
wp: 1    
de: 0
uid: 
lf: 0
tpc: 
cid: 95786668    随机不重要
_r: 0.699649593094317    随机小数

某像滑块还原_第3张图片

二、验证码还原

1.Canvas断点调试、其中 a.drawImage 截切图片具体原理百度、既然要截切图片我们就得知道这组数数组、往上跟栈

r , i 图片宽高、o图片被分裂的份数、32 组说明这张验证码被平均切割了32份,是与不是自己数了蛤

某像滑块还原_第4张图片

2.调用En函数传入图片链接生成数组

某像滑块还原_第5张图片

 3.取图片链接后半部分值进行了 charCodeAt 转码、这里也没啥东西,继续看图片还原

某像滑块还原_第6张图片

 4.图片拼合的逻辑照着他写的搬就行了

某像滑块还原_第7张图片

 5.最后附上图片拼合的源码

import requests
import numpy as np
from PIL import Image
from io import BytesIO

def ar(r):
    """ 生成数组的字符串 """
    t = []
    for n in range(len(r)):
        e = ord(r[n])
        if 32 == n:
            break
        while e % 32 in t:
            e += 1
        t.append(e % 32)
    return t


def img_recover(location_array, img_url):
    """ 图片拼合 """
    img = np.array(Image.open(BytesIO(requests.get(url=img_url, verify=False).content)))
    new_img = np.zeros((200, 400, 3), dtype=np.uint8)
    lk = len(location_array)
    ck = int(400 / lk)
    for cp in range(lk):
        c = location_array[cp] % lk * ck
        xp = cp % lk * ck
        slice_img = img[0: 200, c: c + ck]
        new_img[0: 200, xp:xp + len(slice_img[0])] = slice_img
    return new_img

p1 = "你的验证码图链接"
img_recover(self.ar(p1[p1.rfind('/') + 1: p1.rfind('.')]), p1)

三、测试结果

某像滑块还原_第8张图片

你可能感兴趣的:(JS逆向,爬虫,python)