字体反爬

字体反爬

点点

2021-03-29 09:04 阅读 605 喜欢 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


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

赞赏支持
提交评论
评论信息(请文明评论)
暂无评论,快来快来写想法...
推荐
我们经常使用微信,每天很多小伙伴都会发几条朋友圈。撒狗粮的,发心情的,发动态的,发广告的,发游戏链接等,可是朋友圈不显示怎么办那?下面请跟我来,分分钟钟学会。
一般通过手机QQ、微信等应用接收或下载的音乐文件在层层文件夹的下面,所以使用华为音乐不能够直接搜索到,好麻烦,基本视频合成剪辑自己合成时候好难,为这个音频用了半个小时的时间,具体解决办法跟点点来看一下吧!
微信中打开Word、Excel等文档,会保存在一个目录下。但是,微信把这个目录隐藏很深,路径不易记住,所以,我把这个路径记下来。 在安卓系统中可以安装ES文件浏览器来获得。如果找不到这个路径,或者显示为空,也可以转发到另一台安卓机上的微信号,在那台打开后再保存下来。
随着网络普及,视频、语音聊天成了小伙伴们又一种不可或缺的通讯方式,但是很多的时候,会出现这样或者那样的问题,用QQ语音聊天时对方听不到我的声音,而我能听到对方的声音。针对这个问题,作如下详细解答,帮助小伙伴们轻松解决这个难题。
你是否也有过这样的经历,翻看微信相册时,突然发现一些图片已经过期无法查看,它们或许是曾经的朋友圈,或许是某个特别的日子,亦或许是一段难忘的回忆。这些图片虽然已经过期,但它们所承载的记忆却是永恒的。
在日常生活中,每个人都有自己的风格,例如电脑微信图标,很多小伙伴们喜欢把任务栏的图标隐藏起来,变得更加简约。一定会有多数小伙伴还不知道如何去隐藏微信图标吧,和如何修改微信电脑版的标签与权限呢?
小伙伴们知道如何把微信/QQ里的语音导出为mp3吗?下面就跟小伙伴们分享一下。
最近很多的小伙伴都在问小编,QQ通过离线传输的文件找不到了,是不是也会过期?是不是会接收不到?首先它是肯定会过期的,哪怎么找到离线接收的文件?