破解X眼电影字体动态加密|凹凸玩数据

Aidan075
• 阅读 1003

我们在上一篇文章 《破解大众点评的字体加密中提到了,大众点评只是静态字体加密,这次我们抱着学习的态度以猫眼电影为例讲讲如何破解字体动态加密。

没有了解过字体加密的小伙伴可以先看看上一篇,本文与上一篇重复的部分就不细讲了。

我们打开猫眼电影票房榜单的首页

https://maoyan.com/board/1

很明显,猫眼电影的榜单进行了字体加密。

破解X眼电影字体动态加密|凹凸玩数据

让我们回忆一下破解大众点评的步骤:

1、下载网站font字体包

2、将font字体包中导入FontEditor 观察得到乱码与数字的关系

3、前缀替换,并将字体名字和它们所对应的乱码构成一个字典

4、根据字典将加密的数字替换

然而,右键刷新页面,字体文件一直在变:

破解X眼电影字体动态加密|凹凸玩数据

为了探究一下,我们随便下载3个字体文件,对比看看能不能发现其中的规律。

分别重命名为A.woff,B.woff,C.woff,将他们依次导入FontEditor中打开

破解X眼电影字体动态加密|凹凸玩数据

其中A字体的1对应的是【uniECC8】

B字体的1对应的是【uniE5FD】

C字体的1对应的是【uniEE6C】

并无规律。

我们再将.woff文件转换成.xml文件,看看字体结构有没有相似之处:

#.woff文件转换成.xml文件  
from fontTools.ttLib import TTFont  
font = TTFont('./.woff')  
font.saveXML('A.xml')

每一个编码都对应一个TTGlyph对象,而许多行的XY坐标点最终绘制成数字。

破解X眼电影字体动态加密|凹凸玩数据

破解X眼电影字体动态加密|凹凸玩数据

破解X眼电影字体动态加密|凹凸玩数据

很多网上的教程到这里就结束了,因为按理说这三个字体的统一数字对应的XY坐标应是一样的。

这说明猫眼最近又新挖了一个坑,继续填坑。

看看上面的三个图,其实他们的XY坐标差异并不大。

所以我们允许在一定范围内的差异就算一样就好啦。

由于有负数,通过abs函数取绝对值

#对比两个坐标的差异  
def compare(AA, BB):  
    for i in range(5):  
        if abs(AA[i][0] - BB[i][0]) < 80 and abs(AA[i][1] - BB[i][1]) < 80:  
            pass  
        else:  
            return False  
    return True  
#True则可视为是同一个字  

这样我们就以某字体基准,无论现在实时的字体是哪一个,只要下载下来,再与该字体进行坐标差异对比,相似的就是同一数字。

在网上找了一张思路图,方便大家理解:

破解X眼电影字体动态加密|凹凸玩数据

我们下面尝试一下:

1、将新下载的字体文件与base_font对比,找到对应关系

2、前缀替换,并将字体名字和它们所对应的乱码构成一个字典

3、根据字典将加密的数字替换

# 字体解密   
def modify_html(newFont, html):  
    basefont = TTFont('./base_font.woff')  
    unilist = newFont['cmap'].tables[0].ttFont.getGlyphOrder()  
    numlist = []  
    base_num = ['6', '3', '7', '1', '5', '9', '0', '4', '2', '8']  
    base_unicode = ['uniF0DA', 'uniE907', 'uniED01', 'uniEAE1', 'uniF206',  
                   'uniE455', 'uniF401', 'uniE19C', 'uniEB76', 'uniF855']  
    for i in range(1, len(unilist)):  
        newGlyph = newFont['glyf'][unilist[i]].coordinates  
        for j in range(len(base_unicode)):  
            baseGlyph = basefont['glyf'][base_unicode[j]].coordinates  
            if compare(newGlyph,baseGlyph):  
                numlist.append(base_num[j])  
                break  
    rowList = []  
    for i in unilist[2:]:  
        i = i.replace('uni', '&#x').lower() + ";"  
        rowList.append(i)  

    dictory = dict(zip(rowList, numlist))  
    for key in dictory:  
        if key in html:  
            html = html.replace(key, str(dictory[key]))  
 return html  
