时间:2021-05-21
0x00 关于AndroidManifest.xml
AndroidManifest.xml 是每个android程序中必须的文件。它位于整个项目的根目录,Manifest文件提供有关应用程序到Android系统的基本信息,系统必须具有该信息才能运行任何应用程序的代码。换句话说APP是跑在Android系统上,既然要跑在其上,就必须提供信息给Android System,这些信息就存在AndroidManifest中。AndroidManifest.xml 存放在 app/src/main/ 目录下。在反编译APK文件后,其文件是以乱码格式存在,需要进行转换才能正常查看。
AndroidManifest.xml的主要功能
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"]
$ adb backup -nosystem -noshared -apk -f com.example.demo$ adb restore com.example.demo2、debuggable设置风险
该属性用于指定应用程序是否能够被调试,即使是以用户模式运行在设备上的时候,如果设置为true,则可以被调试;但是现在Android版本均默认debuggable的属性值为false,所以建议使用默认配置。
android:debuggable=["true" | "false"]
3、组件导出风险
四大组件
可导出的组件能被第三方APP任意调用,导致敏感信息泄露,并可能被利用于绕过认证、恶意代码注入、sql注入、拒绝服务等攻击;
Activity中exported的默认值
而intent filter标签代表是主Activity,而每个APP都会有一个主Activity,所以当应用的Activity不必要导出时,或者配置了intent filter标签,建议显示设置android:exported="false"。如果组件必须要导出给其他应用使用,建议对组件进行权限控制。
Broadcast Receive和Service的默认值都跟Activity的一样。
Content Provider中exported的默认值
当minSdkVersion或者targetSdkVersion小于16时,默认为true 大于17时,默认为false
4、自定义权限风险
在Android系统的安全模型中,应用程序在默认的情况下不可以执行任何对其他应用程序、系统或用户带来负面影响的操作。如果应用需要执行某些操作,就需要声明使用这个操作对应的权限,也就是在AndroidManifest.xml文件中添加<uses-permission>标记,当然也可以自定义属于自己的permission。但是如果权限控制不当,那么就可能导致各种越权等安全问题。
<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"/>android:protectionLevel=["normal" | "dangerous" | "signature" | "signatureOrSystem"]0x02 AndroidManifest.xml结构
<?xmlversion="1.0"encoding="utf-8"?> <manifest> <application> <activity> <intent-filter> <action/> <category/> </intent-filter> </activity> <activity-alias> <intent-filter></intent-filter> <meta-data/> </activity-alias> <service> <intent-filter></intent-filter> <meta-data/> </service> <receiver> <intent-filter></intent-filter> <meta-data/> </receiver> <provider> <grant-uri-permission/> <meta-data/> </provider> <uses-library/> </application> <uses-permission/> <permission/> <permission-tree/> <permission-group/> <instrumentation/> <uses-sdk/> <uses-configuration/> <uses-feature/> <supports-screens/></manifest>0x03 AndroidManifest.xml分节介绍
1、manifest
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.woody.test" android:sharedUserId="string" android:sharedUserLabel="string resource" android:versionCode="integer" android:versionName="string" android:installLocation=["auto" | "internalOnly" | "preferExternal"] ></manifest>2、application
<application android:allowClearUserData=["true" | "false"] android:allowTaskReparenting=["true" | "false"] android:backupAgent="string" android:debuggable=["true" | "false"] android:description="string resource" android:enabled=["true" | "false"] android:hasCode=["true" | "false"] android:icon="drawable resource" android:killAfterRestore=["true" | "false"] android:label="string resource" android:manageSpaceActivity="string" android:name="string" android:permission="string" android:persistent=["true" | "false"] android:process="string" android:restoreAnyVersion=["true" | "false"] android:taskAffinity="string" android:theme="resource or theme" ></application>3、activity
<activity android:allowTaskReparenting=["true" | "false"] android:alwaysRetainTaskState=["true" | "false"] android:clearTaskOnLaunch=["true" | "false"] android:configChanges=["mcc", "mnc", "locale", "touchscreen", "keyboard", "keyboardHidden", "navigation", "orientation", "screenLayout", "fontScale", "uiMode"] android:enabled=["true" | "false"] android:excludeFromRecents=["true" | "false"] android:exported=["true" | "false"] android:finishOnTaskLaunch=["true" | "false"] android:icon="drawable resource" android:label="string resource" android:launchMode=["multiple" | "singleTop" | "singleTask" | "singleInstance"] android:multiprocess=["true" | "false"] android:name="string" android:noHistory=["true" | "false"] android:permission="string" android:process="string" android:screenOrientation=["unspecified" | "user" | "behind" | "landscape" | "portrait" | "sensor" | "nosensor"] android:stateNotNeeded=["true" | "false"] android:taskAffinity="string" android:theme="resource or theme" android:windowSoftInputMode=["stateUnspecified", "stateUnchanged", "stateHidden", "stateAlwaysHidden", "stateVisible", "stateAlwaysVisible", "adjustUnspecified", "adjustResize", "adjustPan"] > </activity>4、intent-filter
<intent-filter android:icon="drawable resource" android:label="string resource" android:priority="integer" ><action /><category /><data /></intent-filter>5、meta-data
<meta-data android:name="string" android:resource="resource specification" android:value="string"/>6、activity-alias
<activity-alias android:enabled=["true" | "false"] android:exported=["true" | "false"] android:icon="drawable resource" android:label="string resource" android:name="string" android:permission="string" android:targetActivity="string"> <intent-filter/><meta-data/></activity-alias>7、service
<service android:enabled=["true" | "false"]android:exported[="true" | "false"]android:icon="drawable resource"android:label="string resource"android:name="string"android:permission="string"android:process="string"></service>8、receiver
9、provider
<provider android:authorities="list"android:enabled=["true" | "false"]android:exported=["true" | "false"]android:grantUriPermissions=["true" | "false"]android:icon="drawable resource"android:initOrder="integer"android:label="string resource"android:multiprocess=["true" | "false"]android:name="string"android:permission="string"android:process="string"android:readPermission="string"android:syncable=["true" | "false"]android:writePermission="string"><grant-uri-permission/><meta-data/></provider>10、uses-library 11、supports-screens
<supports-screens android:smallScreens=["true" | "false"] android:normalScreens=["true" | "false"] android:largeScreens=["true" | "false"] android:anyDensity=["true" | "false"] />12、uses-configuration和uses-feature
<uses-configuration android:reqFiveWayNav=["true" | "false"] android:reqHardKeyboard=["true" | "false"] android:reqKeyboardType=["undefined" | "nokeys" | "qwerty" | "twelvekey"] android:reqNavigation=["undefined" | "nonav" | "dpad" | "trackball" | "wheel"] android:reqTouchScreen=["undefined" | "notouch" | "stylus" | "finger"] /> <uses-feature android:glEsVersion="integer" android:name="string" android:required=["true" | "false"] />13、uses-sdk
<uses-sdk android:minSdkVersion="integer" android:targetSdkVersion="integer" android:maxSdkVersion="integer"/>14、instrumentation
<instrumentation android:functionalTest=["true" | "false"] android:handleProfiling=["true" | "false"] android:icon="drawable resource" android:label="string resource" android:name="string" android:targetPackage="string"/>15、<permission>、<uses-permission>、<permission-tree />、<permission-group />区别
最常用的当属<uses-permission>,当我们需要获取某个权限的时候就必须在我们的manifest文件中声明,此<uses-permission>与<application>同级,具体权限列表请看此处
通常情况下我们不需要为自己的应用程序声明某个权限,除非你提供了供其他应用程序调用的代码或者数据。这个时候你才需要使用<permission> 这个标签。很显然这个标签可以让我们声明自己的权限。比如:
<permission android:name="com.teleca.project.MY_SECURITY" . . . />那么在activity中就可以声明该自定义权限了,如:
<application . . .> <activity android:name="XXX" . . . > android:permission="com.teleca.project.MY_SECURITY"> </activity> </application>当然自己声明的permission也不能随意的使用,还是需要使用<uses-permission>来声明你需要该权限<permission-group> 就是声明一个标签,该标签代表了一组permissions,而<permission-tree>是为一组permissions声明了一个namespace。这两个标签可以看之前的系列文章。
到此这篇关于AndroidManifest.xml中含盖的安全问题的文章就介绍到这了,更多相关AndroidManifest.xml中含盖的安全问题内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Android安装apk文件并适配Android7.0详解首先在AndroidManifest.xml文件,activity同级节点注册provider:将ap
Android版本更新实例详解1、导入xutils的jar包2、在AndroidManifest.xml中添加权限3、选择下载的路径,和下载apk文件的网址pr
在Value中的Style.xml中,添加:复制代码代码如下:true然后在androidManifest.xml中加入:android:theme="@sty
在AndroidManifest.xml中加一个权限主代码中实现:@OverrideprotectedvoidonCreate(BundlesavedInsta
1.使用killBackgroundProcesses()方法首先再AndroidManifest.xml文件中添加权限然后直接调用stopApp(mConte