AndroidManifest.xml文件安全探索

正文作者:i春秋签作家——icq8756c1a2

近来于召开片apk的平安检测,对AndroidManifest.xml文件进行了研讨及追究,介绍AndroidManifest.xml文件之图和搭,并研究了AndroidManifest.xml配置文件是的片纰漏,在进展安全检测时,可以对症下药。

0X00 AndroidManifest.xml文件作用   

AndroidManifest.xml文件的意十分重大,应该算得缺一不可。在android官方介绍文档中(https://developer.android.com/gu …
manifest-intro.html)是这么定义之。每个应用程序必须在其到底目录中具有一个AndroidManifest.xml(名字务必一致)文件。Manifest文件提供有关应用程序到Android系统的主导信息,系统必须怀有该信息才会运作任何应用程序的代码。换句话说APP是跑在Android系统及,既然要飞在其上,就非得提供信息为Android
System,这些消息就存在AndroidManifest中。AndroidManifest.xml 存放于
app/src/main/ 目录下。在倒编译APK文件后,其文件是因乱码格式在,需要开展转移才会正常查看。

0X01要作用1. 命名应用程序Java包,软件包号作为应用程序的绝无仅有标识符

2. 叙了应用程序的组件,其中包括构成应用程序的移位,服务,广播接收器和内容提供者;它还命名实现每个组件并公布其功能的近乎,例如Intent可以处理的消息。这些声明通知Android系统的机件及其可启动之基准。

  1. 控制如何processes主持application

4.
发表这App有什么样权力,它声明应用程序必须具有的权力才能够访问API的为保障有并和其余应用程序交互。它还声称其他人为了跟应用程序的零件交互而待的权位

5.它列有了Instrumentation在应用程序运行时供概要分析及其它消息的类。这些声明仅以应用程序正在开中才见面存在,并在应用程序发布前让剔除。

6.其声明了应用程序需要之最低级别之Android API。

7.它列有了应用程序必须链接的库。

0X02 Manifest架构  

兴的因素,蓝字是预设常见的要素,其中的<manifest>与<application>是不可或缺且不得不出现相同不成。每个元素来分别的性质,属性数据不自然,每个属性有该默认值,可张需求进行设定。

1.预设的AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.bmi" 名称空间
    android:versionCode="1"   开发者使用流水版号
    android:versionName="1.0" >  供使用者看的版本号
    <uses-sdk
        android:minSdkVersion="8" 最低兼容SDK版本
        android:targetSdkVersion="21" /> 目标版本,若没设定预设为最低minSdkVersion
    <application
        android:allowBackup="true" 是否允许备份
        android:icon="@drawable/ic_launcher" App Icon
        android:label="@string/app_name" App名称
        android:theme="@style/AppTheme" > App风格
        <activity activity, service, receiver, provider是组成application的4个主要项目
            android:name=".MainActivity" activity名称,可和manifest package串在一起
            android:label="@string/app_name" > APP开启后,显示在画面上方的名称
            <intent-filter> activity操作方式
                <action android:name="android.intent.action.MAIN" /> .MAIN表示activity是APP进入点
                <category android:name="android.intent.category.LAUNCHER" /> 显示在应用程序行表
            </intent-filter>
        </activity>
    </application>
</manifest>

2.专业的AndroidManifest.xml文件样例。

<?xml version="1.0" encoding="utf-8"?>   
<manifest>    
    <!-- 基本配置 --> 
    <uses-permission />  
    <permission />  
    <permission-tree />  
    <permission-group />  
    <instrumentation />  
    <uses-sdk />  
    <uses-configuration />  
    <uses-feature />  
    <supports-screens />  
    <compatible-screens />  
    <supports-gl-texture />        
    <!-- 应用配置 --> 
    <application>            
        <!-- Activity 配置 --> 
        <activity>  
            <intent-filter>  
                <action />  
                <category />  
                <data />  
            </intent-filter>  
            <meta-data />  
        </activity>            
        <activity-alias>  
            <intent-filter> . . . </intent-filter>  
            <meta-data />  
        </activity-alias>  
           <!-- Service 配置 --> 
        <service>  
            <intent-filter> . . . </intent-filter>  
            <meta-data/>  
        </service>  
        <!-- Receiver 配置 --> 
        <receiver>  
            <intent-filter> . . . </intent-filter>  
            <meta-data />  
        </receiver>            
        <!-- Provider 配置 --> 
        <provider>  
            <grant-uri-permission />  
            <meta-data />  
        </provider>            
        <!-- 所需类库配置 --> 
        <uses-library />    
    </application>  
  </manifest>

