字体反爬

字体反爬

点点

2021-03-29 09:04 阅读 373 喜欢 0

例如我们定义一个字体<1> 但是对应的svg显示为<5> ,那么肉眼看到的是5 ,通过源码或抓取得到的确是1。 之前的时候是通过一个字体文件,现在慢慢演变为动态字体,每次看到的都不同,所以现在我们需要对字体进行解析,得到最终的数据。

反爬

http://glidedsky.com/level/crawler-font-puzzle-1 ,关于字体反爬的一个课题。

目标地址

根据给予的地址,可以看到不同的源码与数字,那么我们可以通过控制台找到这种字体,通过页面中的base64来指定的字体文件。 先将base64 转为 ttf 文件

代码或工具都可以: https://www.motobit.com/util/base64-decoder-encoder.asp 工具转换。

代码转换(nodejs):

const base64str = xxxx由于太长,此处不写了;//data:font;charset=utf-8;base64, 之后的内容,不要逗号 const fs = require('fs'); fs.writeFileSync('./demo.ttf',Buffer.from(base64str,'base64')); 通过fontcreator软件打开后可以看到,字体展示与unicode标注的都是不同的。

现在,我还没找到除了ocr识别外的更好的办法,之前看文档有说可以从ttf中拿到映射关系的,不过没处理出来..能力有限。而且,这个我也没有使用ocr,直接使用了一个下标判断。

将ttf解析为xml ,并转为对象,然后获取下标,得到映射

const font = require('font-carrier'); const xml2json = require('xml2json');

//加载字体 let transFont = font.transfer('./demo.ttf'); let str = transFont.toString(); let json = xml2json.toJson(str); let obj = JSON.parse(json); let fonts = obj.svg.defs.font.glyph; let map = {}; //就目前来看,还没找到对应的映射关系,比较理想的是,根据下标,除去第一个,从0开始。 fonts.forEach((t, i) => { if (i>0) { let code = t.unicode;//4 let index = i - 1;//0 //对应的意思就是:给浏览器一个字符串4 ,显示出来是 0 。 map[code] = index; } }) console.log(map); 剩下的就是一页一页的抓取,然后获取ttf并解析,最终进行匹配了..

转载请注明出处: http://sdxlp.cn/article/zitifanpa.html


如果对你有用的话,请赏给作者一个馒头吧 ...或帮点下页面底部的广告,感谢!!

赞赏支持
提交评论
评论信息(请文明评论)
暂无评论,快来快来写想法...
推荐
对iPhone13Pro系列来说,新增的功能中最亮眼的一个就是可以拍摄ProRes视频,但是对于一些小伙伴们来说,并不知道iPhone13Pro怎么拍ProRes视频?那么下面就让点点给小伙伴们介绍一下具体的拍摄教程。
如何在荣耀手机中调整图标大小,我们可以根据自己的使用体验去自定义一些手机的内容,其中桌面图标是我们使用手机的第一使用体验,过大的手机软件图标会影响我们的桌面应用放置量。
关于js的编译和压缩,之前做过一个小工具了,主要就是自己项目成员大都没有这部分的技能,导致发布的时候总需要去编译压缩下
虽然不承认,但是win7确实不适合现在工作使用了,毕竟存在安全隐患。 之前,都是因为win7系统对于配置要求不高,而且系统稳定兼容性好,所以也就一直使用。但是,现在如果想升级新版的win10系统,旧电脑的配置也不知道可以不可以。
在科技和网络发达的现在,以前人们上下班随着从拿纸质卡进行打卡,变成了刷工作卡进行打卡,再到指纹打卡,再到现在更为便利的直接使用像钉钉这样的考勤软件来进行打卡,人们包包里的东西变的越来越少。而最近,有的小伙伴在使用钉钉打卡后,有这样的一个疑惑,就是钉钉电脑版可不可以将考勤记录导出来呢?
手机是我们常用的生活工具,给手机增加一个密码不安全,给手机软件再增加一个密码就更加安全了,很多用户再使用手机的时候都想要知道荣耀手机怎么给软件加密码,下面就让小编给小伙伴们介绍一下给软件加密码的方法。
前几天出了一起qq闪照的破解方法,不想因为当天的点击率到了2万加,被不怀好意的朋友给举报啦!呵呵,有的小伙伴在评论下留言需要制作的方法,那么今天它来了。
我们在使用微信聊天的时候经常会用语音来进行沟通,平时的沟通没有什么问题,不过有很多微信群都是有授课性质的。有的老师在使用微信给成员讲课的时候都是采取语音发送的。用语音可以声情并茂,能很大程度上提升授课质量。不过对可以学员也比较麻烦,因为不太好记录。那么我们应该要怎么使用微信操作,将语音聊天记录先保存下来,然后再自己慢慢听呢?