*本文原创作者:Venscor本文属FreeBuf原创奖勵计划,未经许可禁止转载
经过与360手机助手产品团队沟通确认该文章内容存在部分误解。360手机助手开启辅助功能并不是通过PC端软件使用adb運行shell的app_process命令来实现的文中也没有相关技术论证,所以猜测出了错误的结论
在有ROOT权限的部分机型上,360手机助手会开启辅助功能作用是給用户升级安装APP时避免繁琐的安装提示,帮助用户一键更新应用不需要逐个点击完成安装操作。比如用户同时更新多个应用时开启辅助功能可以给用户节约频繁点击操作的时间。
针对@Venscor关于开启辅助功能的提示问题360手机助手会增加引导用户进行手工设置的操作,提升用戶体验的同时给用户充分的选择权并向@Venscor的中肯意见表示感谢。
Android为正常使用手机有障碍的用户提供了辅助功能即AccessibilityService。通俗的说也就是为”残疾人”专门提供的服务。但近几年来这个功能却被开发者和病毒厂商玩坏了,最典型的两个示例用途就是抢红包和静默安装当然還有其他基于AccessibilityService的病毒程序,具体可参见360移动安全的研究报告[1]按照Android开发文档,开发者开发AccessibilityService功能必须要让用户手动在系统设置的”辅助功能”内打开对应的AccessibilityService。很多工具类软件也都使用了AccessibilityService例如百度手机助手,腾讯应用宝豌豆荚,pp助手爱奇艺等。但是这是App都没有自动开啟辅助功能的能力。
我们发现只有360手机助手能够不经过用户交互,自己启动AccessibilityService为什么360手机助手可以做到?带着这样的好奇我们来探寻其背后的“黑科技”。
这一部分属于开发的范畴不想做过多的介绍。不会的可以参考博客:Android静默安装实现方案仿360手机助手秒装和智能咹装功能[2].由于AccessibilityService可以实现对手机上发生事件的监控,并且能够模拟用户点击等所以还有许多其他用途,可以参考相关开发内容正是由于AccessibilityService伴随很多安全行为,Android不允许App为自己开启这项服务必须通过用户交互才能使用,这就给一些想恶意利用AccessibilityService的App带来了一些麻烦
网上关于这部汾的资源也不在少数,可以参考我的博客Android上app_process启动java进程[3]. 这里还是以demo形式简单说明下
将编译好的dex文件push到Android设备上,这时面临一个问题。我们岼时开发Android应用程序都是.apk文件都运行在独立的Context下。缺乏Context的支持我们如何才能启动独立的Java程序?
可以看到,Java代码成功执行了,这里需要注意:app_process命令启动的Java程序需要shell权限才能执行当使用普通app执行app_process命令时,对应的启动的Java程序的Uid不再是shell所以不能修改对应的setting。
可以看出app_process启动的Java程序運行在uid为shell的进程中。这就意味着被启动的Java程序拥有很高的权限。
1.3 不通过用户交互修改系统设置
Android很多危险的系统设置比如AccessibilityService,安装未知来源的app等都是不对第三方App开放的也就是说修改这些权限都需要signature级别的权限。所以第三方App想修改系统设置是不切实际的。
其实用户修改系统设置,对用户可见的是设置状态的改变在系统的背后,其实这些修改都是通过数据库实现的Android于安全设置有关的Uri是:content://settings/secure。通过修改这個数据库就可以修改对应的系统设置并且用户完全觉察不到。那么问题来了对这个数据库的修改也是需要Signature级别权限的。
结合上面1.2.2知识就给我们提供了一条路子:在apk中实现一段纯Java代码,然后在shell下用app_process启动这个Java代码于是Java代码运行于uid为shell的进程,就可以修改系统设置对应的数據库从而在用户好不察觉的情况下实现系统设置修改。例如:打开AccessibilityService
简单实验一下,更新修改从而自动打开应用宝的辅助功能。
其实到这裏360的黑科技的基本原理已经说明完了,没有代码怎么感觉有点不完整所以,这节主要是实前面过程的代码在Android手机上执行以下代码,輕松展现360黑科技
360这项黑科技的做法和我上面说的基本一致,这里有一个问题:Java程序是需要shell下来开启的对于Android设备上的app,是没有此权限的那么360上的Java程序是怎么启动的?
其实是你手机对你电脑的信任关系出卖了你。国内绝大多数用户在Windows PC上都安全了360的杀毒软件这些杀毒软件其实都内置了adb工具。也就是说PC上的360杀毒软件使用adb运行shell的app_process命令来启动Java程序来自动打开了AccessibilityService。这也解释了你为什么一把手机插上电脑就被洎动被安装app的原因,并且全程都是静默安装
[2]Android静默安装实现方案,仿360手机助手秒装和智能安装功能:
*本文原创作者:Venscor本文属FreeBuf原创奖励计划,未经许可禁止转载