APK文件浅析-Android
2011~2015,5年时间,断断续续学习了Android。
最近打算在2011年2个月认真学习的基础上,深入学习下。
由于有之前的Android基础,加上N年的Java等变成经验,自我感觉Android应用开发还是比较简单的。
至少相比iOS开发来说。
继续坚持自己的习惯,写点自己的体会,总结自己的经验。
学了又忘了,没啥用啊~
Android打包之后,生成了APK文件。
APK文件其实是个zip文件。
比如,FileExplorer.apk,把后缀改成zip,就成了 FileExplorer.zip。
类似的还有Excel文件,比如FansUnion.xlsx,改后缀FansUnion.zip,解压之后:
_rels
docProps
xl
[Content_Types].xml
有兴趣的可以自己试试哦~
解压之后:
META-INF
--CERT.RSA
--CERT.SF
--MANIFEST.MF(Java打包的程序,基本都有这个文件.最初以为和Java中的一样,后来发现不是的。)
(1)MANIFEST.MF:这是摘要文件。程序遍历Apk包中的所有文件(entry),对非文件夹非签名文件的文件,逐个用SHA1生成摘要信息,再用Base64进行编码。如果你改变了apk包中的文件,那么在apk安装校验时,改变后的文件摘要信息与MANIFEST.MF的检验信息不同,于是程序就不能成功安装。
说明:如果攻击者修改了程序的内容,有重新生成了新的摘要,那么就可以通过验证,所以这是一个非常简单的验证。
(2)CERT.SF:这是对摘要的签名文件。对前一步生成的MANIFEST.MF,使用SHA1-RSA算法,用开发者的私钥进行签名。在安装时只能使用公钥才能解密它。解密之后,将它与未加密的摘要信息(即,MANIFEST.MF文件)进行对比,如果相符,则表明内容没有被异常修改。
说明:在这一步,即使开发者修改了程序内容,并生成了新的摘要文件,但是攻击者没有开发者的私钥,所以不能生成正确的签名文件(CERT.SF)。系统在对程序进行验证的时候,用开发者公钥对不正确的签名文件进行解密,得到的结果和摘要文件(MANIFEST.MF)对应不起来,所以不能通过检验,不能成功安装文件。
(3)CERT.RSA文件中保存了公钥、所采用的加密算法等信息。
说明:系统对签名文件进行解密,所需要的公钥就是从这个文件里取出来的。
结论:从上面的总结可以看出,META-INFO里面的说那个文件环环相扣,从而保证Android程序的安全性。(只是防止开发者的程序不被攻击者修改,如果开发者的公私钥对对攻击者得到或者开发者开发出攻击程序,Android系统都无法检测出来。)
res(各种XML资源文件)
--drawable
--layout
--等等
这个目录,有个特别的“战略意义”~
上次看一篇Android文章,关于汉化的。汉化Android程序,先把APK文件解压,然后修改res资源文件,最后再次打包,再安装,
这样就汉化了Android程序。我觉得,理论是可行的,目前没有试过。
AndroidManifest.xml(Android项目的标准文件)
classes.dex(Java文件最后生成的,.java->.class->.dex)
resources.arsc(也是资源文件)
只有那些类型为res/animator、res/anim、res/color、res/drawable(非Bitmap文件,即非.png、.9.png、.jpg、.gif文件)、
res/layout、res/menu、res/values和res/xml的资源文件均会从文本格式的XML文件编译成二进制格式的XML文件。
好处应该是效率。
参考资料:
Android签名与认证详细分析之一(CERT.RSA剖析)
http://myeyeofjava.iteye.com/blog/2125348
Android应用程序资源的编译和打包过程分析
http://www.cnblogs.com/mfryf/archive/2013/05/21/3090844.html
小雷FansUnion--一个正在学习Android的程序员
APK文件浅析-Android的更多相关文章
- 将apk文件添加到Android模拟器(AVD)中运行
apk不同exe和jar文件,apk需要在安卓系统中运行,单有一个apk文件还是没用,不能直接拖进AVD中(当然可以直接放到安卓系统的手机中) 由于我们的eclipse大都是已经安装好,解压直接使用的 ...
- Android 自动编译、打包生成apk文件 2 - 使用原生Ant方式
from://http://blog.csdn.net/androiddevelop/article/details/11100109 相关文章列表: <Android 自动编译.打包生成apk ...
- 使用ant自动编译、打包生成apk文件
上次使用命令行生成apk文件<Android 命令行编译.打包生成apk文件>,学习命令行生成的目的是为了编写ant打下基础. 一. ant环境 下载ant包,配置环境变量 二.ant编译 ...
- 【转】 Apk文件及其编译过程
Apk文件概述 Android系统中的应用程序安装包都是以apk为后缀名,其实apk是Android Package的缩写,即android安装包. 注:apk包文件其实就是标准的zip文件,可以直接 ...
- 将HTML5封装成android应用APK文件的几种方法
越来越多的开发者热衷于使用html5+JavaScript开发移动Web App.不过,HTML5 Web APP的出现能否在未来取代移动应用,就目前来说,还是个未知数.一方面,用户在使用习惯上,不喜 ...
- Android源码中内置包含so文件的APK文件
方法一: 在packages/apps下面以需要预置的APK名字创建文件夹,以预置一个名为Test的APK为例 将Test.apk放到packages/apps/Test下面 在packages/ap ...
- 将HTML5封装成android应用APK文件的几种方法(转载)
越来越多的开发者热衷于使用html5+JavaScript开发移动Web App.不过,HTML5 Web APP的出现能否在未来取代移动应用,就目前来说,还是个未知数.一方面,用户在使用习惯上,不喜 ...
- android APK 文件的生成过程
步骤: 1. 用 aapt工具生成R文件aapt package -m -J gen目录 -M AndroidManifest.xml -S res目录 -I 编译版本sdk的android ...
- android 开发 程序中下载安装APK文件 问题汇总 解析程序包时出现问题
1 若把APK文件保存到应用程序的files目录下,则一定注意保存时使用 FileOutputStream os = openFileOutput(fileName, MODE_WORLD_READA ...
随机推荐
- Docker安装配置教程
Docker公开课 1 Docker介绍 1.1 Docker是什么 云计算\云服务 IAAS(基础设施即服务).PAAS(平台即服务).SAAS(软件即服务) Docker到底是什么呢? Docke ...
- 洛谷P1919 【模板】A*B Problem升级版(FFT快速傅里叶)
题目描述 给出两个n位10进制整数x和y,你需要计算x*y. 输入输出格式 输入格式: 第一行一个正整数n. 第二行描述一个位数为n的正整数x. 第三行描述一个位数为n的正整数y. 输出格式: 输出一 ...
- vue中剖析中的一些方法
1 判断属性 71 -81 var hasOwnProperty = Object.prototype.hasOwnProperty; /** * Check whether the object h ...
- DENON AVR-X510BT 功放设置记录
http://manuals.denon.com/avrx510bt/ap/zh/index.php 环绕模式 : Direct:直接 Sttereo:立体声 Dolby PL 声音模式 电影 : ...
- 如何在Centos官网下载所需版本的Centos——靠谱的Centos下载教程
很多小伙伴不知道对应版本的Centos怎么下载,最近小编整理了一份Centos详细的下载教程,希望小伙伴们不在为下不到对应版本的Centos而苦恼. 1.进入Centos官网:https://www. ...
- 分享《Python 游戏编程快速上手(第3版)》高清中文版PDF+高清英文版PDF+源代码
通过编写一个个小巧.有趣的游戏来学习Python,通过实例来解释编程的原理的方式.14个游戏程序和示例,介绍了Python基础知识.数据类型.函数.流程控制.程序调试.流程图设计.字符串操作.列表和字 ...
- 树莓派 使用python来操作GPIO 控制LED灯
一.创建python驱动和控制GPIO 先新建一个文件夹用于放置脚本 mkdir python_gpio 进入文件夹内新建一个gpio_blink.py的脚本 cd python_gpio touch ...
- 强制获取序列下一个值/当前值(oracle函数)
原文链接--http://blog.csdn.net/qq525099302/article/details/47146393 为什么要使用函数来获取序列值请看这里 -- 创建获取序列下一个值的函数 ...
- python-openpyxl安装
今天在安装openpyxl的时候,一直提示错误,后来才发现仅仅安装它还不够,还需要其他两个库的支持1.安装jdcal2.安装et_xmlfile这两个库安装的方法,都是直接在命令行下面,进入库文件se ...
- vue中computed与watch的异同
一.computed 和 watch 都可以观察页面的数据变化.当处理页面的数据变化时,我们有时候很容易滥用watch. 而通常更好的办法是使用computed属性,而不是命令是的watch回调. ...