最近互联网平静得可怕,小雷作为高强度冲浪选手,都很难从中挖出好选题来写。
写手机曝光过于常规,大伙儿估计都看腻了,写App套路深挖吧,前阵子才写过,不宜频繁输出。
现在实在没活儿了,咋办呢?我选择直接摆烂,在办公室酣然入梦。
咳咳,开个玩笑嚯。
其实遇到没啥选题好写的时候,我都会问问神奇的哔哥,他老人家冲浪经验丰富,总能整出绝世好活。
像几个月前的《 利用钓鱼网站获取对方IP定位 》选题,就是哔哥一手策划出来的。
而今天哔哥再次挺身而出,这次已经不能说是“好活”了,简直可以用“离谱”来形容...
事情是这样的,哔哥一大早给我发了一张图片,咋一看就挺平平无奇。
不就是“HELLO WOROD”嘛,学C语言的时候我还天天打呢,这能搞出啥玩意来啊。
眼看着没事儿发生,我便开始无情嘲讽哔哥只能整烂活儿。
然而打脸总是来得如此及时...
哔哥让我分别用安卓版微信和iOS版微信查看图片,看看有啥不同。
在作对比之前,小雷满脸不屑,心里想着 “就这”?
毕竟我作为专业搞机佬,用安卓iPhone双修也不是一天两天了。
两个系统的微信更新速度可能有差异,但功能几乎一致,像聊天和发图啥的,更是非常基础的功能,不可能搞区别对待的。
So,就这么简单的“查看图片”,难不成还能出啥幺蛾子?
于是乎,小雷先是用安卓微信打开了哔哥发来的图片。
放大看原图后,图片依然没有改变,满屏都是“HELLO WORLD”。
接下来,我又拿出抽屉吃灰已久的iPhone 11,看看会有啥情况发生。
把原图发送到iPhone上的微信小号并点开,神奇的事儿发生了。
小雷瞅见,“HELLO”没有任何变化,但下面一行的“WORLD”居然变成了“APPLE”...
这下子可把小雷整懵了,这微信总不能区别对待吧?
为了排除偶然性,小雷还找上好几位手持iPhone的同事一起测试。
结果吧,同一张原图,他们的微信所显示的图片内容都是“HELLO APPLE”。
安卓这边则与开头一致,依然是熟悉的“HELLO WORLD”。
不仅小雷自己懵了,连那几位用iPhone的同事都开始怀疑人生。
那么问题来了,这是微信对安卓和iOS进行区别对待,还是安卓或iOS某一方出了问题?
或者换个问法,原图到底是“ HELLO WORLD ”还是“ HELLO APPLE ”?
真要刨根问底,要解决的问题还真的不少,小雷为了尽快解密,便用了五毛钱巨款贿赂哔哥。
好在哔哥也是个老实人,收钱办事毫不含糊,当场就详细解析了一波。
先从简单的说起,安卓和iOS微信图片显示不同,并非微信的问题,也不是安卓的问题。
真正有问题的,其实是苹果一直沿用的 PNG解析器 ,而这个图片解析器又用在了MacBook和iPad等设备。
没错,咱们平时所见到的图片,都是被解码过的。
所以理论上来说,在苹果所有智能设备上看上面的图片,都会显示“HELLO APPLE”。
而安卓和Windows等“非苹果系”系统,看到的则是“HELLO WORLD”。
Windows微信所显示的图片内容
至于具体原理嘛,小雷后面会展开细聊,咱们先解答下面这个问题:
既然安卓和iOS看到的是两张图片,那么哪一张图片才是原图?
其实严格来说,它俩任意一张都可以是原图,因为那张图是被加工合成过的。
小雷也特意去问了下哔哥,发现实际操作还挺简单。
咱们可以用下面这个卡苹果Bug的开源工具,亲自动手制作一张在安卓与iOS上显示完全不同的图片。
在加工合成前,小雷得提前准备好两张图片。
一张是【苹果设备看到的图】,另一张是【非苹果设备看到的图】。
这个环节估计大伙都懂的,针对性展示嘛。
图片准备好后,咱们可以利用Github上一位国外老哥的开源工具做图整活。
不过怎么说呢,合成过程很简单,但前期准备稍嫌麻烦,很多小伙伴可能会卡在【python配置】那一步。
所以今天就不详细讲解合成过程了,要是大伙实在感兴趣,小雷再另开一期文章单独讲解。(经典画饼)
那么,掌握了这种玩法后,我们又能搞出什么骚操作呢?
小雷看到,有不少网友用于搞黄色,利用BUG完美躲过审核。
但这事儿可太刑了,建议大伙都别乱搞...
小雷倒是想到了更刺激的玩法 -- 午夜惊魂。
实现起来很简单,只需准备一张恐怖图片作为 【苹果设备看到的图】,再用动漫妹子图作为【非苹果设备看到的图】。
经过简单合成,一张表面人畜无害,打开后让iOS用户吓个半死的图片就出炉了。
小雷当场就把合成图,发给在用iPhone刷微博的同事,很快迎来了一句“草”。(指一种植物)。
不过还是得提醒小伙伴,使用场景仅限于朋友之间恶搞。
用在不正经的用途上,肯定是违法的。
接近结尾,小雷和大伙聊聊这个开源工具的具体原理好了。
制作这工具的开发者老哥可谓是“无心插柳柳成荫”,他本来想编写自己的多线程PNG解码器。
结果中途出了不少错误,其中最为严重的Bug就是:
decompress(a + b) != decompress(a) + decompress(b)
啥意思呢?他把一张合成图片解码后,发现在不同的设备上看到的图片是不一样的。
在百思不得其解的时候,他想到: 为啥不去问问神奇的苹果呢?人家苹果工程师的水平比自己高得多啊。
于是他就去顺手去查了波资料,想看看苹果是如何多线程解码PNG文件的。
不查不知道,他发现原来苹果也犯了同样的错误,才导致BUG出现在所有苹果设备上。
好家伙,某程度上来看,这位老哥的开发水平与苹果工程师五五开了。
而这个Bug其实不难解决,开发者老哥后来也说了,这是个百分百能修复的Bug。
但从目前的情况来看,苹果显然还没修复这问题。
不然小雷也不至于被哔哥秀得头皮发麻啊。
在小雷看来,苹果不修这问题,要么觉得代码改起来太危险,删错一行代码,白忙活一个星期。
要么是认为普通用户不会遇上这Bug,想着省事儿摆烂。
但说实话吧,这Bug还真的很容易被人利用。
举个最简单的例子,万一有人故意制作一张“安卓正常,iOS黄图”的图片大肆传播,那影响得多恶劣啊。
希望苹果上点心吧,连民间程序员都能修复的Bug,堂堂国际大厂不可能没能力修。
————————————————————————
兄弟们,这选题是几个月前屯的,一直没机会发。
刚上Github看到,苹果似乎在最新的iOS版本中修复了这问题,所以想厂商玩合成图的小伙伴还是先停停手叭。