云片滑动验证码
本篇文章仅用于交流与学习严禁用于任何商业与非法用途否则由此产生的一切后果均与作者无关如有侵权请联系作者本人进行删除。感谢关注您的关注和点赞就是我的动力1.逆向目标aHR0cHM6Ly93d3cueXVucGlhbi5jb20vcHJvZHVjdC9jYXB0Y2hh分析参数i,k的加密过程2.逆向分析先看加载验证码图片的接口,这里的i,k都可以写死,能够正常请求,我们需要在返回的结果中把背景图和滑块给保存下来,同时后续验证时需要带上这里返回的token接下来看验证接口,打上断点跟栈分析,很容易发现这里的就是目标参数的生成位置这里的入参我们需要分析distanceX和points,可以很清晰的看出,distanceX应该是和滑块滑动的距离有关,points就是滑块的轨迹了继续往上跟栈,找到了distanceX生成的位置,这里我们只需要关注this.alertImgTag.width和this.offsetX,第一个参数是滑块的宽度,第二个就是滑块滑动的距离,距离使用ddddocr识别这里的滑块宽度其实也是验证码加载接口返回的,只不过这里对图片进行了缩放,经过多次测试发现,需要对返回的宽度除以1.57就行了,同时使用ddddocr识别出来的距离也需要进行处理,除以1.45至于滑块的轨迹,这里的也是类似[x,y,time],x起点基本是在1000左右浮动,终点跟你滑动的距离有关,多滑几次正确的轨迹,让后把轨迹丢给ai,让他给你生成,def verify(): detddddocr.DdddOcr(detFalse,ocrFalse) with open(bg.png, rb) as f: bg_img f.read() with open(slice.png, rb) as f: slice_img f.read() res det.slide_match(slice_img, bg_img) return int(res[target][0]/1.45)def generate_slide_track(distance): # 起始坐标完全贴合你的真实样本 start_x random.randint(1000, 1006) start_y random.randint(1970, 1985) # 固定点数55 ~ 60 point_count random.randint(55, 60) # 初始时间戳真实样本起始 50~230 ts random.randint(50, 230) track [] current_x start_x prev_x start_x for i in range(point_count): # 1. X 步长严格 2~3带加速感前慢后快 if i point_count * 0.8: step random.randint(2, 3) else: step random.randint(2, 4) # 最后稍快 current_x step # 防止超距离 if current_x start_x distance: current_x start_x distance # 2. Y 坐标90% 不动10% ±1完全复刻真实样本 if random.random() 0.1: current_y start_y random.choice([-1, 1]) else: current_y start_y # 3. 时间戳前慢后快间隔贴合真实样本 if i point_count * 0.85: ts random.randint(6, 20) else: ts random.randint(10, 40) track.append([current_x, current_y, ts]) prev_x current_x if current_x start_x distance: break # 最后一点强制对齐距离 if track: track[-1][0] start_x distance # 补全点数到 55~60如果提前走完 while len(track) 55: last track[-1] ts random.randint(10, 30) track.append([last[0], last[1] random.choice([-1, 0, 0, 1]), ts]) return track入参都分析完了,接下来看看他们的加密过程这里的i是经过的AES加密,key和iv都是在上面mt.getRandomStr(16)生成的k就是经过标准的RSA加密生成的3.逆向结果