spiderdemo中等T19题解思路

1.简单记录一下一些学习过程

来源:Pvs8foVDSBSacNHuz3BEUYu4SsFTqg2re8KACfeVgpc=
目的: 考虑经常性的忘记一些学习资料和文件,故在网络上记录一下。
本文仅限个人学习使用。

2.T19

(1)结果

在这里插入图片描述

3.分析:

debugger 直接 过掉 (永不停留 或者hook);
步骤:
###(1) 请求图片:
直接请求即可

# 这几个参数都有用
order = response['order']
base64_img = response['bg']
captchaId = response['captchaId']
offset = response['offset']

(2)图片还原
得到的图片是经过选择后的。如何找到js 中图片还原的部分呢。
在调试的时候可以通过勾选画布,刷新,一般都会断住。在这里插入图片描述
大概在这个位置,进行一些全局赋值,然后重点观察一下:

let _0x289978 = await window['aaaa'](_0x2707e4['bg'], _0x2707e4['order'])

传入了 编码后的背景图片,和返回的order。
在这里插入图片描述
然后鼠标悬停 进入restore 中的 aaaa函数中,可以进行解混淆处理,方便查看。

在这里插入图片描述
在这个aaa 函数中,先通过_0x5c0d1c 函数计算md5 与输入的order 匹配的时候就输出 对应的一个数组。
返回的数组 分割图片进行重新组合即可。
(3)计算距离:
这里通过观察,每次都已同一个图片和背景。因此可以通过边缘检测,轮廓图 来计算移动距离。

def get_distince():
    # 读取图像
    image = cv2.imread('img.jpg')
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    # Canny边缘检测
    edges = cv2.Canny(gray, 50, 150)
    # 寻找轮廓(用于确定人物区域)
    contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    person_x = 100
    # 假设最大的轮廓是人物(实际需根据图像情况调整)
    if contours:
        largest_contour = max(contours, key=cv2.contourArea)
        x, y, w, h = cv2.boundingRect(largest_contour)
        person_x = x
    else:
        print("未检测到轮廓")
    return person_x

当然上面得到的结果还需要继续 进行一些处理,然后在缩放即可。
注意计算的时候还有考虑到偏移量。

具体的方案 可以根据自己的一些思考进行修改处理。
distince = int(1020 - distince - xxx+ (1020 *offset))

接下来就是很简单的事情了。
结果如下:
在这里插入图片描述
4.总结:
整体难度一般。花点时间就可以解决。
今天本来想多写几个,但是时间不早了,下次继续。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值