freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课
报告 专辑

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

  • 移动安全
安卓基础:安卓安装包APK的组成以及生成步骤
2021-10-18 21:51:02

一、APK包的组成

Google提供了Android SDK供程序员来开发Android平台的软件。每个软件在最终发布时会打包成一个APK文件,将APK文件传送到Android设备中运行即可安装。APK是Android package的缩写,功能类似于Symbian系统的SIS文件,实际上APK文件就是一个zip压缩包,使用zip格式压缩软件对APK文件进行解压,会发现他由一些图片资源与其他文件组成,并且每个APK文件中包含一个classes.dex (oDex过的APK除外),这个classes.dex就是Android系统Dalvik 虚拟机的可执行文件,简称Dalvik可执行文件。
解压文件如图所示:
图片.png静态分析就是对APK解压后的几个重要文件进行分析、篡改、注入等。
(1) assets文件夹:资源目录、声音、字体、网页
(2)lib文件夹: so库存放位置,一般由NDK编译得到,常使用于游戏引擎INI native调用
(3)META-INF文件夹:存放工程的一些属性文件,如Manifest.MF
(4) res文件夹︰资源目录,即应用中使用到的资源目录,已编译的无法直接阅读。(5)AndroidManifest.xml文件夹:Android工程的基础配置属性文件
(6) classes.dex: Java代码编译得到的Dalvik VM能直接执行的文件。(7) resources.arsc: res目录下的资源的一个索引文件。

二、APK包的生成步骤

Android 工程打包有两种方式:一种是使用Eclipse (akelipes)集成开发环境直接导出生成APK;另一种是使用Ant工具在命令行方式下打包生成APK。不管采用哪一种方式,打包APK过程的实质是一样的。Android的在线开发文档
Develop→Tools一Building and Running 中提供了一张APK文件的构建流程图,整个编译打包过程由多个步骤组成
如图所示:
图片.png
从流程图可以看出,整个APK打包过程分为七个步骤:

1)第一步:打包资源文件,生成R.java 文件。打包资源的工具aapt位于Android-sdk \platform-tools目录下,该工具的源码在Android系统源码的
frameworks\base\tools\aapt目录下,生成过程主要是调用了aapt源码目录下resource.cpp文件中的buildResources()函数,该函数首先检查AndroidManifest.xml
的合法性,然后对res目录下的资源子目录进行处理,处理的函数为
makeFileResources(),处理的内容包括资源文件名的合法性检查,向资源表添加条目等,处理完成后调用compileResourceFile(函数编译res与asserts (aserites)目录下的资源并生成resources.arsc文件,compileResourceFile()函数位于aapt源码目录的ResourceTable.cpp文件中,该函数最后会调用parseAndAddEntry()函数生成R.java文件,完成资源编译后,接下来调用compileXmlFile()函数对res目录子目录下的XML文件分别进行编译,这样处理过的XML文件就简单地被“加密”了,最后将所有的资源与编译生成的resources.arsc文件以及“加密”过的AndroidManifest.xml文件打包压缩成resources.ap文件(使用Ant工具命令行编译则会生成与build.xml中"project name”指定的属性同名的ap 文件)。
2)第二步:处理aidl文件,生成相应的Java文件。对于没有使用到aidl的Android工程,这一步可以跳过。这一步使用到的工具为aidl,位于Android-sdk\platform-tools目录下,aidl工具解析接口定义文件(aidl为Android interface definition language的首字母缩写,即Android接口描述语言)并生成相应的Java代码供程序调用,有兴趣的读者可以查看它的源码,位于Android源码的frameworks\base\tools\aidl目录下。
3)第三步:编译工程源代码,生成相应的.class文件。这一步调用javac编译工程src目录下所有的Java源文件,生成的.class文件位于工程的bin\classes目录下,上图中假定编译工程源代码时程序是基于Android SDK开发的,实际开发过程中,也有可能会使用Android NDK来编译native代码,因此,如果可能,这一步还需要使用AndroidNDK编译C/C++代码,当然,编译C/C++代码的步骤也可以提前到第一步或第二步。
4)第四步︰转换所有的.class文件,生成classes.dex文件。Android系统Dalvik虚报机的可执行文件为dex格式,程序运行所需的classes.dex就是在这一步生成的,使用的工具为dx,它位于Android-sdk patform-tools目录下,dx工具主要的工作Java字节码转换为Dalvik字节码、压缩常量池、消除冗余信息等。
5)第五步:打包生成APK文件。打包的工具为apkbuilder,它位于Android-sdk\tools目录下,apkbuilder为一个脚本文件,实际调用的是Android-
sdk\tools\lib\sdklib.jar文件中的com.Android.sdklib.build.ApkBuilderMain类。它的实现代码位于Android系统源码的sdk \sdkmanager\libs\sdklib\src\com\Android\sdklib \build\ApkBuilderMain.java文件中,代码构建了一个apkbuilder类,然后以包含resources.arsc的文件为基础生成
APK文件,这个文件
一般为以ap_结尾的文件,接着调用addSourceFolder()函数添加工程的资源,addSourceFolder()会调用processFileForResource(函数向APK文件中添加资源,处理的内容包括res目录与assets目录中的文件,添加完资源后调用addResourcesFromJar ()函数向APK文件中写入依赖库,接着调用addNativeLibraries(函数添加工程libs目录下的Native库(通过Android NDK编译生成的so或bin文件),最后调用sealApk()关闭APK文件。
6)第六步:对APK文件进行签名。Android的应用程序需要签名才能在Android设备上安装,签名APK文件有两种情况
一种是在调试程序时进行签名,使用Eclipse开发Android程序时,在编译调试程序时会自己使用一个debug.keystore 对APK文件进行签名;
另一种是打包发布时对程序进行签名,这种情况下需要提供一个符合Android开发文档中要求的签名文件。
签名的方法也有两种:
一种是使用JDK中提供的jarsigner工具签名;
另一种是使用Android源码中提供的signapk 工具,它的代码位于Android 系统源码的build\ tools\signapk目录下。
7)第七步:对签名后的APK文件进行对齐处理。这一步需要使用到的工具为zipalign,它位于Android-sdk\tools目录下,源码位于Android系统源码的
build\tools\zipalign目录下,它的主要工作是将APK包进行对齐处理,使APK包中的所有资源文件距离文件起始偏移为4字节的整数倍,这样通过内存映射访问APK文件时的速度会更快,验证APK文件是否对齐过的工作由ZipAlign.cpp文件的verify()函数完成,处理对齐的工作则由process()函数完成。这些知识点都跟之前介绍的四层架构以及文件结构息息相关,下面介绍Android系统是如何识别APK文件并安装的。

