夜雨聆风学习资料网

ARTICLE · 1111856

2026软考信息安全工程师备考-安卓安全

2026软考信息安全工程师备考-安卓安全

教程:

补充

Android Dangerous 权限组速查表

中文组名

英文组名

核心权限(英文)

中文含义

1. 短信

SMS

SEND_SMS

发送短信

RECEIVE_SMS

接收短信

READ_SMS

读取短信

RECEIVE_WAP_PUSH

接收 WAP Push 消息

RECEIVE_MMS

接收彩信

2. 存储

STORAGE

READ_EXTERNAL_STORAGE

读取外部存储

WRITE_EXTERNAL_STORAGE

写入外部存储

3. 联系人

CONTACTS

READ_CONTACTS

读取联系人

WRITE_CONTACTS

写入联系人

GET_ACCOUNTS

访问账户列表

4. 手机

PHONE

READ_PHONE_STATE

读取手机状态

CALL_PHONE

拨打电话

READ_CALL_LOG

读取通话记录

WRITE_CALL_LOG

写入通话记录

ADD_VOICEMAIL

添加语音信箱

USE_SIP

使用 SIP 网络电话

PROCESS_OUTGOING_CALLS

处理呼出电话

5. 日历

CALENDAR

READ_CALENDAR

读取日历

WRITE_CALENDAR

写入日历

6. 相机

CAMERA

CAMERA

访问摄像头

7. 位置

LOCATION

ACCESS_FINE_LOCATION

精准位置

ACCESS_COARSE_LOCATION

大致位置

ACCESS_BACKGROUND_LOCATION

后台位置(Android 10+)

8. 传感器

SENSORS

BODY_SENSORS

身体传感器

9. 麦克风

MICROPHONE

RECORD_AUDIO

录音

权限声明(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 系 统 支 持 的 数 据 存 储 方 式 , 给 出 对 应 存 储 方 式 的 编 号 。

答案:① ② ③ ④ ⑤

解析:

编号

存储方式

英文

本质

适用场景

①

共享偏好

SharedPreferences

XML 键值对

简单配置、登录状态

②

文件存储

File

文件(内部/外部)

大量数据、图片、日志

③

数据库

SQLite

轻量级关系型数据库

结构化数据、聊天记录

④

内容提供者

Content Provider

跨应用数据共享接口

通讯录、短信、媒体库

⑤

网络存储

Network Storage

远程服务器

云同步、备份


2023年

  1. APP打包后的格式?答案: APK(Android Package)。
  1. 是否可以用zip扩展名进行替换并进行解压?答案: 可以,APK 本质就是一个 ZIP 格式的压缩包,把 .apk 改成 .zip 后,用解压软件就能看到里面的文件结构。

 打包后的文件包括:

文件/目录

作用

assets/

静态资源文件(如 HTML、音频、数据库)

lib/

库文件(.so

文件,C/C++ 编译产物)

META-INF/

签名文件(MANIFEST.MF

、CERT.SF

、CERT.RSA

)

res/

编译后的资源文件

AndroidManifest.xml

配置清单文件(二进制格式)

classes.dex

核心代码文件(Dalvik 字节码)

resources.arsc

资源映射文件

  1. 地图导航类软件最小必要权限?答案: 位置权限
  2. 保护 APP 安全性的措施,包含以下哪几项?

A. 防反编译 B. 地址空间布局随机化 C. 防调试 D. 防篡改 E. 防窃取

答案:A、B、C、D、E 全选。

解析:

A. 防反编译:代码混淆(ProGuard)、DEX 加密。

B. 地址空间布局随机化(ASLR):系统级安全机制,防止内存攻击。

C. 防调试:检测调试器、反调试技术。

D. 防篡改:签名校验、完整性校验。

E. 防窃取:数据加密、加固。

  1. APP组件:Activity、Service、Content Provider、BroadcastReceiver。
  2. 填空:android:[(1)]="true"

答案:exported

解析:android:exported="true" 表示该 Activity 可以被外部应用启动。

  1. 哪个组件导致敏感信息泄露、SQL 注入?

答案:Content Provider(内容提供者)

解析:Content Provider 用于跨应用共享数据,如果未加权限保护或未校验 URI,容易导致目录遍历、SQL 注入、信息泄露。

  1. protectionLevel="signature" 除了 signature 以外还有哪两种保护等级?

答案:normal、dangerous

解析:Android 权限的四种保护级别:

normal:低风险,安装即授予。

dangerous:高风险,需用户动态授权。

signature:只有同签名的应用才能申请。

signatureOrSystem:系统级或同签名应用才能申请(旧版)。

  1. 完善权限申请:<(4) android:name="com.littlejerk.sample.permission.WEB"/>

答案:uses-permission

解析:申请权限的标签是 <uses-permission>,不是 <permission>。<permission> 是定义权限,<uses-permission> 是申请权限。

相关学习资料