首页
社区
课程
招聘
[原创]B站直播间特效表情文件的获取
发表于: 2020-1-2 21:20 10741

[原创]B站直播间特效表情文件的获取

2020-1-2 21:20
10741

小破站今年的跨年晚会很是不错,在跨年夜总算给本阿宅一点点精神慰藉。在用手机看直播的时候,大家刷的礼物特效不停出现,我比较钟爱其中的“打call”,想着加到聊天软件里做个表情,以后兄弟们分享文章的时候可以商业互吹一番。搜了一圈没有发现现成的,今天空下来,随即手撸了一下找到表情文件,简单记录一下过程。

准备

老套路,越狱iPhone,AppStore里下载B站客户端,打开FLEXible开关,搬出FLEX看看这个特效表情是个啥子东西。设置好后,进入客户端,在首页找到直播入口,然后里面选个人气高的直播间进去,耗费巨资手刷一个打call表情,待显示时候,查看FLEX的Views结构如下:

 

图片描述

 

可疑的类为 BBLiveBaseSVGAAnimationViewSVGAPlayer, 我们知道SVG是可以作为矢量图像的,点进去看一下,发现里面有个SVGAVideoEntity,进一步查看,确认这个就是表情文件了,里面的images字典就是是图片帧各个部分的元素的碎图。

 

图片描述

 

到此,我们定位到了特效文件的显示对象。

获取

按惯例,先广撒网一下,Google一下SVGAPlayer,居然有意外收获: SVGAPlayer 是YY的UED团队出品的一个特效方案,类似于airbnb的Lottie,可以将AE或Flash动画导出到客户端所用。网站http://svga.io/中有详细介绍,并且含有一个svga文件的在线预览页面

 

根据其iOS端使用手册,验证 SVGAParser类 确实也在B站客户端中有引用,hook一下它的几个parseWith函数,运行后顺利拿到初始化特效文件的日志:

 

SVGAParser parseWithData, <789c4cba 05505c5b d3358cbb bbbb0577 ... b6d054d7 e309d1ff 01424fd4 86>, cacheKey 14EAD217D8A29CA4B7320F1CCF549584

 

789c4cba开头的应该为动画的Data数据,数据有点大,这里截断显示了。

 

根据cacheKey在app的存储目录下搜索一番,find . -name "*14EAD217D8A29CA4B7320F1CCF549584*" 无结果,说明没这个文件,不用灰心,换grep再撸一遍,grep -rn "14EAD217D8A29CA4B7320F1CCF549584" ./,这次有意外收获:
(多余的目录前缀已删掉)

 

Binary file ./Library/Caches/live/animation/manifest.sqlite-wal matches

 

匹配了两个sqlite的wal文件。顺带说一嘴这个是什么?WAL是 Write-Ahead Logging的意思,是实现原子提交和回滚的一种机制。How WAL Works

 

检查一下animation文件夹下还有什么? data manifest.sqlite manifest.sqlite-shm manifest.sqlite-wal trash,在data文件夹下找到一堆类似md5命名的文件,大小为几百K,拷贝到Mac上 file一下:

 

file ./Library/Caches/live/animation/data/b84008c716944e598887d43b3ff89514
./Library/Caches/live/animation/data/b84008c716944e598887d43b3ff89514: Apple binary property list

 

很显然了,是plist文件。改后缀名为plist后打开查看:

 

图片描述

 

将数据部分提取出来保存为文件:
/usr/libexec/PlistBuddy -c 'Print :"$objects:1"' b84008c716944e598887d43b3ff89514.plist > 1.svga

 

用svga文件在线预览工具 打开刚才保存的 1.svga,播放成功。

 

吼,剩下的就是跑shell脚本从这些plist文件中提取一下svga的过程了,最后,终于找到了心爱的打call表情,最后的最后,无奈录屏转为GIF了...

 

提取的一些svga文件记录

 

(完)

 


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//