让我们先来认识下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文件有区别.



一个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文件反编译输出目录:

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


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




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

您可能感兴趣的文章:

Mono for Android 优势与劣势


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


更多相关文章

  1. Android之VOLD文件结构分析
  2. Android原生(Native)C开发之四:SDL移植笔记
  3. init进程【2】——解析配置文件
  4. ubuntu12.04 64bit编译android ics4.0代码出现的/usr/bin/ld.bfd
  5. Android(安卓)根文件系统启动过程
  6. Android(安卓)adb的使用略解
  7. Android基于Linux Eclipse开发环境配置
  8. Android(安卓)context 文件模式
  9. Android(安卓)一个apk多个ICON执行入口

随机推荐

  1. Android(安卓)版本更新签名冲突的问题以
  2. 谁能想到,Android外包工作三年,能入职某大
  3. Android应用《撕开美女衣服》的实现过程
  4. 国产神器天语Android双核手机W700线下赏
  5. Supernote 讓你在華碩的平板上做出不少好
  6. Android的px、dp和sp等单位的区别详解
  7. Android收发UDP报文详解 及 优雅解决接收
  8. android一步一步实现视频客户端app(一)
  9. Android(安卓)开发中使用Eclipse Debug调
  10. 关于android系统中的系统时间和rtc时间