`
quanminchaoren
  • 浏览: 926462 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Android 反编译资料

阅读更多

一、反编译流程图

                 

二、工具使用方法(命令)

准备工作

假设我的工作目录为 $AndroidDecompile ,首先要将 system.img 中(或者说从源码中编译好的)几个重要的 odex 文件拷贝到工作目录中,他们是: core.odex, ext.odex, framework.odex, android.policy.odex, services.odex (也可以放在别的目录,通过设置 BOOTCLASSPATH 指定,默认就是当前目录,关于 BOOTCLASSPATH 请参考 baksmali 的帮助信息)。

 

下载以下工具到 $AndroidDecompile 中:

Baksmali :

http://code.google.com/p/smali/downloads/list

 

Smali :

http://code.google.com/p/smali/downloads/list

 

Dex2jar :

http://code.google.com/p/dex2jar/downloads/list

 

JD-GUI (Java Decompile GUI) :

http://java.deco mpiler.free.fr/?q=jdgui <!--[if !supportNestedAnchors]--> <!--[endif]-->

 

AutoSign :

http://d.download.csdn.net/down/2768910/fjfdszj

 

Apktool

http://code.google.com/p/android-apktool/downloads/list

 

假设我们有一个应用,它的类文件编译后被单独拿了出来,即有两个文件 app.apk app.odex ,把他们放在 $AndroidDecompile 下。

 

1. 使用 baksmali.jar odex 文件分解为 smali 文件

$ java –jar baksmali-1.2.5.jar –x app.odex

如果成功的话,会在 $AndroidDecompile 下生成一个 out 目录,里面是一些以“ .smali ”为后缀名的文件,在此不深究这些文件的作用。

注意:rom反编译时用最新版的baksmail.jar后面要跟上-d framework.odex的路径,并且jdk为7以上版本。

 

2. 使用 smali.jar out/ 目录下的 smali 文件转换为 classes.dex

$ java -Xmx512M –jar smali-1.2.5.jar out –o classes.dex

classes.dex 便是 Dalvik VM 所使用的编译后的类文件格式,在正常的 apk 文件里都会有。

 

3. 使用 dex2jar classes.dex 反编译为 jar 文件

将下载后的 dex2jar 压缩包解压后,里面会有 dex2jar.sh( dex2jar.bat) 文件,假如 classes.dex 文件与 dex2jar.sh 在同一目录下,使用以下方式将 classes.dex 反编译为 jar 文件:

$dex2jar.bat classes.dex

如果执行成功,则会在当前目录下生成反编译后的文件 classes.dex.dex2jar.jar

dex2jar 即可以操作 dex 文件,也可以直接操作 apk 文件,它的使用规则为:

dex2jar file1.dexORapk file2.dexORapk ...

 

4. 使用 JD-GUI 查看反编译后的 jar 文件

JD-GUI 是一个可视化的 Java 反编译代码查看器,它可以实时的将 class 文件反编译成 java 文件进行查看。解压下载的 jd-gui 文件,执行目录中的 jd-gui 可执行文件启动,然后加载上一步中反编译好的 classes.dex.dex2jar.jar 文件即可。

 

5. 将从 odex 反编译后的 classes.dex 与其他资源文件重新打包成一个完整的 apk

以上我们假设的情况是应用程序编译后的类文件从 apk 文件中被剥离出来,下面要做的是如何将上述步骤中得到的 classes.dex apk 中的其他文件重新打包成一个可用的 apk

首先将反编译后的 classes.dex 和原先的 app.apk (不含 classes.dex )重新压缩成一个完整的 app.apk apk 文件可用压缩工具打开),也就是说将 classes.dex 放进 app.apk 中。

将下载的 AutoSign 文件解压,可以看到有 signapk.jar (还有个 Sign.bat )文件,执行以下命令给 app.apk 文件签名,就可以生成一个可以运行的 apk 文件了。

$ java -jar signapk.jar testkey.x509.pem testkey.pk8 app.apk app_signed.apk

 

6. apktool 的使用

网上还有个工具是 apktool ,可以对 apk 进行解析,反编译资源文件,并将类文件解析成 smali 文件;同时还可以将解析后的文件重新打包成 apk 。功能和以上介绍的几个工具类似,它的使用方法如下:

apktool d app.apk and     反编译 app.apk 到文件夹 and

apktool b app                 从文件夹 app 重建 APK ,输出到 ABC\dist\out.apk

具体的使用方法在此不再赘述,请参考官方网站,或者:

http://www.geeka.net/2010/05/apktool-decode-android-google-code/

 

7. 我的 $AndroidDecompile 目录下的文件的截图

 

 

三、一些工具的帮助信息

1. baksmali 的帮助信息

usage: java -jar baksmali.jar [options] <dex-file>

disassembles and/or dumps a dex file

  -?,--help                                 Prints the help message then exits.

  -b,--no-debug-info                          Specify twice for debug options

                            don't write out debug info (.local,

                                            .param, .line, etc.)

  -c,--bootclasspath <BOOTCLASSPATH>      The bootclasspath jars to use, for

                                           analysis. Defaults to

                                           core.jar:ext.jar:framework.jar:andro

                                           id.policy.jar:services.jar. If the

                                           value begins with a :, it will be

                                           appended to the default

                                           bootclasspath instead of replacing it

  -d,--bootclasspath-dir <DIR>                 The base folder to look for the

                                            bootclasspath files in. Defaults to

                                           the current directory

  -f,--code-offsets                            Add comments to the disassembly

                                           containing the code offset for each address

  -l,--use-locals                              Output the .locals directive with

                                           the number of non-parameter

                                           registers, rather than the .register

  -o,--output <DIR>                           Directive with the total number of  register

                                            the directory where the disassembled

                                            files will be placed. The default is out

  -p,--no-parameter-registers                   Use the v<n> syntax instead of the

                                           p<n> syntax for registers mapped to

                                           method parameters

  -r,--register-info <REGISTER_INFO_TYPES>   Print the specificed type(s) of

                                           register information for each

                                           instruction. "ARGS,DEST" is the

                                           default if no types are specified.

                                           Valid values are:

                                           ALL: all pre- and post-instruction registers.

                                           ALLPRE: all pre-instruction registers

                                            ALLPOST: all post-instruction registers

                                           ARGS: any pre-instruction registers

                                                used as arguments to the instruction

                                            DEST: the post-instruction

                                                destination register, if any

                                           MERGE: Any pre-instruction register

                                                has been merged from more than 1

                                                different post-instruction register

                                                from its predecessors

                                           FULLMERGE: For each register that

                                               would be printed by MERGE, also show

                                              the incoming register types that

                                              were merged

  -s,--sequential-labels                        Create label names using a

                                           sequential numbering scheme per

                                           label type, rather than using the

                                           bytecode address

  -v,--version                                Prints the version then exits

  -x,--deodex                               Deodex the given odex file. This

                                           option is ignored if the input file

                                           is not an odex file

 

2. smali 的帮助信息

usage: java -jar smali.jar [options] [--] [<smali-file>|folder]*

assembles a set of smali files into a dex file

  -?,--help            prints the help message then exits. Specify twice for

                      debug options

  -o,--output <FILE>   the name of the dex file that will be written. The default

                      is out.dex

  -v,--version         prints the version then exits

 

3. auto-sign 的帮助信息

SignApk.jar is a tool included with the Android platform source bundle.

testkey.pk8 is the private key that is compatible with the recovery image included in this zip file

testkey.x509.pem is the corresponding certificate/public key

 

Usage:

java -jar signapk.jar testkey.x509.pem testkey.pk8 update.zip update_signed.zip

 

4. apktool 的帮助信息

Apktool v1.3.2 - a tool for reengineering Android apk files

Copyright 2010 Ryszard Wi?niewski <brut.alll@gmail.com>

Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)

 

Usage: apktool [-v|--verbose] COMMAND [...]

 

COMMANDs are:

 

    d[ecode] [OPTS] <file.apk> [<dir>]

        Decode <file.apk> to <dir>.

 

        OPTS:

 

        -s, --no-src

            Do not decode sources.

        -r, --no-res

            Do not decode resources.

        -d, --debug

            Decode in debug mode. Check project page for more info.

        -f, --force

            Force delete destination directory.

        -t <tag>, --frame-tag <tag>

            Try to use framework files tagged by <tag>.

        --keep-broken-res

            Use if there was an error and some resources were dropped, e.g.:

            "Invalid config flags detected. Dropping resources", but you

            want to decode them anyway, even with errors. You will have to

            fix them manually before building.

    b[uild] [OPTS] [<app_path>] [<out_file>]

        Build an apk from already decoded application located in <app_path>.

 

        It will automatically detect, whether files was changed and perform

        needed steps only.

 

        If you omit <app_path> then current directory will be used.

        If you omit <out_file> then <app_path>/dist/<name_of_original.apk>

        will be used.

 

        OPTS:

 

        -f, --force-all

            Skip changes detection and build all files.

        -d, --debug

            Build in debug mode. Check project page for more info.

 

    if|install-framework <framework.apk> [<tag>]

        Install framework file to your system.

For additional info, see: http://code.google.com/p/android-apktool/

分享到:
评论

相关推荐

    Android反编译工具包(最完整的Android反编译工具包)

    标题中的“Android反编译工具包(最完整的Android反编译工具包)”表明这是一个集合了多种工具的资源包,用于帮助开发者和安全研究人员进行APK的反编译工作。 首先,让我们来了解一下反编译的基本概念。反编译是将已...

    android反编译工具

    这通常涉及到使用各种Android反编译工具。这些工具可以帮助开发者、安全研究人员或者逆向工程师理解已编译的Android应用程序的工作原理。下面我们将详细探讨一些常用的Android反编译工具及其应用。 1. **Apktool**...

    Android 反编译-全部工具包

    "Android反编译-全部工具包"提供了一个便捷的方式,将所有必要的反编译工具集合在一起,使得开发者无需分别下载和配置各个工具。下面,我们将详细介绍这个工具包中包含的组件及其用途。 1. **Apktool**:Apktool是...

    最新的android反编译

    最新的android反编译工具以及相关的使用方法,这个版本为最新的工具。 1、把apk文件重命名为zip或者rar文件格式 2、解压后把classes.dex复制到dex2jar-2.0目录中 3、打开cmd,定位到dex2jar-2.0目录 4、运行d2j-dex2...

    android反编译工具(dex2jar,apk2java)

    本文将详细介绍两款常用的Android反编译工具——dex2jar和apk2java,以及如何利用它们获取APK中的Java源代码和资源文件。 一、dex2jar dex2jar是一款将Dalvik字节码(.dex)转换为Java字节码(.jar)的工具。...

    Android反编译工具

    首先,Android反编译工具.exe和Android反编译工具(64位).exe是两个可执行文件,可能是用于在Windows操作系统上运行的反编译软件。这些工具通常能够解析APK文件,将其Java字节码(Dalvik Executable, .dex)转换回源...

    android反编译工具及使用方法

    里面包含了一个反编译工具,一个查看反编译后的文件工具,一个详细说明文档,可以将一个android的apk文件反编译后查看作者的原代码,由于在代码打包成apk时的编译经过了处理,反编译后的代码不可能恢复到原来的代码...

    Android反编译工具包

    这就是Android反编译工具包的作用。本文将深入探讨Android反编译的相关知识,包括为什么要反编译,常用的工具,以及如何使用这些工具。 一、为什么进行Android反编译 1. 安全分析:开发者或安全研究人员可以通过反...

    Android 反编译可视化操作工具

    这就是Android反编译的作用。本文将详细介绍一款名为"Android反编译可视化操作工具"的实用软件,它使得这个过程变得更加直观和便捷。 这款工具的核心优势在于它的可视化界面,开发者无需再通过复杂的命令行操作来...

    android反编译资源获取

    在Android应用开发中,"android反编译资源获取"是一个重要的技术话题,它涉及到对APK文件的逆向工程,以便获取其中的资源文件,如图片、布局文件等。APKTool是这个过程中常用的一款工具,它允许开发者解包、反编译、...

    Android反编译软件 安卓反编译 Android APK反编译详解

    本文将深入探讨Android反编译的相关知识,包括为什么要进行反编译,常用工具介绍,以及反编译过程的详细步骤。 首先,让我们理解什么是Android反编译。Android应用通常是以APK(Android Package)的形式发布,它...

    android反编译xml、layout

    `apktool`是一个开源的Android反编译工具,它能够帮助我们解包APK,反编译其中的XML和布局文件(layout),并提供重新打包和签名的功能,以实现对APK的分析和修改。 首先,`apktool`的基本使用流程如下: 1. **...

    Android反编译工具包(最新)

    Android反编译工具包合集,包含apktool,jd-gui-0.3.5.windows,dex2jar-0.0.9.15

    android反编译工具包

    "android反编译工具包"正是为这种需求而设计的专业工具集,它可以帮助开发者将二进制的字节码还原成可读的源代码,以及查看和分析应用程序的资源文件,如布局、图片和字符串等。 1. **反编译原理**:Android应用...

    android 反编译smali工具

    本文将深入探讨“android 反编译smali工具”,包括smali、smali-1.4.2.jar、baksmali-1.4.2.jar以及baksmali这四个工具,它们在Android反编译流程中的作用和使用方法。 首先,我们要知道,Android应用程序主要由...

    Android 反编译工具 APKDB

    本文将详细介绍“Android反编译工具APKDB”,以及如何利用它来提升我们的Android开发与调试能力。 APKDB全称为Android Package Database,是一款专为Android开发者设计的反编译工具。它能够帮助开发者快速对APK文件...

    android 反编译工具

    本篇将详细介绍三个常用的Android反编译工具:Apktool、dex2jar以及JD-GUI。 1. **Apktool**: Apktool是一款强大的Android应用反编译工具,由Ivo Labs公司开发。它能够解码Android应用的资源文件,包括XML布局、...

    android 反编译jar包

    总之,Android反编译jar包是一个涉及多种工具和技术的过程,需要对逆向工程有一定的了解。正确使用这些工具可以帮助开发者解决特定问题,但同时也需要遵循法律和道德规范,尊重软件开发者的劳动成果。

Global site tag (gtag.js) - Google Analytics