字体反爬

字体反爬

点点

2021-03-29 09:04 阅读 485 喜欢 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好像落寂了不少,不过玩游戏的小伙伴好像还是很多使用的,QQ不经常用的情况下,换手机或者需要传输大文件的时候,发现密码忘了,手机号也换了不能用了该怎么解决呢?
近期很多当红app被央视点名,主要原因是我们个人的信息被过度的无情泄露了,微信聊天中我们可能用到很多私密的东西,比如身份证,银行卡等。即使我们有防范意识,在我们的聊天中删除了从我们手机的图库中删除啦。我们感觉可以放心啦.真的是这样吗?真的可以放心了吗?看一下下面的文章,你会有自己的选择。
这几天电信发生的大面积网络不能使用的问题,很多小伙伴在正常能上网时上不去,网络对于手机来说是至关重要的,有些小伙伴在使用iPhone手机的时候偶尔遇到无法上网问题,不知道如何解决,接下来小编就给小伙伴们介绍一下具体的操作步骤。
在21世纪,网络已经是生活中必不可少的部分,许许多多的小伙伴们逐步踏入互联网行业,因而也催生了许多职业,比如说网页编辑与制作,网络客服,短视频编辑及制作等等。
微信是我们常用的交流工具,我们在平时聊天中会发送图片产生内存过大的问题,很多小伙伴对此非常头疼,那么我们该怎样处理哪,点点告诉小伙伴们在电脑端怎么去查看导出并删除的方法。
由很多软件安装时是有操作系统位数限制的,64位的程序在32位的操作系统将不能安装成功,而64位的系统是可以安装32位应用程序的。
日常生活中,咱们有好多用微信的小伙伴会收到好多好多的广告,那怎样去关闭哪?让我们减轻烦恼,跟点点来看看吧!
智能化的时代,上班打卡必备神器,再也不怕扣钱了