破解滑块验证码思路(XX预约验证码)

1 篇文章 1 订阅

1.图片报文转换了解

先上图:
在这里插入图片描述
像遇到上面的这种图片,通过接口可以获取返回的数据。返回该大串响应报文是图片的Base64编码,可转换成图片。可以通过http://tool.chinaz.com/tools/imgtobase/该网站进行测试,如图:
在这里插入图片描述

第一部分是固定的,不需要变换。第二部分是通过fiddler抓包获取的数据,可以拿到数据后进行转换,测试一下。

上面的内容只是了解报文与图片之间的转换逻辑。下面进行操作。

2.报文转换成图片

可以发现响应报文是Base64转换的,然后就可以用pythonbase64库来解决。例如返回的报文如下:

data = {
    "background": 'SSDJKSJDJKSJKSJJDSJJDXXXXXXXXXXXXXXX',
    "slider": 'xxxskskkleklrekrkjejkredsdsddsdsdsdsdsdss'
}

获取道数据后,用python 转换成图片background.pngslider.png

background = data['background']  # 获取数据
slider = data['slider']

with open('background.png', 'wb') as f:  # background.png 为图片的名称,注意路径那些
    f.write(base64.b64decode(background))
with open('slider.png', 'wb') as f:
    f.write(base64.b64decode(slider))

然后查看background.pngslider.png图片是这样的:
在这里插入图片描述
在这里插入图片描述

3.获取滑块X轴坐标

部分代码如下
全部代码点击下载

# -*- coding: utf-8 -*-

class SlideCrack(object):
    def __init__(self, gap, bg):
        """
        init code
        :param gap: 缺口图片
        :param bg: 背景图片
        """
        self.gap = gap
        self.bg = bg

    @staticmethod
    def image_edge_detection(img):
        edges = cv2.Canny(img, 100, 200)
        return edges

    def discern(self):
        img1 = self.clear_white(self.gap)
        img1 = cv2.cvtColor(img1, cv2.COLOR_RGB2GRAY)
        slide = self.image_edge_detection(img1)

        back = cv2.imread(self.bg, 0)
        back = self.image_edge_detection(back)

        slide_pic = cv2.cvtColor(slide, cv2.COLOR_GRAY2RGB)
        back_pic = cv2.cvtColor(back, cv2.COLOR_GRAY2RGB)
        x = self.template_match(slide_pic, back_pic)
        # 输出横坐标, 即 滑块在图片上的位置
        return x


if __name__ == "__main__":
    # 滑块图片
    image1 = "slider.png"
    # 背景图片
    image2 = "background.png"

    sc = SlideCrack(image1, image2)
    x = sc.discern()

4.验证x

最后拿获取到的X轴去postman验证是否可以。
经过多次测试,脚本returnx 应该比实际值大2~3,所有用postman去请求时应该用 (x-2)的值去请求。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值