0x03 文件约定和语法 
   从上面的代码中,我们得以视Android配置文件采用XML作为描述语言,每个XML标签还不可同日而语之含义,大部分底布参数还位居标签的性质被,下面我们就以上述配置文件样例中的先后顺序来修Android配置文件中关键因素与标签的用法。

1.元素(Elements)

 
 在富有的要素中只有<manifest>和<application>是必备的,它们各自要是,且只能出现一样浅。如果一个要素包含有其它子元素,必须经子元素的特性来安其价。处于同一层次之因素,这些要素的求证是没有各个的。例如<activity>,<provider>和<service>元素得以坐任何顺序混合。这个规则来半点单重点的差:

l 一个<activity-alias> 元素必须以 <activity>它是一个号。

l
<application> 元素必须是内的末段一个素 <manifest> 的因素。换句话说</application>结束标签须以</manifest>结束标签之前及时出现。

2.属性

 
  正常来讲,所有的属性都是可选的,但是出来属性是必装的。以便元素得以实现该目的,除了根元素<manifest>的特性外,所有其他因素属性之名字都是坐android:前缀的;

概念类名:所有的素名都对诺其以SDK中的类名,如果你协调定义类名,必须包含类的数包名,如果类似及application处于相同数据包中,可以一直简写为“.”;

3.声明类名

 
 许多元素对应于Java对象,包括应用程序本身(<application>元素)的因素及其主要组件:活动(<activity>),服务<service>),广播接收器(<receiver>)和情节提供者(<provider>))。

一旦你定义一个子类,如同你总是会也组件类(Activity,Service, BroadcastReceiver和ContentProvider)子类是通过name属性来声称,该名必须概括总体的包装名称。例如,一个Service子类可能受声称如下:

<manifest . . . >

    <application . . . >

        <service android:name=”com.example.project.SecretService” . .
. >

            . . .

        </service>

        . . .

    </application>

</manifest>      

4.多个值

 
 如果某个元素来跨一个数值,这个因素必须通过还的办法来证实该有属性具有多独数值项,且无克将大半个数值项一次性说明在一个特性被;例如一个intent-filter
可以保障多只action:

<intent-filter . . . >

    <action android:name=”android.intent.action.EDIT” />

    <action android:name=”android.intent.action.INSERT” />

    <action android:name=”android.intent.action.DELETE” />

    . . .

</intent-filter>

5.资源值

 
  某些性能具有可展示为用户的价,例如一个运动之标签以及图标。这些性的价值应于资源还是主题开展本地化和装。资源值以下列格式表示:

@[package:]type/name

倘资源与应用程序在跟一个软件包中,则可以简单软件包号。该项目是同等栽资源,例如字符串或只是打的对象,名称是一定资源的标识名称。例如:

<activity android:icon=”@drawable/smallPic” . . . >

主题的价值使用类似地发挥,但坐初始值“? ”代替“@”:

?[package:]type/name

在意:资源或主题包的价值必须是“android”或应用程序包的称呼。

6.字符串值

每当属性值为字符串的地方,必须利用对相反斜杠(\\)来转义字符,例如\\n换行符或\\uxxxx 表示Unicode字符。

7.意图过滤器

 
 应用程序的中坚组件,如运动,服务及广播接收器由意图(Intent)激活。意图是Intent描述所待动作的相同组信息(对象),包括要实行的数量,应该实行该操作的零件的类型以及任何连锁指令。Android系统找到一个得响应意图的熨帖组件,如果要,则启动组件的初实例,并以其传递让 Intent对象。

