python 简单字体解密
目录
前言
分析过程
①查看情况,可以看见字体是加密过的
②查看网页源代码
③解码
④保存成woff文件
⑤查看woff文件
⑥使用TTFont模块将之前的woff文件保存成xml文件
⑦查看xml文件信息
⑦找到规律或者是联系
⑧构造映射关系
⑨获取html网页信息,将加密内容一一替换
具体实现细节
①bese64解码
②使用TTFont保存成xml文件
③获取每个字体的unicode编码
④获取四个坐标
尾声
前言
这篇文章主要是讲解简单的字体解密,由于信息敏感,就不透露是哪个网站了,不然过不了审
分析过程
①查看情况,可以看见字体是加密过的
②查看网页源代码
如果在网页中看的了这样一些内容,那么就需要注意,这个信息我们后面可能需要用到,我用红色框框框住的是一些比较重要的信息,绿色箭头指向的是我们所需要使用的内容,结尾不需要)
③解码
因为是base64编码的,那么我们需要对应的解码,对谁解码呢,绿色箭头所指向的那部分内容。
④保存成woff文件
就是正常的二进制格式保存,怎么保存图片的就怎么保存它,只不过后缀名要改成.woff。你放心,PyCharm应该看不了woff文件
⑤查看woff文件
PyCharm看不了woff文件,我们只能想办法,使用FontCreator软件查看或者是使用百度字体编辑器(FontEditor (kekee000.github.io))都可以
查看出来的效果可能是这样的
需要格外注意一下下面的uniE016这样的信息,后面要用到。
⑥使用TTFont模块将之前的woff文件保存成xml文件
没有的先安装
pip install fontTools
⑦查看xml文件信息
这部分信息与之前woff文件的底部信息是一一对应的,简单理解就是这个字符编码对应着这个字。但事情远没有那么简单,不出意外的话,这些unicode其实是动态的,简单来说就是你在来一次,这些字所对应的编码就会随之改变,但依然是一一对应的。
举个例子,这次1对应的unicode编码是uniE016,下一次执行1对应的unicode编码是uniE018。你想要靠识别unicode编码来识别字体是不太可能的。
⑦找到规律或者是联系
它们之间肯定是有联系的,不然网站自己怎么使用,一般来讲,构成桥梁的都是静态内容。
我爬取的这个网站的规则是这样的
这四个坐标值是关键,不管unicode编码怎么变,下面的x与y值怎们变,这四个坐标值永远不变,这就是桥梁!
⑧构造映射关系
①首先获取每个字体的unicode编码,我们需要这些编码去获取对应的坐标
②构建坐标与字的映射关系
我使用了比较笨的方法,就是手动的构建字典
例如
data_map = {(0, -255, 1996, 1537): '下',(0, -303, 2022, 1581): '硕',(0, -259, 2020, 1691): '张',
}
③构建unicode编码与字的映射关系,以坐标为桥梁
例如这样的,因为我要爬取的网页源码上显示的加密内容有所不同,它将uni替换成了&#x还在最后加了;号,要示情况而定
映射关系有了,其实就差不多了
⑨获取html网页信息,将加密内容一一替换
具体实现细节
①bese64解码
import base64# 解码
decryptContent = base64.b64decode('加密内容')
②使用TTFont保存成xml文件
from fontTools.ttLib import TTFont# 保存成xml文件
fonts = TTFont('字体库.woff')
fontLibraryXML_path = '字体库.xml'
fonts.saveXML(fontLibraryXML_path)
③获取每个字体的unicode编码
# 使用内存读写,更方便
tf = TTFont(BytesIO(decryptContent))
# 获取按字母顺序排序的字形名称列表。
print(tf.getGlyphNames())
打印出来的结果是类似这样的
④获取四个坐标
coordinate = fonts['glyf'][uniE016].xMin, fonts['glyf'][uniE016].yMin, fonts['glyf'][uniE016].xMax, fonts['glyf'][uniE016].yMax
最后一一替换就好了
应该差不多,其他的应该没有太大的问题了
尾声
如果这篇文章对您有所帮助,那么这篇文章就有意义!
感谢您的观看!
python 简单字体解密相关推荐
- 复习Java第一个项目学生信息管理系统 04(权限管理和动态挂菜单功能) python简单爬数据实例Java面试题三次握手和四次挥手生活【记录一个咸鱼大学生三个月的奋进生活】016
记录一个咸鱼大学生三个月的奋进生活016 复习Java(学生信息管理系统04权限管理和动态挂菜单功能) 改写MainFrame的构造方法 新增LoginFrame的验证登录是否成功的代码 新增Logi ...
- Python爬虫JS解密详解,学会直接破解80%的网站(一)!!!
文章目录 1.网页查看 2.有道翻译简单实现源码 3.JS解密(详解) 4.python实现JS解密后的完整代码 4.1.实现效果 5.JS解密后完整代码升级版 5.1.实现效果 CSDN独家福利降临 ...
- 58同城的字体解密(一)
在爬虫的时候,经常会遇到一些反爬机制,但在反爬中字体加密属于比较难解决的一部分.今天介绍一个比较简单的解密方法. 1.首先找到加密的字体,打开58的一个链接:https://zz.58.com/pin ...
- python rsa加密解密_RSA加密解密(python版)
RSA的算法涉及三个参数,n.e.d. 其中,n是两个大质数p.q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度. e1和d是一对相关的值,e可以任意取,但要求e与(p-1)*(q-1)互质: ...
- python pycrypto 加密解密
原文链接: python pycrypto 加密解密 上一篇: 面试链表问题 汇总 下一篇: sympy 解决常见高数问题 参考 http://www.cnblogs.com/huxianglin/p ...
- 大众点评最新字体解密19年7月
有网友说我之前写的 大众点评字体解密 的方法已经失效了,所以更新一篇解密 2019年7月25日. 查看加密 看到都是小框框,为了一探究竟我们查看源码找到加密处 所有文字都是 > 这样的怪符 ...
- notepad 怎么写python_notepad怎么设置python的字体颜色
notepad怎么设置python的字体颜色,记事本,文本,编辑器,文件,字体 notepad怎么设置python的字体颜色 易采站长站,站长之家为您整理了notepad怎么设置python的字体颜色 ...
- Python实现数据加密-解密
Python实现数据加密-解密 运行环境: OS:macOS Monterey Version 12.3.1(英文版) IDE:PyCharm 2020.1 1 . PyCryptodome库安装 ...
- python中年大叔学编程_中年大叔学编程-Python简单操作文件
原标题:中年大叔学编程-Python简单操作文件 在计算机中,经常打交道的就是各种文档,用得比较多的软件就是office和记事本来操作文件,那么我们试试用Python来简单读写文件. Open函数的用 ...
- python 加密和解密
python 加密和解密 安装 linux pip3 install pycryptodome windows pip install pycryptodomex 创建密钥 from Cryptodo ...
最新文章
- 中美专利对比:2015年中国上升 美国首降
- 冒泡排序出现的问题_停课不停学 | 有趣的算法——冒泡排序
- 压缩维度oj P1173+P1174+P1164
- 研究38位知名CEO的邮件后,我们有这9个发现
- 职场社交是一个真需求吗?
- linux 编译java并打包
- P1305 新二叉树
- 容器化单页面应用中Nginx反向代理与Kubernetes部署
- c++将字符串转换成 int 类型
- 前端学习(1714):前端系列javascript之项目配置
- 图片查看器 bmp jpg png 动态gif office 2007风格
- 笨办法学 Python · 续 练习 10:`sort`
- Linux基础_合并,归档,压缩,dump,编辑器
- python菜鸟教程python基础教程
- 一个有情怀的PPT模板下载网站
- redis-----简单介绍---基本的配置---持久化----学习笔记
- Fabric 1.0源代码分析(39) policy(背书策略)
- Unity Android 真机调试 + 夜神模拟器调试 + ADB Logcat
- linux改-文件夹名称,linux修改文件夹名字
- C - Serval and Parenthesis Sequence