zoukankan      html  css  js  c++  java
  • Android应用程序反编译

          让我们先来认识下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

  • 相关阅读:
    (引)spring学习笔记1.什么是控制反转
    Arduino 各种模块篇 步进电机 step motor 舵机 servo 直流电机 总复习
    Raspberry Pi Wireless Adaptor
    Pyramid 使用总结1
    Arduino 各种模块篇 人体红外感应模块 proximity sensor
    Pyramid 使用总结2
    Webcam Streaming Desktop Recording on Linux for ubuntu or its destros
    Arduino 各种模块篇 步进电机 step motor( 不用库,不用shield, 纯)
    Arduino 各种模块篇 motor shield 电机扩展板(舵机、直流电机、步进电机party)
    转载 stepper motors
  • 原文地址:https://www.cnblogs.com/wintersun/p/2985498.html
Copyright © 2011-2022 走看看