某律师执业诚信信息公示平台字体加密解决思路
本文章只做技术探讨,请勿用于非法用途。
目标网站
为持续加深对律法的学习, 我们需要再来收集一些数据。
本文来解决 credit.acla.org.cn/ 这个网站的字体加密问题。
网站分析
网站反爬
这个网站的各种反爬措施还挺多的, 接口加密啊, 验证码啊(每个页面都有), 无限 debugger 啊, 什么的, 还是挺烦的, 如果不要求效率的话可以考虑用 selenium 来过掉, 这里重点来解决一下字体加密的问题。
加密分析
首先来看下字体加密什么样子。
如图, 为律所详情页的截图, 可以看到啊, 这个 标签下的字体为加密字体, 这个网站他大多数数据信息都会像这样来做一个加密。
开整
首先来说下解决的方法。
找到字体文件。
确定文件字体与网站字体的映射关系。
替换网站字体。
字体文件获取
刷新页面, 勾选字体栏即可看到返回的页面, 直接下载下来即可。
有些网站可能会返回多个字体文件来迷惑你, 这时候可以全局搜索 ttf 等字体文件的关键词, 来读相关代码来找到前端页面解密时用的具体是字体文件。
字体文件解析
字体文件处理可以用 TTFont 工具, 我们先将文件解析成可读的 xml 格式来看下这到底是什么个东西。
下载字体文件保存为本地 font.ttf, 然后解析为 font.xml。
可以看到文件里是一些映射关系, 和一些字形的信息, 如果是简单的数字加密或是很少的字体加密的话, 这一步直接拿到映射关系就可以用了, 但是这个网站他每次的字体文件都不一样, 所以这种简单的映射关系不可用。
在字体编辑软件里也可以看到是对哪些字体进行了修改加密, windows 可以用 font creator , mac 上我用的是 FontForge 来解析的。
映射关系获取
上一步我们拿到了字形信息, 这里来生成提供一个通用的方法来做映射关系。
font.ttf 文件中通过 unicode 码来标记对应的字体的字形信息, 我们也可以用同样的方式, 获取加密字体对应的原字体的字形信息(固定不变的), 以此为 key 来设计映射关系。
这里定义了一个全局变量 font_map 来存储映射关系, 通过 PIL 的 ImageFont 对象来将字体的字形信息复现出来, 然后通过 ocr 技术得到字的原型, 完成解密。将解密过的字存入 font_map, 随着收录的字越来越多, 解析效率会越来越高。
加密字体替换
这里没什么难度, 做一个简单的替换就好。
结语
这个也是我首次接触这种麻烦些的字体加密, 就想写出来权当分享, 思路也是借鉴于之前看到的一个帖子(找不见了。。)。 文中有些东西需要自己去调试后可能会理解更深些, 因为写的过程中被其他事情打断了几次, 之前整理的思路乱掉了, 写的可能不太顺畅, 大家哪里不懂的话可以留言讨论吧, 或者有什么更好的思路也欢迎来交流。
来源:juejin.cn/post/7272399042091909131