APK文件浅析-Android

摘要:
基本上,有这个文件。起初,人们认为程序遍历了Apk包中的所有文件(条目),就像在Java中一样。更改的文件摘要信息与MANIFEST.MF的检查信息不同。只能在安装期间使用公钥对其进行解密。MANIFEST.MF文件),并使用开发人员的公钥解密不正确的签名文件。(3) CERT.RSA文件存储公钥、加密算法和其他信息。META-INFO表示文件彼此链接。首先解压缩APK文件。
  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》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MyEclipse 2016 Stable 1.0破解教程IdentityServer4下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

coreos安装

cloud-config-bootstrap.sh #!/bin/bash cat > "cloud-config.yaml" <<EOF #cloud-config ssh_authorized_keys: - ssh-rsa ... EOF sudo coreos-install -d /dev/vd...

sass中文注释的解决方法和一些简单用法

最近用sass来编写项目中的css,发现不能添加中文注释,报错如下 于是查阅了一下发现需要在scss文件顶部加上@charset "utf-8"即可解决。 在此顺便记录一些sass的常用技巧。 注释: /* 我是注释 */ ,会保留到编译后的文件。 // 我是注释 ,只保留在SASS源文件中,编译后被省略。  /*后面加一个感叹号,表示这是...

python学习第6天----文件操作

1.文件操作          python中通过open()函数打开一个文件,获取到文件句柄,然后通过文件句柄就可进行各种操作(句柄就相当于一个变量),文件句柄是一个可迭代对象          打开文件的操作有:r,w,a,r+,w+,a+,rb,wb,ab,r+b,w+b,a+b;默认使用的是r 1)只读操作 英雄.txt 惩戒之箭 九尾妖狐 远古...

springboot中使用@Value读取配置文件

一、配置文件配置 直接配置 在src/main/resources下添加配置文件application.properties 例如修改端口号 #端口号 server.port=8089 分环境配置 在src/main/resources下添加,application-pro.properties,application-dev.properties和a...

Restful API 设计参考原则

在项目中,需要为后台服务撰写API。刚开始接触的时候,并没有考虑太多,就想提供URL,服务端通过该URL进行查询、创建、更新等操作即可。但再对相关规范进行了解后,才发现,API的设计并没有那么简单,远远不是URL的问题,而是一个通信协议的整体架构 1. 使用GET、POST、PUT、DELETE这几种请求模式 请求模式也可以说是动作、数据传输方式,通常我们...

Visual Studio Code前端Vue开发工具VS Code与调试

vscode安装 进入vscode官网(https://code.visualstudio.com/Download)vscode插件安装进入vscode官网插件商店(https://marketplace.visualstudio.com/VSCode) 安装Vetur插件,点击install,会启动vscodevue相关插件vetur 语法高亮、智能感...