零件通过意图过滤器通知他们好响应的企图类型。由于Android系统必须询问组件在起步组件之前好处理的用意,因此当清单中以intent过滤器指定为 <intent-filter> 元素。组件可以具备自由数量的过滤器,每个过滤器描述不同之效应。显式命名目标组件的意图激活该零件,因此过滤器不起作用。没有经过名称指定目标的企图可以独自在组件可以透过组件的过滤器之一时激活零部件。

8.图标暨标签

  许多素都发生图标和标签属性,可以于用户展示一个聊图标与文书。一些还有一个重增长的讲述属性,也得以以屏幕及出示。例如,该 <permission> 元素具有所有这三只属性,以便当了解用户是否授予已呼吁其的应用程序的权时,一个图标代表权限,许可的名目与她所要之讲述都见面表现给用户。

在列种情形下,在含有元素中装置的图标与标签将改为独具容器的子元素的默认值 icon和label设置。因此, <application>元素被装置的图标与标签是每个应用程序组件的默认图标和标签。类似地,为组件(如<activity> 元素)设置的图标与标签是每个组件<intent-filter> 元素的默认设置
。如果一个 <application> 元素设置了一个标签,但是一个移动与它的企图过滤器没有,应用程序标签将吃视为活动及用意过滤器的价签。

为图过滤器设置的图标和标签表示当组件呈现为用户并满足由过滤器发布的效力时的零件。例如,带有android.intent.action.MAIN和 android.intent.category.LAUNCHER设置的过滤器将走通知为启动应用程序的位移。也就是说,应该以应用程序启动器中显示。在过滤器中安装的图标与标签显示在启动器中。

9.权限

 
 权限是限制的代码的一律有些,或者当装置上的数目的拜会的限制。限制是为维护或许让误用以转或破坏用户体验的要害数据及代码。

每个权限都出于唯一标签标识。标签便表示限制的动作。以下是Android定义的组成部分权力:

android.permission.CALL_EMERGENCY_NUMBERS

android.permission.READ_OWNER_DATA

android.permission.SET_WALLPAPER

android.permission.DEVICE_POWER

 
 功能就会由此一个权来维护。如果应用程序需要拜访被权限保护之机能,则它要声明其要采用<uses-permission>
清单中之素的权限
。当应用程序安装在设施上不时,安装程​​序将通过检查签署应用程序证书的单位及当好几情况下询问用户来确定是否予以所求的权力。如果认可为与,应用程序就可应用让保障的效力。如果无,则尝试看这些力量失败,而无通报用户。

 
 应用程序也得以通过权限保护好的机件。它可以由Android定义之另权力,如android.Manifest.permission由其余应用程序列出
或宣称的。它也可自己定义。<permission> 元素声明了新的权限
。例如,活动得以如下保护:

<manifest . . . >

    <permission android:name=”com.example.project.DEBIT_ACCT” . . .
/>

    <uses-permission android:name=”com.example.project.DEBIT_ACCT”
/>

    . . .

    <application . . .>

        <activity android:name=”com.example.project.FreneticActivity”

                  android:permission=”com.example.project.DEBIT_ACCT”

                  . . . >

            . . .

        </activity>

    </application>

</manifest>   

呼吁留心,在此事例中,DEBIT_ACCT权限不仅仅是运用<permission> 元素来声称的
,所以它们吧使了 <uses-permission> 元素。为了启动为保障的动,您必须要求使用该应用程序的其他零件,即使应用程序本身为施加了维护。

0x04权属性值意义ACCESS_CHECKIN_PROPERTIES:允许对checkin数据库被的申“properties”进行读/写访问,以改上污染的价。

ACCESS_COARSE_LOCATION:允许利用访问大概位置。

ACCESS_FINE_LOCATION:允许行使访问精确位置。

ACCESS_LOCATION_EXTRA_COMMANDS:允许应用程序访问额外的职位提供次命令。

ACCESS_NETWORK_STATE:允许应用程序访问有关网络的音。

ACCESS_NOTIFICATION_POLICY:希望访通知政策的应用程序的标志权限。

ACCESS_WIFI_STATE:允许应用程序访问有关Wi-Fi网络的消息。

ACCOUNT_MANAGER:允许应用程序调用AccountAuthenticator。

