让我们先来认识下APK文件. Android的应用程序包为扩展名为.apk文件, 无论你是从手机市场里下载, 还是电脑中下载.  都是这类APK文件.  APK是AndroidPackage的缩写,即Android安装包(apk)。APK是类似Symbian Sis或Sisx的文件格式。通过将APK文件直接传到Android模拟器或Android手机中执行即可安装。apk文件和sis一样,把android sdk编译的工程打包成一个安装程序文件,格式为apk。 APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java ME的字节码而是Dalvik字节码。Android在运行一个程序时首先需要UnZip,然后类似Symbian那样直接,和Windows Mobile中的PE文件有区别.

android

一个APK文件解压开通常有这样的文件夹:

  • META-INF 目录:
    • MANIFEST.MF: manifest文件
    • CERT.RSA: 应用程序证书
    • CERT.SF: SHA-1资源签名列表. 例如:
 Signature-Version: 1.0
 Created-By: 1.0 (Android)
 SHA1-Digest-Manifest: wxqnEAI0UA5nO5QJ8CGMwjkGGWE=
 ...
 Name: res/layout/exchange_component_back_bottom.xml
 SHA1-Digest: eACjMjESj7Zkf0cBFTZ0nqWrt7w=
 ...
 Name: res/drawable-hdpi/icon.png
 SHA1-Digest: DGEqylP8W0n0iV/ZzBx3MW0WGCA=

  • lib
    : 这个目录包含某些特定编译代码, 这个文件夹分成下面这些
    • armeabi: 只基于所有ARM处理器的编译代码.
      armeabi-v7a: 所有ARMv7处理器的编译代码
    • x86: 仅针对x86处理器的编译代码
    • mips: 为MIPS处理器的编译代码
  • res: 包含资源的目录不编译到资源文件,看下面:
  •   assets: 包含应用程序的资产,可以通过AssetManager进行检索.
  • AndroidManifest.xml: 包含应用程序的元数据文件,描述名称、版本、访问权限、引用应用程序的库文件。此文件在Android二进制格式, 可被工具转化为可读的纯文本XML工具,如   AXMLPrinter2,apktool,或Androguard。设置,可以通过AssetManager进行检索
  • classes.dex: Dalvik字节码
  • resources.arsc : 一个包含预编译资源文件,如二进制的XML. 

有两种方法反编译APK, 如果是为了汉化程序, 可以使用apktool:

安装过程
 
1.下载apktool1.5.2.tar.bz2和apktool-install-windows-r05-brut1.tar.bz2
2.把两个文件都解压放在同一个目录,共三个文件
aapt.exe
apktool.bat
apktool.jar用于解包,apktool.jar和aapt.exe联合用于打包。

在命令行执行:

apktool d d:\xxx.apk d:\xxx

xxx 为你的输出目录,  然后你就可以看一些xml的资源文件, 以及Smali文件. 如下图某APK文件反编译输出目录:

deAndroidDir

Smali,Baksmali分别是指安卓系统里的Java虚拟机(Dalvik)所使用的一种.dex格式文件的汇编器,反汇编器。其语法是一种宽松式的Jasmin/dedexer语法,而且它实现了.dex格式所有功能.


你可以使用dex2jar, 下载后解压, 直接把apk文件拖到dex2jar.bat文件上,就可以生成对应*.jar文件,这时使用JD-GUI, 打开jar文件,就可以看到java源码,同时可以导出.

jdgui


由此可见,Android应用程序反编译并不难, 加密与解密的斗争一直会持续.

您可能感兴趣的文章:

Mono for Android 优势与劣势


作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
该文章也同时发布在我的独立博客中-Petter Liu Blog

posted on 2013-03-27 21:57  PetterLiu  阅读(5178)  评论(1编辑  收藏  举报