• 游客,欢迎来到米坛社区。
    米坛社区是大型中文智能穿戴设备交流社区,在这里交流你的极客思想,共同建造我们的智能世界
    为了更加方便的获取支持与帮助,请加入米坛社区官方QQ频道

讨论 小米手环7 表盘文件 深入分析

YMZJ100231

LV4
普通成员
UID
64032
2021-04-17
31
308
分析这个表盘文件耗时巨大无比,使用其中方法,或者引用原理请注明出处
一、表盘文件本体
这次小米手环7的表盘无论从哪个app下载下来的本质上都是一个zip压缩包,但是这个压缩包又和常规的压缩包有所不同,它不是一个 仅存储 的压缩包,它存在压缩,甚至压缩到了原来的四分之一的大小,1.jpg

但是目前尚不明确压缩包究竟如何压缩,所以打包的做法是直接替换压缩包里面的原文件,软件也尝试了两个
winrar,不是太好用,将文件拖入的时候需要选择压缩方式如果默认压缩方式压缩2.jpg

文件格式似乎就和原来的不一样了(没测试可不可以用)
3.jpg
如果选择 仅存储 压缩方式,那么表盘大小就要翻几倍
7zip,这个软件使用很顺利,把文件拖入没有压缩方式选项,可以直接点 确定 进行添加替换,甚至表盘大小还会比原来的表盘小几kb
4.jpg
表盘打包没啥好说的也没花什么时间研究,目前还有些问题,压缩过的表盘和 仅存储 格式的表盘有没有区别,比如加载速度,总表盘可同步上限数等


二、表盘内部结构

表盘内部结构其实和华米gtr系列的差不多,但又有所区别
小米手环7表盘内部由 assets 文件夹,watchface 文件夹 ,app.json , app.bin , app.js组成(组成可能有不同 下文会说到)
5.jpg
一步一步来 先说第一个文件夹

assets 文件夹

这个文件夹用来储存图片且根据表盘制式的不同可能有几种情况
第一种全部是图片
6.jpg
第二种有文件夹和图片(下文会说)
7.jpg
而里面的图片就是万恶之源了
这种图片常用的看图软件都打不开,第一想法是转码,格式工厂转码,也确实可以转码,然后顺便看了一下详细信息里的格式 是tga格式
8.jpg
本来想着能转码应该问题不大,但如何将正常的图片转码成 小米手环7表盘的图片这个问题没法解决
我用hex查看了图片发现 所有图片文件在430位置前面都是头部,但是各不相同,从430往下则是编码图片的部分
9.jpg
而且所有文件开头都有一个 SOMH 的字符
10.jpg
格式工厂信息显示里面也可以看到相同的信息,我尝试用ps保存tga格式的图片,但是无一例外全部没有SOMH头,而且可以被看图软件打开,所以也就知道简简单单的修改格式是不行的需要转码
接着在某个群里,某位群员的发言给了我灵感,gtr3的表盘图片也是加密的而且gtr3的图片有解密工具
11.jpg
尝试以后发现确实可以解密,也可以加密,头都是SOMH 但是,很奇怪gtr3 的工具加密分辨率较小的图片时会出现问题,头部位置不满430行就会有图片编码信息导致小图片在小米手环7上显示异常
12.jpg
(不过很奇怪,有些头300左右的的图片也可以识别,但是那种小数字的图片头就会特别短 就100左右,然后就无法识别)于是只能魔改大一点的图片这样显示的才是正常的,同时这个工具也会遇到无法解密的情况,也是出现在很小的图片上。至此图片的问题就算解决了一半但是还有一个问题更令人抓狂

watchface 文件夹

根据表盘版本的不同会出现几种不同情况:根据不可靠猜测,如果内部子文件夹是 mi-smart-band-7 那么这个是老版本或者是过老度版表盘(下面会解释)
13.jpg
如果里面的子文件夹是 192x490_s_l66 那这个应该就是新版或者也可能是新过渡版的(具体分析下面有)
14.jpg
总之就是特别乱,也有可能四个版本对应不同的需求 没有研究出来


1.老版表盘

