(注:如有侵权,请联系作者删除)
目标网站:aHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tLw==
极验3参数逆向分析
登录后就会出现调试接口,需要按顺序发送这三个请求才能正确获取到我们的需要点选的图片链接
拼接极验域名后的图片长这样
遇到这种顺序点选的验证码,我们需要明确自己的思路才能继续下一步
1、首先抓包到验证的接口,查看请求所需的参数gt、challenge、lang、pt、client_type、w(关键参数)、callback
2、逆向出生成w参数方法和所需传入的变量
3、我们可以看到传入的参数有这些gt, challenge, pic, c1, s1, pos,passtime,然后关注pos这个变量,明显是点选后的坐标,这个坐标是经过处理的,我这里给出我的示例代码
positions = ["横坐标1","纵坐标1","横坐标2","纵坐标2"]
pos = []
for i in positions:
poi_x, poi_y = (i[0] + i[2]) / 2, (i[1] + i[3]) / 2
poi_x, poi_y = int(round(poi_x / 333.375 * 100 * 100, 0)), int(
round(poi_y / 333.375 * 100 * 100, 0))
pos.append(f'{poi_x}_{poi_y}')
pos = ','.join(pos)
4、这些参数都可以生成后,然后我们考虑的就是pos识别的问题了,也是本文的重点
Yolov5目标检测
https://github.com/ultralytics/yolov5
这个你们有兴趣的话可以去看看视频学习,也挺简单的。
1、准备数据集
2、labelimg标注数据3、训练模型后使用
我训练200张100轮后的识别成功率还是很高的,这样我们就能提取图片中题目和目标文字的位置,然后把它们裁剪下来了。
images = {'ques': [], 'target': []}
img = Image.open(BytesIO(detect_file)).convert('RGB')
img = img.resize((640, 640))
scale_x, scale_y = 640 / 344, 640 / 384
# 对图像进行目标检测
img_tensor = torch.tensor(np.array(img)).float() / 255.0
if img_tensor.ndimension() == 3:
img_tensor = img_tensor.unsqueeze(0).permute(0, 3, 1, 2).to(self.device)
pred = self.model(img_tensor)[0]
pred = non_max_suppression(pred, conf_thres=0.7, iou_thres=0.45)[0]
# 遍历每个目标框
for i, det in enumerate(pred):
xyxy = det[:4].cpu().numpy()
xyxy = scale_boxes(img.size, xyxy, img.size).astype(int)
label = self.model.names[det[-1].item()]
position = [int(xyxy[0] / scale_x), int(xyxy[1] / scale_y), int(xyxy[2] / scale_x), int(xyxy[3] / scale_y)]
print(label,position)
if label == 'ques':
images['ques'].append({'position': position})
else:
images['target'].append({'position': position})
然后按照从左到右的顺序给题目的文字顺序进行排序,排序后可以与target每个字之间的相似度进行比较,取相似度最高的target的坐标依次存入列表中。
images['ques'] = sorted(images['ques'], key=lambda x: x['position'][0])
Siamese Network
https://github.com/bubbliiiing/Siamese-pytorch
孪生神经网络有两个输入(Input1 and Input2),将两个输入feed进入两个神经网络(Network1 and Network2),这两个神经网络分别将输入映射到新的空间,形成输入在新的空间中的表示。通过Loss的计算,评价两个输入的相似度。
1、准备数据集,这一步一开始我是人工识别然后放进文件夹的,就给我累够呛,后面我参考另外一篇文章发现可以使用超级鹰的汉字识别,编写代码识别然后放入文件夹中,省事了很多。
2、训练模型,只要数据集你构建的好,最终成功率就会高,我建了518个文件夹,每个文件夹大部分是2、3张图片,但是最终的成功率也有87%左右,如果你的电脑不适合训练模型,可以去算力平台租机训练,价格大概是几元1小时。
最后效果图
需要的可以私聊我