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

Aidan075 等级 249 0 0

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

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

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

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眼电影字体动态加密|凹凸玩数据 如有侵权,请联系删除。

收藏
评论区

相关推荐

笛卡尔乘积的javascript版实现和应用
笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尓积,又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员 。 例子 假设集合A{a, b},集合B{0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。 (https:
golang 不翻墙安装golang.org/x/net
下载安装golang.org/x/net其实网上有很多的文章,但总的归来是有两种: 方法一: 为了使包的导入方式不变,我们需要在src目录下面构造目录结构 $mkdir p $GOPATH/src/golang.org/x/ $cd $GOPATH/src/golang.org/x/ $git clone https://git
破解X眼电影字体动态加密|凹凸玩数据
我们在上一篇文章 《破解大众点评的字体加密(http://mp.weixin.qq.com/s?__bizMzg5NDE3Nzc5Mw&mid2247483857&idx1&sn73f471f9dec5c0948bacb9ef72046e83&chksmc022c6bff7554fa9010a94a856432e306d0e9bf57fa9
记录一次electron踩坑
Vue2.x版本 https://github.com/dmhsq/electronvuedmhsq(https://github.com/dmhsq/electronvuedmhsq) 或者 https://github.com/dmhsq/electronvue/tree/main/template(https://github.com
宁可用python倒读红楼梦,也不向拼多多低头
↑一个宝藏公众号,有趣的不像个技术号 刚屏蔽了天猫的盖楼,没想到大家把拼多多链接玩出了花样 (https://imghelloworl
前端 后端的区别
前台:眼睛看到的东西 关乎体验感。 后台:给管理人看的玩意 前端:程序员在进行编程的时候的代码编写。 后端:对应前端而言的,编写代码基本上是提供给前端调用,是不需要处理UI的内容.
Python简易扑克牌发牌
coding:utf8import randomimport time扑克牌54张间隔2秒发牌poker x for x in range(1, 55)poker x for x in range(1, 55)player pokers 每个花色的组合玩家4人for p in range(1, 5): playerp 4个
python-`if not x:` 和`if x is not None:`和`if not x is None:`使用
代码中经常会有变量是否为None的判断,有三种主要的写法: 第一种是if x is None;第二种是 if not x:;第三种是if not x is None(这句这样理解更清晰if not (x is None)) 。如果你觉得这样写没啥区别,那么你可就要小心了,这里面有一个坑。先来看一下代码: x 1 not x False
go get下载包失败问题
关于我由于某些不可抗力的原因,国内使用go get命令安装包时会经常会出现timeout的问题。本文介绍几个常用的解决办法。 从github克隆golang在github上建立了一个镜像库,如https://github.com/golang/net就对应是 https://golang.org/x/net的镜像库。 要下载golang.org/x/net包
破解X眼电影字体动态加密|凹凸玩数据
我们在上一篇文章 中提到了,大众点评只是静态字体加密,这次我们抱着学习的态度以猫眼电影为例讲讲如何破解字体动态加密。没有了解过字体加密的小伙伴可以先看看上一篇,本文与上一篇重复的部分就不细讲了。我们打开猫眼电影票房榜单的首页https://maoyan.com/board/1很明显,猫眼电影的榜单进行了字体加密。 让我们回忆一下破解大众点评的步骤:1、下载
使用Python抓取helloworld上的文章
嘿嘿嘿,py真好玩 代码写得很渣,本着能跑就好的原则,就这样啦 pythonimport osfrom requestshtml import HTMLSessionimport sqlite3from pathlib import PathBASEDIR Path(file).resolve().parent.parentdomain "https:/
https://cloud.tencent.com/developer/article/write/1830331
一、目标今天的目标是这个sign和appcode 二、步骤 Jadx没法上了app加了某梆的企业版,Jadx表示无能为力了。 FRIDADEXDumpDexDump出来,木有找到有效的信息。 Wallbreaker葫芦娃的Wallbreaker可以做些带壳分析,不过这个样本,用Frida的Spawn模式可以载入,Attach模式会失败。而直接用Objecti
扑克牌发牌
间隔2秒发牌且有大小王! coding:utf8import randomimport time 扑克牌54张poker [x for x in range(1, 55)]player pokers 每个花色的组合 玩家4人 列表for p in range(1, 5): player[p] [] 4个花色types ['♠', '♥'
测试String, StringBuilder,StringBuffer 的数据,我居然发现这些了~~
懒的搞什么开头了,直接撸代码吧想了想还是给大家看看学姐照片吧,保持眼睛的明亮,代码敲多了,伤眼[](https://shimo.im/docs/9GTP6XrJg9J88cJD/) 1: 作StringBuilder与String的拼接比较c@Testpublic void testString () String s""; long beg
让Python程序自动玩数独游戏,秒变最强大脑!
作者:小小明,博客地址:https://blog.csdn.net/as604049322最近发现有个玩数独游戏的网站:https://www.sudoku.name/indexcn.php游戏界面如下图所示当然这类玩数独游戏的网站很多,现在我们先以该网站为例进行演示。希望能用Python实现自动计算并填好数独游戏!大概效果能像下面这样就好啦玩过的都非常清楚