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.总结:
整体难度一般。花点时间就可以解决。
今天本来想多写几个,但是时间不早了,下次继续。
1965