老版的表盘用的是 mi-smart-band-7 文件夹 里面只会有 index.js 这个文件
15.jpg
这个文件是没有加密的可以直接记事本打开(notepad++打开是文字只有一行完全没法看)js文件的内容也比较好分析,坐标,图片名称都可以直接改
16.jpg
正如我提前发布的第一个表盘一样,那个表盘用的就是老版的底包(但是后来发现了上述的那种小图片缺文件头的情况,导致 同步上去部分图片乱码)老版本的表盘的assets文件夹里没有子文件夹,图片是由1开始往下编排的
但是这种老版本的表盘有一些问题,首先,小时分位和十位共用一套xy坐标,一套图片,极大限制了表盘创作的发挥,其次这个老版的没法更改图层,只有默认的图层顺序,以及老版的似乎不能做多背景表盘,这些是目前发现的问题,


2.老过度版表盘

老过度版的表盘用的是 mi-smart-band-7 文件夹 里面会有 index.js 和index.bin两个文件
18.jpg
index.js文件和上文的一样可以直接打开没有加密没有乱码但是另一个文件index.bin文件是破解的关键 经过我的测试这种过度版本的表盘 图片的坐标,图片名称之类的已经不再由index.js控制,而是转换成由index.bin控制,删除index.js文件同步表盘依然可以正常使用 还有一个很重要的发现是:index.js和 index.bin 文件描述的信息是一致的 举个例子 两个文件中小时图片的xy坐标是一样的 图片的名称也是一样的 这就建立起了一个相对的联系,方便index.bin 文件的破解 (这节最后说index.bin 的破解)老过度版表盘的assets文件夹同上也没有子文件夹图片是从1往下排的 还有一个很奇怪的现象,官方似乎在把老版的表盘重新打包成老过渡版,我之前让群友帮忙提取的表盘 折纸 他提取的表盘mi-smart-band-7文件夹里面只有index.js但是我自己收到手环后下载的 折纸 表盘里面多了一个 index.bin 文件

总而言之 这前两个版本的表盘都存在许多问题(老版表盘里面提到的)不是太适合魔改,但是魔改起来最简单

3.新过度版表盘

新过度版表盘用的是192x490_s_l66文件夹里面有index.bin 文件和index.js文件
18.jpg
js文件还是一样没有加密没有没有乱码可以编辑,但和老过度版、老版的表盘又有些不同 内部的结构和顺序存在明显的差异 图片名称的描述也不一样
其他和老过度版相似 图片坐标对应关系由index.bin控制且index.bin 与index.js存在对应关系,同时 index.bin文件的格式与老过度版的也存在差异
20.jpg
看上去完全不一样 同时assets文件夹里与老过度版、老版的表盘又有些不同 可以存在子文件夹且十分有规律


4.新版表盘

新版表盘用的是192x490_s_l66文件夹里面有index.bin 文件 和上两个不同这个版本只有index.bin 文件
21.jpg
,没有js文件 且bin文件的格式与新过度版表盘基本一样(也就是与老过度版的index.bin 文件有差异)依然是由index.bin文件控制图片坐标的对应关系 assets文件夹的情况与新过度版的是一样的

总而言之这两种表盘功能是完整的 可以调整图层,可以十位 个位定义不同的图片和坐标,但是index.bin 加密的离谱 基本没有办法魔改

ps:这次表盘的xy坐标也是从左上算起的并且这四种表盘似乎没有限制图片的大小,也就是说可以把原20*20的图片替换成40*40的图片然后在原坐标上显示反之也成立

四种表盘的共同总结:index.bin 和index.js存在对应关系,且index.bin的优先级高于index.js 也就是说只要index.bin 存在,index.js就不管用了 除了老版的表盘可以稍微魔改一下其他的表盘魔改都需要破解index.bin 老与新表盘在assest文件夹里也有所不同


秃头之源index.bin