ADD_VOICEMAIL:允许应用程序将语音邮件上加至网遭到。

ANSWER_PHONE_CALLS:允许使用接听来电。

BATTERY_STATS:允许应用程序收集电池统计信息

BIND_ACCESSIBILITY_SERVICE:必须由a要求AccessibilityService,以担保只有系统可以绑定到它们。

BIND_APPWIDGET:允许应用程序告诉AppWidget服务哪个应用程序可以访问AppWidget的数。

BIND_AUTOFILL_SERVICE:必须由a要求AutofillService,以保证只有系统可以绑定到它。

BIND_CARRIER_MESSAGING_SERVICE:这个常量是当API层面弃用23.
BIND_CARRIER_SERVICES代替

BIND_CARRIER_SERVICES:允许绑定到运营商应用程序中的劳务的系统经过将有着此权限。

BIND_CHOOSER_TARGET_SERVICE:必须由a要求ChooserTargetService,以确保只有系统可以绑定到它。

BIND_CONDITION_PROVIDER_SERVICE:必须由a要求ConditionProviderService,以管只有系统可绑定到它们。

BIND_DEVICE_ADMIN:必须由装备管理接收器要求,以保证只有系统可以与那个开展互动。

BIND_DREAM_SERVICE:必须由a要求DreamService,以保只有系统可绑定到她。

BIND_INCALL_SERVICE:必须由a要求InCallService,以保险只有系统可绑定到它。

BIND_INPUT_METHOD:必须由a要求InputMethodService,以担保只有系统可以绑定到其。

BIND_MIDI_DEVICE_SERVICE:必须由a要求MidiDeviceService,以管只有系统可绑定到她。

BIND_NFC_SERVICE:必须要求HostApduService 或OffHostApduService确保只有系统可绑定到它们。

BIND_NOTIFICATION_LISTENER_SERVICE:必须由a要求NotificationListenerService,以担保只有系统可绑定到其。

BIND_PRINT_SERVICE:必须由a要求PrintService,以管只有系统可以绑定到它。

BIND_QUICK_SETTINGS_TILE:允许应用程序绑定到第三在快速设置图块。

BIND_REMOTEVIEWS:必须由a要求RemoteViewsService,以担保只有系统可以绑定到它。

BIND_SCREENING_SERVICE:必须由a要求CallScreeningService,以管只有系统可绑定到它们。

BIND_TELECOM_CONNECTION_SERVICE:必须由a要求ConnectionService,以保证只有系统可绑定到其。

BIND_TEXT_SERVICE:必须由TextService要求

BIND_TV_INPUT:必须透过a TvInputService 来担保只有系统可绑定它。

BIND_VISUAL_VOICEMAIL_SERVICE:链接必须要求,VisualVoicemailService为管只有系统可以绑定到其。

BIND_VOICE_INTERACTION:必须由a要求VoiceInteractionService,以保证只有系统可以绑定到她。

BIND_VPN_SERVICE:必须由a要求VpnService,以担保只有系统可绑定到它们。

BIND_VR_LISTENER_SERVICE:必须由a要求VrListenerService,以管教只有系统可绑定到其。

BIND_WALLPAPER:必须由a要求WallpaperService,以保证只有系统可绑定到它。

BLUETOOTH:允许应用程序连接至配对之蓝牙设备。

BLUETOOTH_ADMIN:允许应用程序发现及放对蓝牙设备。

BLUETOOTH_PRIVILEGED:允许应用程序在没有用户交互的情形下配对蓝牙设备,并同意或取缔电话簿访问还是信息访问。

BODY_SENSORS:允许应用程序访问用户之所以来衡量身体内出的景的传感器的数据,例如心率。

BROADCAST_PACKAGE_REMOVED:允许应用程序广播应用程序保险都让删去的通告。

BROADCAST_SMS:允许应用程序广播短信收据通知。

BROADCAST_STICKY:允许应用程序广播粘性意图。

BROADCAST_WAP_PUSH:允许应用程序广播WAP PUSH收据通知。

CALL_PHONE:允许应用程序发起电话而不经过拨号器用户界面供用户确认通话。

