Jarvis's Blog

白帽子、全栈、IoT安全专家、嵌入式系统专家

灵异事件分析之半夜iPhone手机锁屏播放诡异音乐

  睡梦中被吵醒,是被手机吵醒了,我的iPhone竟然在充电锁屏状态下,诡异的播放着音乐,奇怪,我的手机不是勿扰模式吗?拿到手机一看,才4点半,这TM怎么手机在自动播放音乐啊,打开通知状态,发现并没有音乐在播放,杀了后台所有进程,还是在播放,这真的是见鬼了啊!怎么办,还没地方可以关,还一直一直重复播放,这还让不让人睡觉了啊,作为一个大黑客,第一反应就是,难道我被人黑了?可是真的很困啊,这时候,一不小心按到了siri,播放停止了,好像一切恢复正常,算了,太困了,接着睡,早上起来再说。

  6:45,诡异音乐再次想起,这次我真的是要疯了,赶紧从床上弹起来,拿起手机,还是熟悉的配方,还是熟悉的音乐,这大早上的也闹鬼?不太可能吧,科学告诉我,闹鬼是不可能的,那么只有可能是被黑了,但是直觉告诉我,这种可能性也并不大,因为没有人黑了你手机还给你播放音乐打扰你睡觉的,一般都是会隐藏起来,所以直觉让我把这起事件认定为一定是一次乌龙。那么事出必有因,必须分析一下!

  首先,我趁着音乐还在播放,就用麦克风录了一段,备用以查找音频来源,后来发现这个声音还没完没了了,播放完了还一直重复播放,真的是想烦死我呀。后来搜了半天,使用了各种网易云音乐,虾米,以及soundhound,均无法查找音频来源,这。。。。我把样本放在这里了。大家可以一起来鉴定一下:

  好了,既然此路行不通,那我们就开始发挥大黑阔的本能吧,首先看看日志,使用各大xx助手都可以看,然而因为后来很长时间都没有复现,所以日志似乎也没有什么参考价值。

  百度搜索iPhone自动播放音乐,可以看到这个事件也不是什么新鲜事,似乎早有爆料了,只不过这次被我给碰到了,就会显得特别诡异:

最后,找到了这篇文章:
http://www.sangsan.cn/article/learn/1049.htm 这篇文章里面的情况是QQ引起的,QQ在自动更新之后,一般第一次打开更新后的应用首页都会放一些广告或者新功能的介绍,只不过这次的广告有声音,导致QQ在后台自动播放音乐。然而,我并没有安装QQ。。。。

  好了,到此结论很明确了,虽然我不是因为QQ引起的,但是看这个阵势应该是某个其他App引起的,然而我装了那么多app到底是哪个?一个一个找吗?这个也不太现实。不过,可以翻翻崩溃日志,这种没有在后台留下任何记录的播放通常应该是一个线程还驻留,而主进程崩溃的情况。这一翻,果然翻出端倪来了:

  按时间排序,看上去美居app的确在今天的4点多和6点多分别崩溃了一次,提取出来看看,这一下,终于发现真凶了:

Thread 2:
0 libsystem_kernel.dylib 0x0000000194cc0ed8 0x194c9c000 + 151256
1 Foundation 0x0000000195afd298 0x195a8d000 + 459416
2 Foundation 0x0000000195afca44 0x195a8d000 + 457284
3 Foundation 0x0000000195aac568 0x195a8d000 + 128360
4 Foundation 0x0000000195afd0ac 0x195a8d000 + 458924
5 BHSmartHome 0x0000000105b6c04c 0x1058b4000 + 2850892
6 libdispatch.dylib 0x0000000194b3c374 0x194b39000 + 13172
7 libdispatch.dylib 0x0000000194b3d8f4 0x194b39000 + 18676
8 libdispatch.dylib 0x0000000194b44e2c 0x194b39000 + 48684
9 libdispatch.dylib 0x0000000194b45970 0x194b39000 + 51568
10 libdispatch.dylib 0x0000000194b4dd18 0x194b39000 + 85272
11 libsystem_pthread.dylib 0x0000000194d37ab0 0x194d34000 + 15024
12 libsystem_pthread.dylib 0x0000000194d3ddc4 0x194d34000 + 40388

Thread 3 name: AVAudioSession Notify Thread
Thread 3:
0 libsystem_kernel.dylib 0x0000000194cb4c78 0x194c9c000 + 101496
1 CoreFoundation 0x00000001950bb320 0x19500e000 + 709408
2 CoreFoundation 0x00000001950b5fc4 0x19500e000 + 688068
3 CoreFoundation 0x00000001950b5764 0x19500e000 + 685924
4 AVFAudio 0x000000019b0482d0 0x19afbb000 + 578256
5 AVFAudio 0x000000019b072ecc 0x19afbb000 + 753356
6 libsystem_pthread.dylib 0x0000000194d35920 0x194d34000 + 6432
7 libsystem_pthread.dylib 0x0000000194d3587c 0x194d34000 + 6268
8 libsystem_pthread.dylib 0x0000000194d3ddcc 0x194d34000 + 40396

Thread 4 name: com.apple.NSURLConnectionLoader
Thread 4:
0 libsystem_kernel.dylib 0x0000000194cb4c78 0x194c9c000 + 101496
1 CoreFoundation 0x00000001950bb320 0x19500e000 + 709408
2 CoreFoundation 0x00000001950b5fc4 0x19500e000 + 688068
3 CoreFoundation 0x00000001950b5764 0x19500e000 + 685924
4 CFNetwork 0x00000001956d72bc 0x1956d5000 + 8892
5 Foundation 0x0000000195a94184 0x195a8d000 + 29060
6 Foundation 0x0000000195bca040 0x195a8d000 + 1298496
7 libsystem_pthread.dylib 0x0000000194d35920 0x194d34000 + 6432
8 libsystem_pthread.dylib 0x0000000194d3587c 0x194d34000 + 6268
9 libsystem_pthread.dylib 0x0000000194d3ddcc 0x194d34000 + 40396

