转载自:https://www.freebuf.com/articles/terminal/121253.html

0×00 概述

Android为正常使用手机有障碍的用户提供了辅助功能,即AccessibilityService。通俗的说,也就是为”残疾人”专门提供的服务。但近几年来,这个功能却被开发者和病毒厂商玩坏了,最典型的两个示例用途就是抢红包和静默安装,当然还有其他基于AccessibilityService的病毒程序,具体可参见360移动安全的研究报告[1]。按照Android开发文档,开发者开发AccessibilityService功能,必须要让用户手动在系统设置的”辅助功能”内打开对应的AccessibilityService。很多工具类软件也都使用了AccessibilityService,例如百度手机助手,腾讯应用宝,豌豆荚,pp助手,爱奇艺等。但是,这是App都没有自动开启辅助功能的能力。

我们发现,只有360手机助手能够不经过用户交互,自己启动AccessibilityService。为什么360手机助手可以做到?带着这样的好奇,我们来探寻其背后的“黑科技”。

0×01 必备知识

1.1 AccessibilityService的使用

这一部分属于开发的范畴,不想做过多的介绍。不会的可以参考博客:Android静默安装实现方案,仿360手机助手秒装和智能安装功能[2].由于AccessibilityService可以实现对手机上发生事件的监控,并且能够模拟用户点击等。所以还有许多其他用途,可以参考相关开发内容。正是由于AccessibilityService伴随很多安全行为,Android不允许App为自己开启这项服务,必须通过用户交互才能使用,这就给一些想恶意利用AccessibilityService的App带来了一些麻烦。

1.2 Android独立运行Java程序

网上关于这部分的资源也不在少数,可以参考我的博客Android上app_process启动java进程[3]. 这里还是以demo形式简单说明下。

1.2.1 编写一个Java程序并编译成Dalvik可执行的jar/dex包。

public class Helloworld {public static void main(String[]args){System.out.println("Hello, I am started by app_process!");}
}
//编译,这里主要是Platform tool上用的是Java 7,所以显式指定1.7
javac -source 1.7 -target 1.7 C:\Users\Venscor\Desktop\app_process\dump.java
//生成dex,当然生成jar在Android上也是可执行的
dx --dex --output=C:\Users\Venscor\Desktop\app_process\Hellworld.dex Helloworld.class

将编译好的dex文件push到Android设备上,这时,面临一个问题。我们平时开发Android应用程序都是.apk文件,都运行在独立的Context下。缺乏Context的支持,我们如何才能启动独立的Java程序?

其实,这里需要普及一个知识点,就是Android apk执行的其实点并不是开发者认为的onCreate函数,其实启动点在Framework层中的ActivityThread.java的main()函数。更底层一点来说,每个apk都是由app_process间接启动起来的。使用app_process执行上述java代码,app_process命令如下:

app_process -Djava.class.path=Helloworld.dex /data/local/tmp Helloworld

可以看到,Java代码成功执行了,这里需要注意:app_process命令启动的Java程序需要shell权限才能执行,当使用普通app执行app_process命令时,对应的启动的Java程序的Uid不再是shell,所以不能修改对应的setting。

1.2.2 被启动的Java程序的Uid

通过ps命令查看app_process启动的Java的Uid,以及对应的权限。

可以看出,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。

简单实验一下,更新修改从而自动打开应用宝的辅助功能。

/*shell cmd 1*/
settings put secure enabled_accessibility_services com.tencent.android.qqdownloader/com.tencent.nucleus.manager.accessibility.YYBAccessibilityService /*shell cmd 2*/
settings put secure accessibility_enabled 1 

0×02 实验

其实到这里,360的黑科技的基本原理已经说明完了,没有代码怎么感觉有点不完整。所以,这节主要是实前面过程的代码。在Android手机上执行以下代码,轻松展现360黑科技。

package com.venscor.helloworld;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class Helloworld { public static void main(String[]args){System.out.println("Hello, I am started by app_process!");String cmd1="settings put secure enabled_accessibility_services com.qihoo.appstore/com.qihoo.appstore.accessibility.AppstoreAccessibility";String cmd2="settings put secure accessibility_enabled 1";execShell(cmd1);execShell(cmd2);}private  static void execShell(String cmd){try {Process p=Runtime.getRuntime().exec(cmd);BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));String readLine=br.readLine();while(readLine!=null){System.out.println(readLine);readLine=br.readLine();}if(br!=null){br.close();}p.destroy();p=null;} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

0×03 360手机助手的做法

360这项黑科技的做法和我上面说的基本一致,这里有一个问题:Java程序是需要shell下来开启的,对于Android设备上的app,是没有此权限的。那么360上的Java程序是怎么启动的?

其实,是你手机对你电脑的信任关系出卖了你。国内绝大多数用户在Windows PC上都安全了360的杀毒软件,这些杀毒软件其实都内置了adb工具。也就是说,PC上的360杀毒软件使用adb运行shell的app_process命令来启动Java程序来自动打开了AccessibilityService。这也解释了你为什么一把手机插上电脑,就被自动被安装app的原因,并且全程都是静默安装。

好了,空口无凭。我们看360手机助手的代码,其通过两种方式实现,而且方式2粗心的程序员还打错字了,把accessibility_enabled打成了enabled_accessibility_services.代码路径:\com\qihoo\appstore\rootcommand\accessibility\AppStoreAccessibilityServiceEnableCommand.class

0×04 参考文献

