ARTICLE · 1111856
2026软考信息安全工程师备考-安卓安全
教程:




补充
Android Dangerous 权限组速查表
中文组名 | 英文组名 | 核心权限(英文) | 中文含义 |
1. 短信 |
|
| 发送短信 |
| 接收短信 | ||
| 读取短信 | ||
| 接收 WAP Push 消息 | ||
| 接收彩信 | ||
2. 存储 |
|
| 读取外部存储 |
| 写入外部存储 | ||
3. 联系人 |
|
| 读取联系人 |
| 写入联系人 | ||
| 访问账户列表 | ||
4. 手机 |
|
| 读取手机状态 |
| 拨打电话 | ||
| 读取通话记录 | ||
| 写入通话记录 | ||
| 添加语音信箱 | ||
| 使用 SIP 网络电话 | ||
| 处理呼出电话 | ||
5. 日历 |
|
| 读取日历 |
| 写入日历 | ||
6. 相机 |
|
| 访问摄像头 |
7. 位置 |
|
| 精准位置 |
| 大致位置 | ||
| 后台位置(Android 10+) | ||
8. 传感器 |
|
| 身体传感器 |
9. 麦克风 |
|
| 录音 |
权限声明(uses-permission)
App 想用系统功能(定位、录音、读短信),必须在 AndroidManifest.xml 里提前“报备”。不报备,运行时直接崩溃。
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_SMS" />应用申请了 READ_SMS 但功能是打车,是否合理?(答案:不合理,属于过度申请)
简述 uses-permission 的作用。(答案:声明应用需要申请的权限,系统在安装或运行时据此授予)
自定义权限(permission 标签)
App 自己造一个权限,用来保护自己的组件。别的 App 想访问,必须先申请这个权限。
<!-- signature:只有同签名的 App 才能申请,最安全 -->
<permission
android:name="com.example.ridehailing.permission.ACCESS_DRIVER_INFO"
android:label="访问司机信息权限"
android:description="允许应用读取司机个人信息"
android:protectionLevel="signature" />
<!-- dangerous:需要用户手动弹窗授权 -->
<permission
android:name="com.example.ridehailing.permission.ACCESS_RIDE_HISTORY"
android:label="访问行程历史权限"
android:description="允许应用读取用户历史行程数据"
android:protectionLevel="dangerous" />protectionLevel 有哪些取值?(normal、dangerous、signature、signatureOrSystem)
signature 级别的权限,用户可以在设置里手动授予吗?(答案:不能,只有同签名应用才能拿到)
signature 和 dangerous 的区别?(答案:signature 同签名自动授予,dangerous 需用户弹窗确认)
四大组件注册
核心就两个属性:exported 和 permission。
Activity
<!-- 主 Activity:exported=true,允许外部启动 -->
<activity
android:name=".ui.MainActivity"
android:exported="true"
android:launchMode="singleTop"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- 受保护的 Activity:需要权限才能访问 -->
<activity
android:name=".ui.DriverDetailActivity"
android:exported="true"
android:permission="com.example.ridehailing.permission.ACCESS_DRIVER_INFO">
<intent-filter>
<action android:name="com.example.ridehailing.action.VIEW_DRIVER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>问 exported="true" 意味着什么?(答案:其他应用可以启动这个 Activity)
问 android:permission 加在 Activity 上有什么用?(答案:限制只有申请了该权限的应用才能启动它)
Service
<!-- 不导出,仅应用内部使用 -->
<service
android:name=".service.LocationTrackingService"
android:exported="false"
android:process=":remote" />
<!-- 受保护的服务:需要签名权限才能访问 -->
<service
android:name=".service.AdminService"
android:exported="true"
android:permission="com.example.ridehailing.permission.ACCESS_RIDE_HISTORY" />Content Provider
<provider
android:name=".provider.RideDataProvider"
android:authorities="com.example.ridehailing.provider"
android:exported="true"
android:readPermission="com.example.ridehailing.permission.ACCESS_RIDE_HISTORY"
android:writePermission="com.example.ridehailing.permission.ACCESS_DRIVER_INFO"
android:grantUriPermissions="true">
<path-permission
android:path="/passenger"
android:readPermission="android.permission.ACCESS_FINE_LOCATION" />
</provider>问 Provider 最容易导致什么漏洞?(答案:SQL 注入、信息泄露)
问 readPermission 和 writePermission 的区别?(答案:分别控制读和写的权限)
问 path-permission 有什么用?(答案:细化到具体路径的权限控制)
问 grantUriPermissions 是什么?(答案:允许临时授权某个 URI 给其他应用)
Broadcast Receiver
<!-- 短信接收器:高优先级可能拦截短信 -->
<receiver
android:name=".receiver.SmsReceiver"
android:exported="true"
android:permission="android.permission.BROADCAST_SMS">
<intent-filter android:priority="1000">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
<!-- 开机自启动 -->
<receiver
android:name=".receiver.BootReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>问 priority="1000" 有什么用?(答案:提高优先级,可能先于系统或其他应用收到广播,存在拦截风险)
问 BOOT_COMPLETED 广播常被用来做什么?(答案:开机自启动,恶意软件常用)
问 Receiver 的 exported="true" 有什么风险?(答案:外部应用可以发送广播触发它)
备份属性(allowBackup)
android:allowBackup="true" 表示允许通过 ADB 备份应用数据。
<application
android:allowBackup="true"
android:backupInForeground="true"
android:debuggable="false">
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="AIzaSyABCDEFGHIJKLMNOPQRSTUVWXYZ" />
</application>问 allowBackup="true" 有什么风险?(答案:攻击者可通过 ADB 备份应用数据,导致敏感信息泄露)
问 debuggable 发布版本应该设为什么?(答案:false)
问 meta-data 里硬编码 API KEY 有什么问题?(答案:敏感信息泄露,可被逆向提取)
SDK 版本声明(uses-sdk)
<uses-sdk
android:minSdkVersion="24"
android:targetSdkVersion="33"
android:maxSdkVersion="34" />问 minSdkVersion 和 targetSdkVersion 的区别?
答案:
minSdkVersion:最低支持的 Android 版本,低于这个版本装不上。
targetSdkVersion:目标版本,决定应用运行时触发哪些系统安全机制。
问 targetSdkVersion 太低有什么风险?(答案:无法触发新版系统的安全机制,如 Android 6.0 动态权限、Android 12 强制 exported 声明)
系统特征需求(uses-feature)
<uses-feature
android:name="android.hardware.location.gps"
android:required="true" />
<uses-feature
android:name="android.hardware.camera"
android:required="false" />问 required="true" 和 required="false" 的区别?
答案:
true:必须有该硬件,否则无法安装。
false:没有也能装,但功能可能受限。
问打车软件为什么 GPS 要设 required="true"?(答案:核心功能依赖 GPS,没有 GPS 无法使用)
2021年 试题四
阅读下列说明和图,回答问题1至问题4,将解答填入答题纸的对应栏内。
【说明】
近期,按照网络安全审查工作安排,国家网信办会同公安部、国家安全部、自然资源部、交通运输部、税务总局、市场监管总局等部门联合进驻某出行科技有限公司,开展网络安全审查,移动APP安全检测和个人数据安全再次成为关注焦点。
【问题1】(4分)
为保护Android系统及应用终端平台安全,Android系统在内核层、系统运行层、应用框架层以及应用程序层采取了相应的安全措施,以尽可能地保护移动用户数据、应用程序和设备安全。
在Android系统提供的安全措施中有安全沙箱、应用程序签名机制、权限声明机制、地址空间布局随机化等,请将上述四种安全措施按照其所在层次填入表4-1的空(1)-(4)。
表4-1 Android系统安全系统结构
层次 | 安全措施 |
应用程序层 | (1) |
应用框架层 | (2) |
系统运行层 | (3) |
内核层 | (4) |
答案:
(1)权 限 声 明 机 制 (2)应 用 程 序 签 名 机 制 (3)安 全 沙 箱 (4)地 址 空 间 布 局 随 机 化