三、安卓程序的安装流程

(1)系统程序安装:开机时安装,这类安装没有安装界面。
(2)通过Android市场安装∶直接通过Android市场进行网络安装,这类安装没有安装界面。
(3)ADB工具安装:使用ADB工具进行安装,这类安装没有安装界面。
(4)手机自带安装:通过SD卡里的APK文件安装,这类安装有安装界面。

第一种方式是由开机时启动的PackageManagerService服务完成的,这个服务在启动时会扫描系统程序目录/system/App 并重新安装所有程序
第二种方式直接通过Android市场下载APK文件进行安装,目前国内大多数Android 手机没有集成GooglePlay商店,用户多数情况下是使用其他Android市场来安装APK程序的,这样,安装方式与第4种基本一样;第三种方式比较简单

四、总结

在进行安卓渗透的学习之前需要先对安卓的APK包的组成与生成步骤有一定的了解,只有了解之后在今后的渗透学习中才能更好地掌握与吸收

# 网络安全技术
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者

玻璃钢生产厂家四川户外玻璃钢雕塑价位frp玻璃钢雕塑公司云南佛像玻璃钢雕塑销售电话内蒙古玻璃钢花盆商场网红美陈拍照区设计江苏玻璃钢雕塑怎么样潍坊商场美陈装饰太湖石玻璃钢景观雕塑加工新密铸造校园玻璃钢雕塑厂家南京玻璃钢动物雕塑安徽玻璃钢牛动物雕塑厂家吐鲁番玻璃钢雕塑厂家商丘市玻璃钢雕塑郑州公园景观玻璃钢景观雕塑厂家十大品牌的玻璃钢座椅雕塑百花仙子玻璃钢雕塑价格鞍山玻璃钢雕塑电话北京玻璃钢卡通老鼠雕塑玻璃钢商场美陈雕塑多少钱晋城玻璃钢仿铜雕塑公司汕头玻璃钢动物雕塑服务电话天津玻璃钢解放军现代人雕塑桐乡公园玻璃钢花盆求购 玻璃钢雕塑玻璃钢卡通雕塑圣诞加工河北玻璃钢仿真水果雕塑价格长征红军玻璃钢雕塑广州园林景观玻璃钢雕塑公司河北特色商场美陈售价闵行区镜面玻璃钢雕塑要多少钱香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化