AndroidManifest.xml中含盖的安全问题详解中含盖的安全问题详解
0x00 关于关于AndroidManifest.xml
AndroidManifest.xml 是每个android程序中必须的文件。它位于整个项目的根目录,Manifest文件提供有关应用程序到Android
系统的基本信息,系统必须具有该信息才能运行任何应用程序的代码。换句话说APP是跑在Android系统上,既然要跑在其
上,就必须提供信息给Android System,这些信息就存在AndroidManifest中。AndroidManifest.xml 存放在 app/src/main/ 目录
下。在反编译APK文件后,其文件是以乱码格式存在,需要进行转换才能正常查看。
AndroidManifest.xml的主要功能的主要功能
命名应用程序Java包,软件包名称作为应用程序的唯一标识符;
描述了应用程序的组件,其中包括构成应用程序的Activity,Service,Broadcast Receiver和Content Provider;它还命名实现
每个组件并发布其功能的类,例如Intent可以处理的消息。这些声明通知Android系统的组件及其可以启动的条件;
决定哪些processes主持application;
宣告这个App有哪些权限,它声明应用程序必须拥有的权限才能访问API的受保护部分并与其他应用程序交互。它还声明其他
人为了与应用程序的组件交互而需要的权限; 5.它列出了Instrumentation在应用程序运行时提供概要分析和其他信息的类。这
些声明仅在应用程序正在开发中才会存在,并在应用程序发布之前被删除; 6.它声明了应用程序需要的最低级别的Android API;
7.它列出了应用程序必须链接的库。
<?xml version="1.0" encoding="utf-8" standalone="no"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mwr.example.sieve">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<permission android:label="Allows reading of the Key in Sieve" android:name="com.mwr.example.sieve.READ_KEYS"
android:protectionLevel="dangerous"/>
<permission android:label="Allows editing of the Key in Sieve" android:name="com.mwr.example.sieve.WRITE_KEYS"
android:protectionLevel="dangerous"/>
<application android:allowBackup="true" android:debuggable="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity android:clearTaskOnLaunch="true" android:excludeFromRecents="true" android:exported="true" android:finishOnTaskLaunch="true"
android:label="@string/title_activity_file_select" android:name=".FileSelectActivity"/>
<activity android:excludeFromRecents="true" android:label="@string/app_name" android:launchMode="singleTask" android:name=".MainLoginActivity"
android:windowSoftInputMode="adjustResize|stateVisible">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:clearTaskOnLaunch="true" android:excludeFromRecents="true" android:exported="true" android:finishOnTaskLaunch="true"
android:label="@string/title_activity_pwlist" android:name=".PWList"/>
<activity android:clearTaskOnLaunch="true" android:excludeFromRecents="true" android:finishOnTaskLaunch="true"
android:label="@string/title_activity_settings" android:name=".SettingsActivity"/>
<activity android:clearTaskOnLaunch="true" android:excludeFromRecents="true" android:finishOnTaskLaunch="true"
android:label="@string/title_activity_add_entry" android:name=".AddEntryActivity"/>
<activity android:clearTaskOnLaunch="true" android:excludeFromRecents="true" android:finishOnTaskLaunch="true"
android:label="@string/title_activity_short_login" android:name=".ShortLoginActivity"/>
<activity android:clearTaskOnLaunch="true" android:excludeFromRecents="true" android:finishOnTaskLaunch="true"
android:label="@string/title_activity_welcome" android:name=".WelcomeActivity"/>
<activity android:clearTaskOnLaunch="true" android:excludeFromRecents="true" android:finishOnTaskLaunch="true"
android:label="@string/title_activity_pin" android:name=".PINActivity"/>
<service android:exported="true" android:name=".AuthService" android:process=":remote"/>
<service android:exported="true" android:name=".CryptoService" android:process=":remote"/>
<provider android:authorities="com.mwr.example.sieve.DBContentProvider" android:exported="true" android:multiprocess="true"
android:name=".DBContentProvider">
<path-permission android:path="/Keys" android:readPermission="com.mwr.example.sieve.READ_KEYS"
android:writePermission="com.mwr.example.sieve.WRITE_KEYS"/>
</provider>
<provider android:authorities="com.mwr.example.sieve.FileBackupProvider" android:exported="true" android:multiprocess="true"
android:name=".FileBackupProvider"/>
</application>
</manifest>
0x01 AndroidManifest.xml风险点分析风险点分析
1、allowBackup设置风险
Android API Level 8 (Android 2.1)及其以上Android系统提供了为应用程序数据的备份和恢复功能,此功能的开关决定于该
应用程序中 AndroidManifest.xml 文件中的 allowBackup 属性值,其属性值默认是 true。当allowBackup的属性值没有显示设
置为false时,攻击者可通过 adb backup 和 adb restore 来进行对应用数据的备份和恢复,从而可能获取明文存储的用户的敏
感信息。
android:allowBackup=[“true” | “false”]