# 返回解密后的html  

4、利用正则表达式获取数据

# 正则  
def parse_page(html):  
    pattern = re.compile('<dd>.*?board-index-.*?>(.*?)</i>.*?data-src="(.*?)".*?'  
                         + 'title="(.*?)".*?class="star">(.*?)</p>.*?releasetime">(.*?)</p>.*?'  
                         + 'realtime".*?stonefont">(.*?)</span>.*?'  
                         + 'total-boxoffice".*?stonefont">(.*?)</span>.*?</dd>', re.S)  

    items = re.findall(pattern, html)  
    data = pd.DataFrame(items,columns=['index','image','title','star','releasetime','realtime','total-boxoffice'])  
    data['star']=data['star'].str[3:]  
    data['releasetime']=data['releasetime'].str[5:]  
    print(data)  
    return data  

运行一下。

破解X眼电影字体动态加密|凹凸玩数据

get。

本文相关爬虫代码,仅供学习交流:https://t.zsxq.com/RVn6qBU

获取了猫眼电影榜单能做什么呢?扫描下方二维码关注,数据分析部分咱们下回再讲。


本文转转自微信公众号凹凸数据原创https://mp.weixin.qq.com/s/UOWFU5q1SKcW0epywlurIg,可扫描二维码进行关注: 破解X眼电影字体动态加密|凹凸玩数据 如有侵权,请联系删除。

点赞
收藏
评论区
推荐文章
浅梦一笑 浅梦一笑
4个月前
初学 Python 需要安装哪些软件?超级实用,小白必看!
编程这个东西是真的奇妙。对于懂得的人来说,会觉得这个工具是多么的好用、有趣,而对于小白来说,就如同大山一样。其实这个都可以理解,大家都是这样过来的。那么接下来就说一下python相关的东西吧,并说一下我对编程的理解。本人也是小白一名,如有不对的地方,还请各位大神指出01名词解释:如果在编程方面接触的比较少,那么对于软件这一块,有几个名词一定要了解,比如开发环
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Aidan075 Aidan075
1年前
破解X眼电影字体动态加密|凹凸玩数据
我们在上一篇文章中提到了,大众点评只是静态字体加密,这次我们抱着学习的态度以猫眼电影为例讲讲如何破解字体动态加密。没有了解过字体加密的小伙伴可以先看看上一篇,本文与上一篇重复的部分就不细讲了。我们打开猫眼电影票房榜单的首页https://maoyan.com/board/1很明显,猫眼电影的榜单进行了字体加密。让我们回忆一下破解大众点评的步骤:1、下载
Easter79 Easter79
1年前
vue+element 表格formatter数据格式化并且插入html标签
前言   vue中element框架,其中表格组件,我既要行内数据格式化,又要插入html标签一贯思维,二者不可兼得也一、element表格数据格式化  !(https://oscimg.oschina.net/oscnet/3c43a1cb3cbdeb5b5ad58acb45a42612b00.p
Wesley13 Wesley13
1年前
4cast
4castpackageloadcsv.KumarAwanish发布:2020122117:43:04.501348作者:KumarAwanish作者邮箱:awanish00@gmail.com首页:
Stella981 Stella981
1年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Wesley13 Wesley13
1年前
MySQL查询按照指定规则排序
1.按照指定(单个)字段排序selectfromtable_nameorderiddesc;2.按照指定(多个)字段排序selectfromtable_nameorderiddesc,statusdesc;3.按照指定字段和规则排序selec
Stella981 Stella981
1年前
Angular material mat
IconIconNamematiconcode_add\_comment_addcommenticon<maticonadd\_comment</maticon_attach\_file_attachfileicon<maticonattach\_file</maticon_attach\
Wesley13 Wesley13
1年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
helloworld_34035044 helloworld_34035044
6个月前
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为