CALL_PRIVILEGED:允许应用程序呼叫任何电话号码,包括紧急号码,而不论是需经Dialer用户界面,用户确认呼叫在被停放。

CAMERA:需要能访问相机设备。

CAPTURE_AUDIO_OUTPUT:允许应用程序捕获音频输出。

CAPTURE_SECURE_VIDEO_OUTPUT:允许应用程序捕获安全视频输出。

CAPTURE_VIDEO_OUTPUT:允许应用程序捕获视频输出。

CHANGE_COMPONENT_ENABLED_STATE:允许应用程序更改应用程序组件(不是祥和之)是否启用。

CHANGE_CONFIGURATION:允许应用程序修改时安排,如区域安装。

CHANGE_NETWORK_STATE:允许应用程序更改网络连接状态。

CHANGE_WIFI_MULTICAST_STATE:允许应用程序进入Wi-Fi组播模式。

CHANGE_WIFI_STATE:允许应用程序更改Wi-Fi连接状态。

CLEAR_APP_CACHE:允许应用程序清除装置及所有曾经安装应用程序的休息存。

CONTROL_LOCATION_UPDATES:允许启用/禁用收音机的岗位更新通知。

DELETE_CACHE_FILES:允许应用程序删除缓存文件。

DELETE_PACKAGES:允许应用程序删除软件包。

DIAGNOSTIC:允许应用程序RW到诊断资源。

DISABLE_KEYGUARD:允许应用程序禁用键盘保护程序,如果它们不安全。

DUMP:允许应用程序从网服务检索状态转储信息。

EXPAND_STATUS_BAR:允许应用程序展开或折叠状态栏。

FACTORY_TEST:作为制造商测试应用程序运行,以root用户身份运行。

GET_ACCOUNTS:允许看帐户服务受到的帐户列表。

GET_ACCOUNTS_PRIVILEGED:允许看帐户服务被的帐户列表。

GET_PACKAGE_SIZE:允许应用程序找有另保管用的半空中。

GET_TASKS:这个经常反复在API级别21备受已让弃用。不再强制执行。

GLOBAL_SEARCH:该权限可用于内容提供商,以允许全局搜索系统访问该数据。

INSTALL_LOCATION_PROVIDER:允许应用程序将位置提供程序安装到岗位管理器中。

INSTALL_PACKAGES:允许应用程序安装软件包。

INSTALL_SHORTCUT:允许应用程序在Launcher中装置快捷方式。

INSTANT_APP_FOREGROUND_SERVICE:允许就经常用创建前台服务。

INTERNET:允许应用程序打开网络套接字。

KILL_BACKGROUND_PROCESSES:允许应用程序调用 killBackgroundProcesses(String)。

LOCATION_HARDWARE:允许应用程序在硬件中应用位置功能,例如geofencing
api。

MANAGE_DOCUMENTS:允许应用程序管理针对性文档的拜会,通常是文档选择器的一律有。

MANAGE_OWN_CALLS:允许通过自我管理的ConnectionServiceAPI 管理好之呼唤的呼唤应用程序

MASTER_CLEAR:不适用于第三正值应用程序。

MEDIA_CONTENT_CONTROL:允许应用程序知道在播放哪些内容并控制该播放。

MODIFY_AUDIO_SETTINGS:允许应用程序修改全局音频设置。

MODIFY_PHONE_STATE:允许修改电话状态 – 开机,mmi等

MOUNT_FORMAT_FILESYSTEMS:允许将文件系统格式化为可活动存储。

MOUNT_UNMOUNT_FILESYSTEMS:允许安装和卸载文件系统以拓展可活动存储。

NFC:允许应用程序通过NFC执行I / O操作。

PACKAGE_USAGE_STATS:允许应用程序收集组件使用统计信息,声明权限意味着使用API​​,设备的用户可由此“设置”应用程序授予权限。

PERSISTENT_ACTIVITY:此常数在API级别9备受一度受弃用。此功能将于事后去; 请不要使用。允许应用程序使该运动高潮迭起。