【问题2】(6分)
Android系统通过AndroidManifest.xml文件来声明应用程序的权限信息。
(1)Android系统权限声明使用的配置文件名称是什么?
答案:AndroidManifest.xml

(2)Android 系 统 定 义 的 权 限 组 包 括 CALENDAR、 CAMERA、 CONTACTS、 LOCATION、 MICROPHONE、 PHONE、 SENSORS, SMS、 STORAGE.按 照 《 信 息 安 全 技 术 移 动 互 联 网 应 用 程 序 (App)收 集 个 人 信 息基 本 规 范 》 , 运 行 在 Android9.0 系 统 中 提 供 网 络 约 车 服 务 的 某 出 行 App 可 以 有 的 最 小 必 要 权 限是 以 上 权 限 组 的 哪 几 个 ?
答案:“网约车,最小必,位置(LOCATION)加手机(PHONE)。”
(存储、麦克风、短信、相机、通讯录,统统不是最小必要。)
(3)假 如 有 移 动 应 用 A 提 供 了 AService 服 务 , 对 应 的 权 限 描 述 如 下 :
<permission
android:name="USER_INFO"
android:label="read user information"
android:description="get user information"
android:ProtectionLevel="signature" />
<service android:name="com.demo.AService"
android:exported="true"
android:permission="com.demo.permission.USER_INFO">
</service>如 果 其 他 应 用 B 要 访 问 该 服 务 , 应 该 申 明 使 用 该 服 务 , 将 以 下 申 明 语 句 补 充 完 整 。
11.<________android:name='com.demo. AService">
答案:service
解析:如果其他应用 B 要访问应用 A 的 com.demo.AService,必须在它自己的 AndroidManifest.xml 里声明使用这个服务。
【问题3】(3分)
Android系统提供了丰富的组件,包括Activity、Service、Broadcast Receiver、Content Providers等。如果组件使用不当,可能会引入安全风险,请将上述组件填入对应的攻击场景中。
(1)目录遍历攻击:______ (2)界面劫持攻击:______ (3)短信拦截攻击:______
答案:
(1)目录遍历攻击:Content Providers(内容提供者)
(2)界面劫持攻击:Activities(活动)
(3)短信拦截攻击:Broadcast Receiver(广播接收器)
解析:
组件 | 常见攻击 |
Activity | 界面劫持、Activity 暴露、Intent 重定向 |
Service | Service 暴露、权限提升、后台驻留 |
Broadcast Receiver | 短信拦截、广播伪造、开机自启动 |
Content Provider | 目录遍历、SQL 注入、信息泄露 |
【问题4】(2分)
移 动 终 端 设 备 常 见 的 数 据 存 储 方 式 包 括 :① SharedPreferences;② 文 件 存 储 ;③ SQLite 数 据 库 ; ④ ContentProvider; ⑤ 网 络 存 储 。从 以 上 5 种 方 式 中 选 出 Android 系 统 支 持 的 数 据 存 储 方 式 , 给 出 对 应 存 储 方 式 的 编 号 。
答案:① ② ③ ④ ⑤
解析:
编号 | 存储方式 | 英文 | 本质 | 适用场景 |
① | 共享偏好 |
| XML 键值对 | 简单配置、登录状态 |
② | 文件存储 |
| 文件(内部/外部) | 大量数据、图片、日志 |
③ | 数据库 |
| 轻量级关系型数据库 | 结构化数据、聊天记录 |
④ | 内容提供者 |
| 跨应用数据共享接口 | 通讯录、短信、媒体库 |
⑤ | 网络存储 |
| 远程服务器 | 云同步、备份 |
2023年
- APP打包后的格式?答案: APK(Android Package)。
- 是否可以用zip扩展名进行替换并进行解压?答案: 可以,APK 本质就是一个 ZIP 格式的压缩包,把 .apk 改成 .zip 后,用解压软件就能看到里面的文件结构。
打包后的文件包括:
文件/目录 | 作用 |
| 静态资源文件(如 HTML、音频、数据库) |
| 库文件( 文件,C/C++ 编译产物) |
| 签名文件( 、 、 ) |
| 编译后的资源文件 |
| 配置清单文件(二进制格式) |
| 核心代码文件(Dalvik 字节码) |
| 资源映射文件 |
- 地图导航类软件最小必要权限?答案: 位置权限
- 保护 APP 安全性的措施,包含以下哪几项?
A. 防反编译 B. 地址空间布局随机化 C. 防调试 D. 防篡改 E. 防窃取
答案:A、B、C、D、E 全选。
解析:
A. 防反编译:代码混淆(ProGuard)、DEX 加密。
B. 地址空间布局随机化(ASLR):系统级安全机制,防止内存攻击。
C. 防调试:检测调试器、反调试技术。
D. 防篡改:签名校验、完整性校验。
E. 防窃取:数据加密、加固。
- APP组件:Activity、Service、Content Provider、BroadcastReceiver。
- 填空:android:[(1)]="true"
答案:exported
解析:android:exported="true" 表示该 Activity 可以被外部应用启动。
- 哪个组件导致敏感信息泄露、SQL 注入?
答案:Content Provider(内容提供者)
解析:Content Provider 用于跨应用共享数据,如果未加权限保护或未校验 URI,容易导致目录遍历、SQL 注入、信息泄露。
- protectionLevel="signature" 除了 signature 以外还有哪两种保护等级?
答案:normal、dangerous
解析:Android 权限的四种保护级别:
normal:低风险,安装即授予。
dangerous:高风险,需用户动态授权。
signature:只有同签名的应用才能申请。
signatureOrSystem:系统级或同签名应用才能申请(旧版)。
- 完善权限申请:<(4) android:name="com.littlejerk.sample.permission.WEB"/>
答案:uses-permission
解析:申请权限的标签是 <uses-permission>,不是 <permission>。<permission> 是定义权限,<uses-permission> 是申请权限。