js逆向-猿人学(7-8)动态字体-图文点选

举报
冬晨夕阳 发表于 2022/03/29 23:18:20 2022/03/29
【摘要】 猿人学爬虫比赛第七题:《动态字体,随风漂移》 地址: http://match.yuanrenxue.com/match/7 召唤师名字是在html 的 script 标签中,字体是从接口中返...

猿人学爬虫比赛第七题:《动态字体,随风漂移》

地址: http://match.yuanrenxue.com/match/7

在这里插入图片描述


召唤师名字是在html 的 script 标签中,字体是从接口中返回。

在这里插入图片描述

先请求match/7,然后请求 api/match/7
在这里插入图片描述
api/match/7返回的json数据,里面data数组有10个字体(胜点) 和 woff文件的地址。

这种动态字体现在已经有固定的处理方式了,用 python处理字体的库 fontTools。

先保存一份woff字体,查看一下内容。

# -*- coding: utf-8 -*-
# @Author  : lx

import base64
import requests
headers = {
    'User-Agent': 'yuanrenxue.project',
}

data =requests.get(f'http://match.yuanrenxue.com/api/match/7',headers=headers).json()

woff = data['woff']
with open('7.woff','wb') as f:
   f.write(base64.b64decode(woff))


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

转成xml查看

from fontTools.ttLib import TTFont
font = TTFont('7.woff')
font.saveXML('7x.xml')

  
 
  • 1
  • 2
  • 3

xml文件中 有对应关系, extraNames是按照0-9的顺序排序的。
在这里插入图片描述

接下来,把xml中的name提取出来构建一个map,
{undefined
‘unif689’: 0,
‘unia924’: 1,
‘unif637’: 2,
‘unib526’: 3,
‘unic831’: 4,
‘unib348’: 5,
‘unie283’: 6,
‘unib827’: 7,
‘unif145’: 8,
‘unib793’: 9
}

和 json中的进行替换就能获取到需要的数据了。


猿人学爬虫比赛第八题:《图文点选》

地址: http://match.yuanrenxue.com/match/8

在这里插入图片描述
这种题和js没什么关系,不过多描述了。

处理点选验证码的逻辑:
1、获取资源文件(需要识别的字、验证码图片)
2、图片处理(二值、去边去线、降噪等)
3、自己训练识别模型或者使用第三方OCR
4、向api发送点击后的请求(一般获取点击位置即可)


抓包可以发现,资源文件都在api中:http://match.yuanrenxue.com/api/match/8_verify

下面查看验证码图片区域:
在这里插入图片描述
我按照可点击的像素格进行点击,查看返回结果。
在这里插入图片描述
可以看到,提交的 answer就是点击的位置,并且小方格下标为点击的位置。

那么可以自定义一个位置字典,{“字1”:“155”,“字2”:“166”,“字3”:“175”,…}

然后把验证码识别之后的结果和需要点击的字对比,确定好位置,发送验证请求即可。

文章来源: blog.csdn.net,作者:考古学家lx,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_43582101/article/details/112987961

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。