PROCESS_OUTGOING_CALLS:允许应用程序在呼出期间查看在拨打的电话号码,并择用呼叫重定向到外号码或全中断呼叫。

READ_CALENDAR:允许应用程序读取用户之日历数量。

READ_CALL_LOG:允许应用程序读取用户的通话记录。

READ_CONTACTS:允许应用程序读取用户的关系人数仍。

READ_EXTERNAL_STORAGE:允许应用程序从表存储器读取。

READ_FRAME_BUFFER:允许应用程序进行屏幕截图,更相像地,可以拜帧缓冲区数据。

READ_INPUT_STATE:此常数在API级别16丁都给弃用。使用是权限的API已受删除。

READ_LOGS:允许应用程序读取低级别之系统日志文件。

READ_PHONE_NUMBERS:允许读取设备的电话号码。

READ_PHONE_STATE:允许单独念访问电话状态,包括设备的电话号码,当前的蜂窝网络信息,任何在展开的呼叫的状态及PhoneAccount在设施及注册之另外列表

READ_SMS:允许应用程序读取短信。

READ_SYNC_SETTINGS:允许应用程序读取同步设置。

READ_SYNC_STATS:允许应用程序读取同步统计信息。

READ_VOICEMAIL:允许应用程序读取系统被的语音信箱。

REBOOT:需要重新开动设备。

RECEIVE_BOOT_COMPLETED:允许应用程序收到ACTION_BOOT_COMPLETED在系统就启动后广播的应用程序

RECEIVE_MMS:允许应用程序监视传入的彩信。

RECEIVE_SMS:允许应用程序接收短信。

RECEIVE_WAP_PUSH:允许应用程序接收WAP推送消息。

RECORD_AUDIO:允许应用程序录制音频。

REORDER_TASKS:允许应用程序更改任务之Z顺序。

REQUEST_COMPANION_RUN_IN_BACKGROUND:允许随播应用在后台运行。REQUEST_COMPANION_USE_DATA_IN_BACKGROUND:允许随播应用在后台使用数据。

REQUEST_DELETE_PACKAGES:允许应用程序请求删除包。

REQUEST_IGNORE_BATTERY_OPTIMIZATIONS:许可申请必须具备才会使ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS。

REQUEST_INSTALL_PACKAGES:允许应用程序请求设置软件包。

RESTART_PACKAGES:此常数在API级别8中已弃用restartPackage(String) 。不再支持API。

SEND_RESPOND_VIA_MESSAGE:允许应用程序(电话)向任何应用程序发送请求,以处理来电中的应通过信息动作。

SEND_SMS:允许应用程序发送短信。

SET_ALARM:允许应用程序广播Intent为用户安装闹钟。

SET_ALWAYS_FINISH:允许应用程序控制是否以后台放置活动经常即时成功。

SET_ANIMATION_SCALE:修改全局动画缩放因子。

SET_DEBUG_APP:配置应用程序进行调试。

SET_PREFERRED_APPLICATIONS:这个时反复以API级别7吃就为弃用。不再灵光, addPackageToPreferred(String) 有关详细信息。

SET_PROCESS_LIMIT:允许应用程序设置好运作的顶要命数额(不欲之)应用程序进程。

SET_TIME:允许应用程序设置系统时。

SET_TIME_ZONE:允许应用程序设置系统时区。

SET_WALLPAPER:允许利用设置壁纸。

SET_WALLPAPER_HINTS:允许应用程序设置壁纸提示。SIGNAL_PERSISTENT_PROCESSES:允许应用程序请求将信号发送到持有持久进程。

STATUS_BAR:允许应用程序打开,关闭或者剥夺状态栏及其图标。

SYSTEM_ALERT_WINDOW:允许利用使用项目创建窗口 TYPE_APPLICATION_OVERLAY,显示在所有其他应用程序的顶部。

TRANSMIT_IR:允许下设备的红外发射器(如果有话)。

UNINSTALL_SHORTCUT:不再支持之权限。

UPDATE_DEVICE_STATS:允许应用程序更新装备统计信息。

USE_FINGERPRINT:允许行使使用指纹硬件。

USE_SIP:允许应用程序使用SIP服务。

