魅族系统截图被附上全屏二维码水印,其中包含设备信息

144
作者 Pandaria98
2017.05.16 15:41* 字数 2496

2017 年 5 月 17 日 11:23 更新
以下是我要求致歉的内容:

据目前情况可知:
该问题为内测防泄漏机制

但从去年十二月 Flyme6 正式发布,至今年五月中,在最新的稳定版中尚未修复
这其中六个月之长的时间,占用户群体大部分的稳定版用户一直受到该问题影响

既然已承认这是「工作疏漏」
同时我不认为有人乐意在发表截图时将自己的设备信息原原本本的公布出去

我认为魅族应当公开致歉。
另外,最好能在将发布的最新的稳定版的更新日志中说明此事。

以下是魅族官方的答复:

抱歉,这也是为什么我认为应该电话沟通清楚而不是一言两语来解释的原因。

因为个人的理解与事实还是有偏差,我来解释下。这件事情有个前提:今年年初我们已经决定调整固件发布节奏,并在3月7日正式发了公告——稳定版系统调整为季度发布,体验版系统为双周更新。

在这个前提之下,工程师在2月27号已经移除了相关代码,在此之后的体验版系统(beta版)不会出现这个“功能”。但为了保证稳定版系统的稳定,在外发前需要足够时间测试,因此代码冻结时间早于2月27号,所以该功能留在了稳定版。

可以理解为,我们早在2月份的体验版上已经修复此问题,现在升级体验版即可解决。

对话原文截图已附于文末。

2017 年 5 月 16 日 22:22 更新
以下是截至目前的魅族官方答复

二维码水印技术的采用是为了防止 Flyme6 的信息在去年 11 月的内测阶段被泄露

二维码中的信息只包含 IP 地址IMEI 号SIM 卡序列号是否是量产机型是否为移动用户 的信息,不涉及用户的电话号码、Flyme 账号的信息

1.内测版本存在的机制,为什么会被延续到稳定版本的固件并且持续至今?
主要原因还是由于工作疏漏。内测版和稳定版使用同一套代码,我们在内测结束后未及时移除该功能。但我们在最新体验版中已经移除相关代码。您现在可以到Flyme官网下载体验版即可解决了。

2.加水印是如何防止内测版本的信息被泄露?是根据二维码识别出来的设备,停止该设备的内测推送么?
水印包含有手机SN、IMEI等信息,对于参与内部测试人员,我们都有SN信息登记,如内测版本泄漏,我们可追溯到泄露者。

3.是所有的截图都会被加上水印么?根据我的测试,只有颜色较深的图片才会被加上水印,如果是为了防止泄露,为什么不对所有的图片加水印?
是所有截图都会加上水印的。并不是因为颜色深而加上的水印,只是在特定图片(例如像您遇到的这种场景)中会比较明显。(水印做的隐蔽是为了防泄密的保护手段)

4.对于设备信息被泄露不会导致用户信息被泄露的说法我无法信服
水印信息仅包含IMEI、SN、IMSI、IP地址和机型名称——以上设备信息。并不涉及其他信息,不会导致用户信息被泄露。

5.如果仅仅是为了识别用户,为什么要加入 IP 地址这个信息?
加入IP是为了区分泄漏机器处于公司内网还是外网。(内测阶段的安全管理,原则上内部测试机器是不允许带出公司的)

以上内容为与魅族官方人员沟通的原话,原文对话截图附于文末

以下是文章原文:

本人在使用魅族手机(原生 Flyme 系统)的过程中,发现偶尔在一些网站上发布自己的手机截图后,图片会出现奇怪的色块。同时,其他魅族手机发布的截图中,也有类似的情况(为保护隐私,本文所有二维码主体部分使用白色色块遮挡,可从四角的二维码定位点判断出这确实是二维码):


起初我以为这只是图片在上传过程中发生的压缩导致的一些画质损失,但最近在某消息的提醒下发现,实际上图片上的色块并不是画质损失导致的,而是图片实实在在的被打上全屏二维码水印,将以上的图片进行调色处理后,二维码的图像变得明显(具体的还原步骤在文末):


反色之后,它就是一个实实在在的二维码了:


识别结果是(为保护隐私,本文字符串中部分字符用「*」号代替):

#192#168#0#115#,460013*****8248#A10ABN****3H#m1metal

稍加分析,可以容易的判断出:

  • 前四串字符是 IP 地址,这里是一个内网 IP
  • 第五串字符是 IMSI 码,类似 IMEI,用于标识 SIM 卡
  • 第六串字符是魅族设备的序列号
  • 最后一串字符是魅族设备的型号

关于 IMSI

我对于 IMSI 也是知之甚少,这里将我通过搜索引擎的来的结果列于下方(不保证准确):

  • IMSI 与 手机号码 没有必然的对应关系
  • IMSI 在到达运营商的交换机才可知道与 手机号码 相应的对应关系
  • 可能存在通过 IMSI 得到地域位置的算法

另外,在探索过程中,在魅族社区找到了这样一张图:


经过同样的步骤还原之后,得到了这样一张二维码:


识别结果是:

#---#---#---#---#460011*****2453#95AQACQ****M7#MX6#

结果完全类似,只是由于可能是断网截图,IP 信息被留空了。

那么问题就来了,这种现象到底是不是个例呢?

不是,它是完全可以被复现的。

复现的方法非常简单,只要截图的背景颜色较深,就会出现二维码水印。而浅色背景的截图则不会出现二维码。

:以下测试基于本人自己的手机

  • 机型:魅族 PRO 6
  • 固件版本:Flyme 6.0.2.0A

这是截至本文发布(2017 年 5 月 16 日),魅族官网上 PRO 6 的稳定版固件的最新版本:



下面是我在 JuiceSSH 中截图以后得到的图片:


在手机上打开,肉眼几乎看不出上面有二维码(但还是能看见),而在电脑上打开,由于图片解码库不同的缘故,可能导致完全看不到二维码,但是通过在网站上发布,经过服务端的压缩之后,二维码变得明显:


同样的步骤将二维码还原:


识别的结果:

#---#---#---#---#460023*****9130,460009*****0563#80QBC***JFY#PRO6#

由于我的手机是双卡,所以 IMSI 也有两个。经过在 OSBuild 这个应用中查看发现,与手机实际的 IMSI 吻合。

而下面是用 fooView 第三方软件截图获得的图片,没有任何的二维码水印。


还原步骤

  1. 使用魅族手机在 JuiceSSH 等背景颜色较深且为纯色的应用内进行系统截图,也可以对上方展示的没有二维码的图进行截图
  2. 此时用手机的图库查看图片,仔细看可以看到轻微的二维码
  3. 到酷安等发布图片将遭到压缩的网站上发布图片,获取压缩后的图片,如果直接用 Photo Editor 对原图进行编辑,可能由于图像解码库不同的原因,导致根本看不到二维码
  4. 使用 Photo Editor 调整
    • 打开图片,选择「色阶」,调整上方三个滑块至靠近波峰处,二维码将变得明显,点击右上角的勾保存操作(保存操作这一步下同)
    • 选择「特效」-「自动对比度」,保存
    • 选择「特效」-「负片」,保存
    • 点击右上角的蓝色保存按钮,保存图片到指定的路径
  5. 识别你获得的二维码图片

本文只讲述事实,不作过多评价。

只是希望各位不要再用魅族的系统截图

推荐使用第三方截图。

本文已被授权转载到:

关于本文的知乎问题:

以下是与魅族官方人员对话的截图:






日记本