由于时间有限我只去尝试破解了新的表盘的index.bin文件,目测老的表盘的index.bin会更好搞一点(上文提到过新老表盘的index.bin 文件格式不同)
正常破解思路都是先上记事本打开,打开发现上部是可以阅读的一些信息同时夹杂着乱码,下文是完完全全的乱码
22.jpg
第一次看到人都傻了,就一个图片坐标对应的转换文件至于这么加密吗,真的不理解QAQ,既然乱码了那记事本肯定不够用了,直接上minihex吧
用hex打开发现还是有迹可循的,每个index.bin 里面上部是指定项目的下部是每个项目的参数的两个部分是分开来的每一部分在不同表盘的index.bin文件里可以长度不同,上部那些奇怪的乱码应该就是分隔符
23.jpg
用记事本尝试将上部换行分开,以框框和images这两个为换行标识,尝试将他们分开结果可以发现很有规律框框开头的是一些参数,而images开头的是图片目录
24.jpg
顺藤摸瓜想到下部应该也是这么定义的 于是用minihex将index.bin文件导出成十六进制表的文本文档,然后放入notepad++研究 经过很长时间的分析 基本确定01为下部分节符 每个部分由01分开来,标记全部的01 发现还是很有规律的
25.jpg
接着又想到了index.js,新过度版的表盘内部的index.bin 与index.js存在对应关系,其他怎么对应我不知道,但是有一点可以肯定坐标也就是xy一定是一样的!我先随意从index.js里面提取了几对坐标
26.jpg
用计算器换算成十六进制,再到notepad++里面搜索,标记结果很有意思
27.jpg
都是01 00 00开头,坐标后面是4C且 x和y坐标用一对或者两对十六进制数表示,每6对或7对代表一个部分(具体很难描述但是有很强的关系)尝试修改了小时的x坐标使他往右偏离,结果很成功,小时坐标成功向右偏移同时息屏显示的坐标也向右偏移了
这是目前我的所有发现,也仅仅做到了魔改坐标而已 其他的图层顺序什么的,真的不会搞了 但已经算是很大突破了
至此watchface文件夹的组成和内部的文件讲完了awa

app.json , app.bin , app.js文件

与index.bin文件和index.js文件一样,app.bin 和app.js文件是相互对应关系(不是太确定这里只是猜测)具体用处不详(我不会编程啊QAQ)
而app.json文件应该是给小米穿戴和小米运动与健康app用的作用是显示缩略图等 zepplife没有使用这种方法,单独将缩略图添加在了下载资源里(没有拆包过app查看源码,仅做猜想)
这里还是要引入上面的概念:老版本表盘,老过度版表盘,新过度版表盘,新表盘
老的两种表盘的app.json里的platforms一项里都写的是 "name": "smart-band-7"
29.jpg
而两种新表盘的app.json里面platforms一项里都写的是"name":"l66"
28.jpg
(有5个不同的l66版本)很奇怪,也许是为了适配以后的手环??真的就不清楚了
app.js是老版本表盘,老过度版表盘,新过度版表盘有的 app.bin是老过度版表盘,新过度版表盘,新表盘有的具体关系上文的index.js和index.bin已经说的很详细了不在赘述

ps:关于app.json , app.bin , app.js这三个文件没有时间研究了以上所述是基于现存认识的推断

这个分析已经写的非常非常详细了,涵盖了我最近的所有研究成果awa,有什么想法或者发现可以发评论反馈或者酷安找杨铭洲际100231,或者哔站找杨铭洲际100231剩下的高考完再研究了
 

附件

  • 17.jpg
    17.jpg
    137.7 KB · 查看: 22

GiveMeFive

LV8
🔮认证作者
🔥社区作者
普通成员
UID
2000
2019-06-21
567
3
37,901
楼主用的哪个APP绑定的 是怎么同步修改后的表盘的啊
 

加大号的猫

LV0
普通成员
UID
85525
2022-06-11
13
2
Chengdu,China
https://www.bandbbs.cn/threads/3936/post-100847 可以看看我在这里的回复,index.bin与其说是加密,不如说是一种编译和优化,如果要还原回js,需要大量的时间精力去看QuickJS的C源代码,非常麻烦,而且不一定能保证准确。

目前可以确认的是,bin和js文件包含的逻辑是一致的,从js到bin这条路是通的,但是反过来就很困难了。
 

GiveMeFive

LV8
🔮认证作者
🔥社区作者
普通成员
UID
2000
2019-06-21
567
3
37,901
https://www.bandbbs.cn/threads/3936/post-100847 可以看看我在这里的回复,index.bin与其说是加密,不如说是一种编译和优化,如果要还原回js,需要大量的时间精力去看QuickJS的C源代码,非常麻烦,而且不一定能保证准确。

目前可以确认的是,bin和js文件包含的逻辑是一致的,从js到bin这条路是通的,但是反过来就很困难了。
研究的很深啊 有空加我q 675426647
 
  • 赞
反馈: 他是誰

*这是一则由 Google AdSense 自动推荐的广告,与本站无关,不对其真实性与可靠性负责