VIBRATE:允许看振动器。

WAKE_LOCK:允许采取PowerManager
WakeLock来防止电脑进入睡眠状态或屏幕转换暗。

WRITE_APN_SETTINGS:允许应用程序写入apn设置。

WRITE_CALENDAR:允许应用程序写副用户之日历数量。

WRITE_CALL_LOG:允许应用程序写入(而非是读取)用户之通话记录数据。

WRITE_CONTACTS:允许应用程序写副用户之关联人数仍。

WRITE_EXTERNAL_STORAGE:允许应用程序写副外表存储。

WRITE_GSERVICES:允许以修改Google服务地图。

WRITE_SECURE_SETTINGS:允许应用程序读取或摹写副安全系统装置。

WRITE_SETTINGS:允许应用程序读取或摹写副系统安装。

WRITE_SYNC_SETTINGS:允许应用程序写副并设置。

WRITE_VOICEMAIL:允许应用程序修改和去系统中存活的语音信箱。

0x05apk文书获取AndroidManifest.xml文件   1.解压apk文件

 
 首先得下载apk文件,使用压缩软件直接铲除压缩即可,解压成功后会于apk目录中生活一个AndroidManifest.xml文件,如图1所著。使用记事本或者IE等打开该文件后,其内容也乱码,如图2所展示。

图片 1

图片 2

2.动androguard进行转码

androguard可以下载最新版本,也堪下载1.9版本。

https://github.com/androguard/androguard/archive/1.9.zip

用AndroidManifest.xml文件复制到androguard目录,我利用的是PentestBox-with-Metasploit-v2.2平台。到E:\Tools\测试平台\PentestBox-with-Metasploit-v2.2\bin\androidsecurity\androguard目录下行使命令:

androaxml.py -i  AndroidManifest.xml -o  new.WoCloud.AndroidManifest.xml

即可解码内容。

0x06.apktool反编译apk前面通过压缩文件直接解压会招致有的文件未经过编码,因此会面面世乱码,经过编译的公文可以老好之展开查,下面介绍以apktool进行反编译apk程序,执行效能使下图所著。

1.下载apktool.jar

https://bitbucket.org/iBotPeaches/apktool/downloads/apktool\_2.2.4.jar

2.拿转本子保存也apktool.bat

@echo off

if “%PATH_BASE%” == “” set PATH_BASE=%PATH%

set PATH=%CD%;%PATH_BASE%;

*java -jar -Duser.language=en “%~dp0\apktool.jar” %**

3.倒编译程序

(1)直接用java进行反编译:java -jar apktool.jar d test.apk

(2)使用bat脚本进行编译:apktool -f d test.apk
//覆盖已部分反编译程序及其目录

apktool d test.apk

注意:apktool.bat和apktool_2.2.4.jar每当与一个索引,且下载的apktool_2.2.4.jar亟待再行命名为apktool.jar

图片 3

0x07.AndroidManifest.xml默认设置漏洞1.安排文件中的默认设置allowBackup风险

(1)安全风险描述

   Android API Level
8及其以上Android系统提供了为应用程序数据的备份和恢复法力,此功能的开关决定于该应用程序中 AndroidManifest.xml文件被的 allowBackup属性值,其属性值默认是True。当allowBackup标志吗true时,用户即可通过adb
backup和adb
restore来拓展针对下数据的备份和回复,这恐怕会见带来一定之安康风险。当装该属性值为true,adb
backup容许任何一个能打开USB调试开关的人口由Android手机中复制利用数据及外设,一旦采取数据给备份之后,所有应用数据还不过吃读取;同时adb
restore 容许用户指定一个恢复的多寡来自(即备份的采取数据)来过来应用程序数据的创立。因此,当一个运用数据让备份之后,用户即可在其余 Android 手机或模拟器上设置及一个用,以及由此恢复该备份的施用数据到该设备上,在拖欠装置及开拓该以即可恢复到给备份的应用程序的状态。

 
 对于当前多数手机来说,一旦有拖欠漏洞,容易招个人通讯录、微信、QQ聊天信息、短信等趁机信息外泄;通过将备份程序在模拟手机上回复后,可以一直开展店家扫描出(店家扫描出未需开销密码)容易导致财产损失。

