zoukankan      html  css  js  c++  java
  • Android 解读.apk解压后文件详细说明

    转自:http://xdang.org/post-602.html

    以下原文:

    反编译 — 在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库文件里,这些信息是无法被反编译的。

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

  • 相关阅读:
    地球化学图解系统GCDPlot 0.33
    《Excel VBA应用开发从基础到实践》配套源代码
    边缘化的GIS——Traditional GIS No Longer Necessary
    数据库与空间数据库
    本Blog暂停更新,请访问:http://mars.3snews.net
    ArcGIS 9.2 笔记(5):Georocessing与Python
    微软更新Photosynth Technology Preview
    ArcGIS 9.2 笔记(4):数据互操作
    技术日记20130408
    Git服务器Gitosis安装设置
  • 原文地址:https://www.cnblogs.com/jenson138/p/4220668.html
Copyright © 2011-2022 走看看