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知識。
關注方法:打開手機微信->通訊錄->右上角"添加"->"搜號碼"->輸入"手機安全之家"->搜索。
或者而通過掃描下方二維碼也可以添加