Thread 2:
0   libsystem_kernel.dylib        	0x0000000194cc0ed8 0x194c9c000 + 151256
1   Foundation                    	0x0000000195afd298 0x195a8d000 + 459416
2   Foundation                    	0x0000000195afca44 0x195a8d000 + 457284
3   Foundation                    	0x0000000195aac568 0x195a8d000 + 128360
4   Foundation                    	0x0000000195afd0ac 0x195a8d000 + 458924
5   BHSmartHome                   	0x0000000105b6c04c 0x1058b4000 + 2850892
6   libdispatch.dylib             	0x0000000194b3c374 0x194b39000 + 13172
7   libdispatch.dylib             	0x0000000194b3d8f4 0x194b39000 + 18676
8   libdispatch.dylib             	0x0000000194b44e2c 0x194b39000 + 48684
9   libdispatch.dylib             	0x0000000194b45970 0x194b39000 + 51568
10  libdispatch.dylib             	0x0000000194b4dd18 0x194b39000 + 85272
11  libsystem_pthread.dylib       	0x0000000194d37ab0 0x194d34000 + 15024
12  libsystem_pthread.dylib       	0x0000000194d3ddc4 0x194d34000 + 40388

Thread 3 name:  AVAudioSession Notify Thread
Thread 3:
0   libsystem_kernel.dylib        	0x0000000194cb4c78 0x194c9c000 + 101496
1   CoreFoundation                	0x00000001950bb320 0x19500e000 + 709408
2   CoreFoundation                	0x00000001950b5fc4 0x19500e000 + 688068
3   CoreFoundation                	0x00000001950b5764 0x19500e000 + 685924
4   AVFAudio                      	0x000000019b0482d0 0x19afbb000 + 578256
5   AVFAudio                      	0x000000019b072ecc 0x19afbb000 + 753356
6   libsystem_pthread.dylib       	0x0000000194d35920 0x194d34000 + 6432
7   libsystem_pthread.dylib       	0x0000000194d3587c 0x194d34000 + 6268
8   libsystem_pthread.dylib       	0x0000000194d3ddcc 0x194d34000 + 40396

Thread 4 name:  com.apple.NSURLConnectionLoader
Thread 4:
0   libsystem_kernel.dylib        	0x0000000194cb4c78 0x194c9c000 + 101496
1   CoreFoundation                	0x00000001950bb320 0x19500e000 + 709408
2   CoreFoundation                	0x00000001950b5fc4 0x19500e000 + 688068
3   CoreFoundation                	0x00000001950b5764 0x19500e000 + 685924
4   CFNetwork                     	0x00000001956d72bc 0x1956d5000 + 8892
5   Foundation                    	0x0000000195a94184 0x195a8d000 + 29060
6   Foundation                    	0x0000000195bca040 0x195a8d000 + 1298496
7   libsystem_pthread.dylib       	0x0000000194d35920 0x194d34000 + 6432
8   libsystem_pthread.dylib       	0x0000000194d3587c 0x194d34000 + 6268
9   libsystem_pthread.dylib       	0x0000000194d3ddcc 0x194d34000 + 40396


 

看到了AVAudioSession Notify Thread,看到这里,打开美居app,果然看到熟悉的首次更新推送页面,也响起了之前录下的音乐。

看来是推送的问题,为此我特地查了一下Apple Push的文档,里面有这么一段话:

In addition, if you enabled the remote notifications background mode, the system launches your app (or wakes it from the suspended state) and puts it in the background state when a remote notification arrives. However, the system does not automatically launch your app if the user has force-quit it. In that situation, the user must relaunch your app or restart the device before the system attempts to launch your app automatically again.

确实苹果的推送可以做到让收到推送的设备启动对应app并放到后台。

  也就是说,这次事件的本质在于,某天,美居app更新了,这次更新,推送页是有背景声音的。理论上来说,在更新后的第一次推送就应该出现这样的现象,即应用被唤醒,有背景音乐应该直接会播放出来。然而,根据日志来看,美居app每天崩溃无数次,也就是说,这个app日常都有推送,但是我没有收到推送的原因就是程序没起来就崩了,而偶然有几次成功推送能起来导致音频Thread启动,就导致了今天的现象,此时只要启动app,将推送页内容标记为已读状态,下次不再出现推送页,后续问题也就不再出现了。

  而为什么我播放其他声音就能够让诡异的声音直接停止,而不是像音乐App一样,当其他声音播放结束,音乐又会自动恢复播放。为此,我又查看了崩溃日志,看来这是这个app的另外一个Bug,那就是播放音乐的时候没有检测当前是否有其他声音在播放,如果有,应该pause播放,否则就会crash,所以当我打开siri或者其他音乐的时候,应该是播放线程直接crash了,因此播放停止。好吧,所以,就这么个bug百出的app就弄出这么个灵异事件,真是令人感到发指,必须差评:

  从这一点来看,我觉得苹果对于音乐自动播放的限制应该学学Chrome,为了防止打扰用户,音乐的自动播放必须先有用户交互的前提下,否则很容易打扰到用户!

NanoPi Neo Air使用AP6234模块在armbian系统中异常原因分析

上一篇

在中美贸易战大背景下,作为一个普通人应该怎么做

下一篇
评论
发表评论 说点什么
9763
0

    浙公网安备 33011002014706号