(2)影响范围

   Android API 等级8(Android 2.2 –
2.2.3)以及上述系,目前多方网都受影响。下面被出Android
API等级对承诺随系统和名称对应之图标名称:

API等级1:  Android 1.0

API等级2:  Android 1.1 Petit Four  花式小蛋糕

API等级3:  Android 1.5 Cupcake  纸杯蛋糕

API等级4:  Android 1.6 Donut  甜甜圈

API等级5:  Android 2.0 Éclair   松饼

API等级6:  Android 2.0.1 Éclair  松饼

API等级7:  Android 2.1 Éclair   松饼

API等级8:  Android 2.2 – 2.2.3 Froyo  冻酸奶

API等级9:  Android 2.3 – 2.3.2 Gingerbread  姜饼

API等级10:Android 2.3.3-2.3.7 Gingerbread   姜饼

API等级11:Android 3.0 Honeycomb 蜂巢

API等级12:Android 3.1 Honeycomb 蜂巢

API等级13:Android 3.2 Honeycomb 蜂巢

API等级14:Android 4.0 – 4.0.2 Ice Cream Sandwich  冰激凌三明治

API等级15:Android 4.0.3 – 4.0.4 Ice Cream Sandwich  冰激凌三明治

API等级16:Android 4.1 Jelly Bean  糖豆

API等级17:Android 4.2 Jelly Bean  糖豆

API等级18:Android 4.3 Jelly Bean  糖豆

API等级19:Android 4.4 KitKat 奇巧巧克力棒

API等级20 : Android 4.4W KitKat with wearable extensions 奇巧巧克力棒

API等级21:Android 5.0-5.0.2 Lollipop  棒棒糖

(3)测试流程(以sina.weibo为条例)

     测试环境:Windows
7,ADB 调试工具;物理接触目标手机1,连接手机1顶 PC 端

手机1和手机2全都不吃 ROOT,开启 USB 调试;不用装其他应用,不启动于测试的采用。连接装置开启USB调试手机1 到PC端,在PC自动(也得以提前)安装好手机驱动后,启动命令行界面输入以下命令:

l adb devices

#著已经一连的装置列表,测试手机是否正规连接

l adb backup -nosystem -noshared -apk -f
com.sina.weibo.abcom.sina.weibo

#-nosystem表示不备份系统采取,-noshared代表未备份应用存储于SD中的数量,-apk表示备份应用APK安装包, -f代表备份的.ab文件路径和文件称,最后是一旦备份应用之packageName

l 点击手机1确认备份界面的“备份我之多少”

l 等待备份完成,至此微博客户端数据成功备份为 com.sina.weibo.ab 文件

l 断开手机1的连续

l 连接手机2 ,在指令行界面下输入以下命令:

l adb kill-server  #关闭ADB

l adb devices
#还启航ADB,检测手机2是否中标连接

l adb restore com.sina.weibo.ab

l 点击手机2确认恢复界面的“恢复自己的数量”

l 等待恢复就

l 打开手机2丁初装置之微博客户端,测试可正常登录手机1惨遭帐号执行各种操作,且长期有效。

(4)安然戒备

 
 显示设置android:allowBackup=false,使用android:restoreAnyVersion的默认值。

(5)检测漏洞

 
 使用apktool等工具反编译apk后,查看AndroidManifest.xml文件,查找allowBackup,如果其值为ture,则意味着在漏洞,如下图所著。

图片 4

2.Debuggable默认设置风险

规律:android:debuggable属性用于指定应用程序是否能够让调剂,如果设置其为true,那么该用会被java调试工具(jdb)调试,信息及代码都拿可能会见受得与改动。

防:系统默认其也false,使用系统默认设置。

参照文章:

  1. android 常见漏洞总结,http://blog.sina.com.cn/s/blog\_83f3c04c0102xeow.html

2. https://developer.android.com/gu …
manifest-intro.html

3.http://blog.csdn.net/shuaishenkkk/article/details/18400711

4. https://segmentfault.com/a/1190000002590577

 

相关文章