最近互联网平静得可怕,小雷作为高强度冲浪选手,都很难从中挖出好选题来写。
写手机曝光过于常规,大伙儿估计都看腻了,写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版本中修复了这问题,所以想厂商玩合成图的小伙伴还是先停停手叭。