1, adb shell具有丰富的系统权限,所以拥有shell id的应用可以执行很多动作,在JB版本,给shell id赋予了很多权限。
http://androidxref.com/4.1.1/xref/frameworks/base/data/etc/platform.xml
113 <!-- Standard permissions granted to the shell. -->
114 <assign-permission name="android.permission.WRITE_EXTERNAL_STORAGE" uid="shell" />
115 <assign-permission name="android.permission.SEND_SMS" uid="shell" />
116 <assign-permission name="android.permission.CALL_PHONE" uid="shell" />
117 <assign-permission name="android.permission.READ_CONTACTS" uid="shell" />
118 <assign-permission name="android.permission.WRITE_CONTACTS" uid="shell" />
119 <assign-permission name="android.permission.READ_CALENDAR" uid="shell" />
120 <assign-permission name="android.permission.WRITE_CALENDAR" uid="shell" />
121 <assign-permission name="android.permission.READ_USER_DICTIONARY" uid="shell" />
122 <assign-permission name="android.permission.WRITE_USER_DICTIONARY" uid="shell" />
123 <assign-permission name="android.permission.ACCESS_FINE_LOCATION" uid="shell" />
124 <assign-permission name="android.permission.ACCESS_COARSE_LOCATION" uid="shell" />
在JB版本之后,这种做法就被取消
2, shell package的androidmanifest.xml中使用了很多权限。
http://androidxref.com/5.1.1_r6/xref/frameworks/base/packages/Shell/AndroidManifest.xml
19<manifest xmlns:android="http://schemas.android.com/apk/res/android"
20 package="com.android.shell"
21 coreApp="true"
22 android:sharedUserId="android.uid.shell"
23 >
24
25 <!-- Standard permissions granted to the shell. -->
26 <uses-permission android:name="android.permission.SEND_SMS" />
27 <uses-permission android:name="android.permission.CALL_PHONE" />
28 <uses-permission android:name="android.permission.READ_CONTACTS" />
29 <uses-permission android:name="android.permission.WRITE_CONTACTS" />
30 <uses-permission android:name="android.permission.READ_CALENDAR" />
31 <uses-permission android:name="android.permission.WRITE_CALENDAR" />
32 <uses-permission android:name="android.permission.READ_USER_DICTIONARY" />
33 <uses-permission android:name="android.permission.WRITE_USER_DICTIONARY" />
34 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
35 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
36 <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
37 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
3, 如果一个具有system权限的app可以去执行adbshell 命令,那么这个shell command就可以以system权限来执行,这个风险很大
4, System app如果执行adb shell command。通过Runtime.getruntime()exec()去执行外部程序。
Process process = Runtime.getRuntime().exec( command);
不能允许第三方应用透过系统权限的app去执行adb shell命令
5, 通过adb 启动四大组件
恶意启动,恶意传值等都容易导致应用奔溃或者信息错误。
尽量避免组件外部调用,可以将export设置成false。如果需要外部调用,需要做一些认证或者逻辑判断。
6, 常见的adb shell命令
主要在源码\system\core\toolbox目录和源码\frameworks\base\cmds目录
拿android shellsettings命令为例,
adb shell settings put secure install_non_market_apps1
7, adb shell命令和adb命令的区别
adb shell是进入android linux环境,可以使用一些linux相关命令
adb 是个桥接,只能起到桥接功能。
【更多文章列表,尽在手机安全之家】
【1】Android Security框架
【2】FDE Introduction
【3】FDE之要求密码开机流程
【4】FDE之默认密码开机流程
【5】预置apk签名
【6】FDE之加密流程
【7】Adb Shell 安全
----------------------------------------------------------------------------------------------------------------------------------------------
请关注手机安全之家,了解更多Android Security知识。
关注方法:打开手机微信->通讯录->右上角"添加"->"搜号码"->输入"手机安全之家"->搜索。
或者而通过扫描下方二维码也可以添加