[1]Android Accessibility安全性研究报告:http://blogs.360.cn/360mobile/2016/09/07/research_of_accessibility/

[2]Android静默安装实现方案,仿360手机助手秒装和智能安装功能: http://blog.csdn.net/guolin_blog/article/details/47803149#reply

[3]Android上app_process启动java进程: http://blog.csdn.net/u010651541/article/details/53163542

揭秘360手机助手未经用户同意,自动开启辅助功能的“黑科技”相关推荐

  1. 懒癌也有救!360手机助手7.0评测:不搜索也能给你想要的

    经过几个月的内部测试以及两个月的线上测试,主打个性分发的360手机助手7.0正式版终于揭开神秘面纱,于近日正式上线.据已体验过的网友表示,360手机助手7.0正式版较目前常规的应用商店有了极大的改进, ...

  2. 360手机助手内部资料曝光,63张PPT纯干货

    360手机助手内部资料曝光,63张PPT纯干货 日前,国内最大的安卓应用商店360手机助手发布了<2016年手机软件行业趋势绿皮书>,这份绿皮书对2015年以来移动互联网的趋势做了总结,展 ...

  3. 360 android 应用市场,360手机助手在安卓应用市场占大份额

    日前,奇虎360发布了2014财年第三季度未经审计财报.据报告显示,奇虎360第三季度营收为3.764亿美元,比去年同期的1.879亿美元增长100.3%.奇虎董事长周鸿祎在电话会议中表示,我们还在继 ...

  4. 手机无法与电脑360助手连接到服务器失败,360手机助手怎么连接不上手机怎么办...

    360手机助手有时候无法连接到手机助手,这个确实是很多用户经常遇见的问题,特别是你想要传送关键资料和文件的时候,心情特别糟糕,希望可以尽快解决这个问题,根据不同的手机和设定,连接中会出现非常大差异的变 ...

  5. 360手机助手 无法android 4.2手机软件移动sd卡,360手机助手为什么不能移至sd卡

    360手机助手使用的时候非常方便,目前还可以一键安装程序,但是很多应用直接安装到了手机内存,这对于本身手机内存不足的用户是一种及其麻烦的事情,大家都希望可以将360手机助手安装的应用转移到sd卡中,这 ...

  6. 360助手 android版,360手机助手

    360手机助手是奇虎360官方出品的免费手机管理应用,360手机助手是安卓手机用户的防电话骚扰.防垃圾短信的安全管理工具,360手机助手更可以帮您实时监控手机状态.网络速度.流量套餐等使用情况.360 ...

  7. 网信办拟规定:平台未经用户同意不得强制订阅关注账号;Twitter回应大范围宕机;Krita 4.4.0发布|极客头条

    整理 | 郑丽媛 头图 | CSDN 下载自东方 IC 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 国内 ...

  8. 您的美团账户,美团互助未经客户同意自动扣费0.01元是什么情况

    美团互助未经客户同意自动扣费0.01元 很多美团App的绑卡用户,收到一条自动扣费信息,大概意思就是扣费0.01元. 扣费事件分析:         扣费0.01元,钱虽然不多,您第一次看到银行给您发 ...

  9. Python爬取360手机助手评论——以百度地图为例

    想做竞品分析,打算先从应用市场爬一些应用的用户用户评论作为素材:这次爬取的是360手机助手网站,结尾附爬取完的百度地图和高德地图的用户评论文件~ 网页链接:http://zhushou.360.cn/ ...

最新文章

  1. git reset后本地拉取_Git学习笔记
  2. WCF常见问题及解决方案
  3. 开展Java的学习方向,看最新Java视频教程
  4. 让人期待的2011年度最佳 jQuery 插件发布啦
  5. cocos2dx3.0五种屏幕适配模式,及FIXED_WIDTH、FIXED_HEIGHT使用
  6. leetcode1471. 数组中的 k 个最强值(排序)
  7. oracle11g 未,Oracle11g链接提示未“在本地计算机注册“OraOLEDB.Oracle”解决方法
  8. CF 799B T-shirt buying
  9. oracle管理员的作用,ORACLE数据库管理员的职责
  10. 人对光波的三种特性_面试题:常用塑胶材料的特性及用途,你能列出几个?
  11. Linux添加用户及用户权限管理
  12. 开juǎn有益系列(一)——Binary search(二分查找/折半查找算法)
  13. 【机器学习与算法】python手写算法:Kmeans和Kmeans++算法
  14. Pyhton爬小说实例解析笔记——爬虫基础
  15. 苦尽甘来 一个月学通JavaWeb(六 XML)
  16. TAPD 完整项目工作流
  17. ufvm可以读哪些网格_FM24C05UFVM8
  18. 线代——余子式和代数余子式
  19. python实验——第一次
  20. Streamline(流线),Pathline(迹线),Streakline(脉线) and Timeline(时间线)

热门文章

  1. 全方位助力摄影师后期 Nik Collection 5
  2. 正则表达式周二挑战赛 第一周
  3. 仿51用车 Ipad版
  4. 高斯消元法(Gauss Elimination)
  5. 正当防卫与紧急避险的异同
  6. 苹果iOS开发系列--详解Swift 3.0语言的重大变化
  7. 电子发票OFD格式转PDF格式
  8. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java社区智慧养老系统b0lh8
  9. ChatGPT实现用C语言写一个扫雷小游戏
  10. css3动画实现最简单的幻灯片效果