本文仅供学习,请勿用作其他用途。
官网: aHR0cHM6Ly9kdW4uMTYzLmNvbS90cmlhbC9qaWdzYXc=
请求流程
1.获取图片
2.下载图片并识别缺口
3.b请求
4.获取validate参数
先看获取图片这一步,请求参数有
经过测试,fp和cb是需要变的,先看cb参数,根据请求图片的调用栈回追
最后找到了这里,就是一个32位的uuid
没啥难的 根据流程抠代码就行。
看fp参数,也是看调用栈往回追
跟到这儿发现是从window里取的,那就hook一下这个gdxidpyhxde
hook到之后看调用栈
跟到了这里 这个方法名字是
没有参数传入,说明直接调用这个就会返回fp参数,接下来就又是抠代码环节了,这里边检测环境有点多,我是单步调试的,然后补了一下,先贴一部分吧
请求的结果
接下来就是下载图片然后识别缺口距离
def get_dis(img_bg_path, img_slider_path):
"""
:param img_bg_path: 滑块背景图本地路径
:param img_slider_path: 滑块图片本地路径
:return: 返回滑动距离
"""
img_bg = cv.imread(img_bg_path)
img_bg_gray = cv.cvtColor(img_bg, cv.COLOR_BGR2GRAY)
img_slider_gray = cv.imread(img_slider_path, 0)
res = cv.matchTemplate(img_bg_gray, img_slider_gray, cv.TM_CCOEFF)
min_val, max_val, min_loc, max_loc = cv.minMaxLoc(res)
return max_loc[0]
接下来是b请求
看到有三个参数,测试发现d参数是加密后的,那就继续回溯调用栈
最后跟到这里 首先t生成一个随机的字符串,然后第二个断点把随机字符串加密进去,第三个断点生成最终的d参数,里边有一些参数可以固定死,扣代码就行了
最后一个请求
三个参数 cb,actoken,data。 cb之前说了 ,先看这个actoken断点调试发现是在这里生成的
也是直接扣代码。
data参数断点发现在这里
到这里发现轨迹被加密 然后找到轨迹是在这里被加密,然后添加到数组里
加密用到了获取图片返回的token,每次x的距离,y值(可以固定)和时间
可以根据他记录的轨迹来自己生成一个随机的,也是最后直接抠代码就行。
最后请求结果
欢迎一起交流学习QQ: 1281410804