Android 解读.apk解压后文件详细说明

反编译 — 在apk文件中能得到什么

最近在做android客户端与服务器安全通信,有一种常见的不安全因素:很多软件常常会被人从apk文件中获取到下载地址或帐户信息。一个打包成apk的软件,通过反编译可以获得哪些信息呢?下面我们来动手反编译一个简单的demo--HelloWorld。

将生成的HelloWorld.apk使用压缩软件打开,看到下面几个文件/目录

  1. META-INF
  2. res
  3. AndroidManifest.xml
  4. classes.dex
  5. resources.arsc

其中,res中存放着所有的图片文件以及xml文件,也就是在eclipse工程目录中res下面的所有资源。这里的xml文件是经过压缩的,用AXMLPrinter2工具可以打开。

这是反编译出来的AndroidManifest.xml

怎么样,是不是跟源代码一模一样?

resources.arsc文件中保存的是编译后的二进制资源文件,许多做汉化软件的人都是修改该文件内的资源以实现软件的汉化的。

classes.dex是java源码编译生成的字节码文件。但由于Android使用的dalvik虚拟机与标准的java虚拟机是不兼容的,.dex文件与.class文件相比,不论是文件结构还是opcode都不一样。目前常见的java反编译工具都不能处理dex文件。

dex2jar是专为反编译.dex而开发的工具,它可以把.dex文件反编译成为.jar文件。然后用JD-GUI工具将.jar文件反编译成.java文件。

这是反编译出来的MainActivity.xml

下面是源代码:

经过反编译的代码虽然可读性不是很好,但是跟源码几乎没什么差别。在开发时如果你直接将账号等重要信息放到java代码中,那就没有任何安全性可言了。

经过反编译,anroid项目的源码全部暴露无疑,那是不是可以通过反编译将一个android软件改成自己想要的样子?答案是否定的,在META-INF目录下存放的是软件的签名信息,用来保证apk包的完整性和系统的安全。在软件安装时应用管理器会对包里的文件进行校验,如果校验信息与META-INF目录下的信息不一样,系统就会拒绝安装这个软件。另外,专业的编程人员都会把重要信息封装到.so库文件里,这些信息是无法被反编译的。

即使这样,对一个软件进行像汉化这样的操作却是足够了。

时间: 2024-10-13 22:47:37

Android 解读.apk解压后文件详细说明的相关文章

android zip4j之--解压zip文件并实时显示解压进度

Zip文件是我们经常用到压缩文件格式,android中在进行网络请求大批量数据时,通常会采用传递zip文件,这样做即可以减少网络流量的消耗,加快请求的响应速度,又可以减少对存储空间的要求,所以当我们将zip文件读取回来的时候,如何解压就是一个要解决的问题,虽然java本身提供了zip相关的API,但不是很强大,所以我们采用apache开源组织的zip4j,通过这个jar包可以十分轻松的解压zip文件. 回到项目中去,项目中有个需求是从服务器请求杂志,请求回来后给读者展示,但是由于公司自己做的电子

基于Android下载并解压Zip文件,更新UI简单帮助类

类似于:http://blog.csdn.net/jarlen/article/details/44794031 下载文件: /** * 下载文件 * * @param down_url * @param output * @param tmpDir */ private void download(String down_url, File output, File tmpDir) { InputStream inputStream = null; OutputStream outputStr

android反编译查看源码,apk解压后XML乱码解决

1:找了好几个软件都不能图形化的解决反编译,很不舒服,最后找了个还算顺手的,顺便保存下. 2:使用过程 <1> apk转jar apktoolkit工具 <2> 查看jar源码  jd_gui工具 <3> 解决xml乱码问题  AXMLprinter2工具使xml转成txt格式 工具下载地址:

JAVA解压ZIP文件

import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; import java.util.zip.ZipEntry; import

saltstack在解压zip文件时保留原始修改时间的方法

saltstack在使用archive.unzip功能时,会将压缩包中文件的"修改时间"替换为当前解压的系统时间,为了能够保留文件原来的"修改时间",需要对salt-manion的源码中archive.py文件的unzip方法进行修改: 文件位置: windows    C:/salt/bin/Lib/site-packages/salt/modules/archive.py linux:  /user/lib/python2.7/site-packages/sal

[教程] wdcp文件管理器里不能删除或移动解压后的文件解决方法

问题:在本地上传压缩包到服务器之后,在wdcp文件管理器里解压,解压之后想把文件移动到其他目录,填写好移动的目标目录之后点移动,显示移动成功,但到目标目录却发现没有自己所移动的文件,文件不知道消失到哪里去了:再看原本解压后的文件夹里也没有文件. 解决方法:看看是不是自己的压缩前的文件夹里有文件名或文件夹名包含中文字符,把他改成英文后再压缩上传,解压之后移动就没问题了:同样,删除不了的文件也可能是你文件名里包含了中文,甚至上传解压之后的文件名已经不是正常中文了,而是乱码! 转自:http://ww

Ubuntu下压缩包内文件解压后乱码问题的解决

用到的工具是The Unarchiver项目提供的lsar/unar工具. The Unarchiver项目主页:http://code.google.com/p/theunarchiver/ 安装(12.04及以上): 代码: sudo apt-get install unar 12.04下面或者想编译安装的朋友请參考: viewtopic.php?f=35&t=353426 使用: 如果须要解压的ZIP包是foo.zip 代码: lsar foo.zip #列出全部文件 假设列出的文件名称已

如何解决Mac里面解压后文件名乱码问题

如果你把Mac当成你的主要工作机器,而你的同事用的都是Windows,有时候交换文档就是一件很痛苦的事,比如今天要说到的问题:当同事传给你一个zip文件,结果你拿过来解压后发现里面有些文件的文件名如果带中文的话,你看到的将会是一堆乱码...Jay一直都无视这个问题,直到有一天终于忍不住了,去google了一把,终于找到了答案,这里分享一下. 其实解决方案很简单,下个软件装上吧!我们要装的软件是“The Unarchiver”.进入Mac App Store搜索 这里略去搜索和安装的过程 安装后第

[Linux] 解压tar.gz文件,解压部分文件

遇到数据库无法查找问题原因,只能找日志,查找日志的时候发现老的日志都被压缩了,只能尝试解压了   数据量比较大,只能在生产解压了,再进行查找 文件名为*.tar.gz,自己博客以前记录过解压方法: http://www.cnblogs.com/garinzhang/archive/2013/04/23/3037147.html 使用tar –zxvf *.tar.gz无法解压,明明好好的tar.gz文件能这样解压的,为什么不能解压?   后来想了想,是不是先要解压*.gz文件,使用gunzip