AndroidManifest.xml
- 其中存放了 APK 的大量配置信息:软件名称、图标、主题、包名、组件配置等
- 合理、安全地配置组件是安全开发中最重要的一课
AndroidManifest.xml 文件的格式
- 采用 XML 文本格式,在开发阶段,所有的配置信息都可直接以可视化的方式编辑。Crackme0201 的内容:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.droider.crackme0201">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
android:allowBackup="true"
- android:allowBackup 允许系统在进行备份操作时备份程序的应用数据,典型的操作是在终端执行 adb backup 命令,或点击手机设置界面上的“备份操作”按钮。对数据安全比较敏感的话,可设置为“false”
android:supportsRtl="true"
- 这个标签的作用:让 APK 支持 RTL(Right-to-Left)视图。将此值设为“true”,并将 targetSdkVersion 的值设为 17 及以上,即可开启 RTL 视图支持
AXML 文件格式
- AS 在编译 APK 时,会将 AndroidManifest.xml 处理后打包进去。打包进去的 AndroidManifest.xml 被编译成二进制格式的文件。解压 APK 后,用文本编辑器打开它,会发现内容是乱码。这个打包后的 AndroidManifest.xml 称“AXML”,其格式称“AXML 文件格式”
- APK 用 AXML 而非纯文本格式 XML 存放数据,主要目的应是解决 APK 加载时的性能问题。在 Android 设备内存资源与能耗极其有限的情况下,二进制的 AXML 在分析处理速度和内存占用方面都比纯文本的 XML 有明显优势。但 AXML 的内容不能直接显示,因此,逆向分析 APK 时,对其格式有所了解,才能知道它原来的内容
- Android 官方没明确给出 AXML 的二进制布局规范,可通过阅读 APK 打包流程和系统加载 APK 的代码掌握它的文件格式。在 Android 系统源码文件 frameworks/base/include