`
y150988451
  • 浏览: 197569 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Android 反编译资料整理

阅读更多


Android 
反编译资料整理

Made by 李文栋  rayleeya@gmail.com

2010-12-13  Monday 于北京

一、反编译流程图

                 

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

准备工作

假设我的工作目录为 $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.decompiler.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.apkapp.odex,把他们放在$AndroidDecompile下。

 

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

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

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

 

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. 使用 dex2jarclasses.dex反编译为jar文件

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

$dex2jar.sh 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.dexapk中的其他文件重新打包成一个可用的apk

首先将反编译后的classes.dex和原先的app.apk(不含classes.dex)重新压缩成一个完整的app.apkapk文件可用压缩工具打开),也就是说将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/


四、参考资料

1. Smali

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

http://www.geeka.net/2010/05/android-apk-odex-classes-dex/

 

2. ApkTool

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

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

分享到:
评论
1 楼 Teok 2011-06-27  
Great tools collection, helps me a lot.

相关推荐

    Android反编译工具整理

    本篇文章将详细探讨三种常用的Android反编译工具:Apktool、dex2jar以及JD-GUI。 首先,Apktool是一款强大的Android资源反编译工具,由IzzySoft开发。它能够解包APK文件,提取出其中的XML布局文件、图片资源、字符...

    Android apk反编译工具整理

    本文将详细介绍Android APK反编译工具及其重要性,以及如何使用集成aapt的res反编译、dex的反编译和class的反编译等技术来揭示APK的真实结构。 首先,让我们了解什么是反编译。反编译是将已编译的二进制代码转换回...

    Android APK反编译工具集合

    6. **使用步骤**:一般包括提取APK,使用Apktool解包,使用dex2jar和JD-GUI反编译Java代码,如果需要,使用Smali/Baksmali处理.dex文件,最后可能还需使用资源反混淆工具整理资源文件。 7. **实践应用**:APK反编译...

    Android反编译工具包(整理2zgl5)含图形化教程

    "Android反编译工具包(整理2zgl5)"很可能包含一个图形化的教程,指导用户如何使用这些工具。readme.txt文件通常包含重要信息,如使用说明、注意事项和教程链接。建议仔细阅读该文件以获取更多信息。 总之,...

    Android开发人员必看【初级到高级】帮助和反编译工具【经典整理】

    Android开发市场广阔,是目前市场占有率最高的智能手机操作系统。这个文档里整理110个优质的Android开发资料,网上的...压缩包包含了最全的资料和ANdroid反编译工具! 对学习Android开发又很大的帮助! 【经典收藏】

    最新整理android反编译工具

    因个人需要,特整理了一些常用android反编译工具。smali-1.2.6.jar、jd-gui.exe、dex2jar-0.0.7.9-SNAPSHOT.zip、baksmali.jar、AXMLPrinter2.jar。

    android反编译工具

    常用的反编译工具,整理了一下,加了个批处理。 apktool1.5.2 -- 用这个反编译APK,得到主要的资源文件,xml等,当然有的apk直接改为.zip文件解压也可以看到。 自己写了批处理,修改路径和文件名就可以运行,核心...

    Android进行.APK文件反编译的经典工具

    整理收集更新了这一套用于Android安装文件apk反编译的工具套装。3个工具都是当前最新的版本了。各工具的版本:apktool-2.2.0.jar、dex2jar-2.0、dex2jar-0.0.9.15、JD-GUI 0.3.5。经过亲测可用,上传于此收仅1个资源...

    Android反编译使用工具整理

    包含下面四个压缩包: apktool1.5.2.tar.bz2 apktool-install-windows-r05-ibot.tar.bz2 dex2jar-0.0.9.15.zip jd-gui-0.3.7-RC-1.windows.zip 使用方法参考:...

    apk反编译方法

    Android学习笔记之反编译工具介绍及下载(Class文件反编译,xml文件反编译整理)  最近在网上查了一些Android文件反编译工具,供大家参考。

    Android反编译程序整理详解

    以下将详细介绍Android反编译的相关知识点和步骤。 首先,Android应用程序是通过打包成APK文件形式发布的。APK文件是一个压缩包,里面包含有DEX文件(Dalvik Executable),XML文件(资源文件),图片文件等。反...

    详解android应用程序的反编译整理.pdf

    Android应用程序的反编译是一个对开发者而言至关重要的技术,它能帮助我们理解已有的应用程序的工作原理,学习他人代码,甚至修复或改进现有应用。本文将详细介绍如何对Android APK进行反编译,以便提取和理解其内部...

    批量反编译apk

    4. **合并与重构**:反编译后的代码和资源可能需要手动整理和重构,因为原始的类名、方法名和变量名可能丢失。这一步通常需要编程技能和对Android框架的理解。 批量处理意味着上述步骤需要自动化。例如,你可以编写...

    Android反编全套工具2017.12.01

    dex2jar-2.0 + jd-gui-1.4.0 + apktool2.3.0 + Smali2Java 最新反编译全套工具整理,用以反编译android apk源码。 内含详细安装/使用说明! 本工具内jd-gui-1.4.0包含windows、linux、mac等多个版本!

    反编译工具_整合

    描述中的"走了很多弯路,很痛苦,整理mark一下,顺便分享给大家"暗示了作者在寻找和学习反编译工具的过程中遇到了挑战,但最终整理出了一套相对完整的资料,并愿意与社区共享。 在给定的压缩包文件中,唯一提到的子...

    反编译-可以直接反编译apk.rar

    标题中的"反编译-可以直接反编译apk.rar"指的是一个与Android应用(APK)反编译相关的资源包,它可能包含了用于反编译APK文件的工具和教程。"jd-gui-windows-1.4.0"是文件名,这是一个Java反编译器JD-GUI的Windows...

    Android反编译工具.rar

    免责声明:资料部分来源...收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,本人不对所涉及的版权问题或内容负法律责任。如有侵权,请举报或通知本人删除。

    整理的反编译安卓apk

    ### 安卓APK反编译详解 #### 一、引言 随着移动互联网的快速发展,安卓应用在我们的生活中扮演着越来越重要的角色。与此同时,安卓应用的安全性问题也日益凸显,其中,反编译技术成为了破解应用保护层的重要手段之...

    反编译的好动西

    4. 可能还需要对反编译出的源代码进行整理和重构,因为反编译的结果可能包含混淆的变量名和不完整的语法。 在安全领域,反编译有时用于检测恶意软件的行为,或者寻找潜在的漏洞。开发者也可能用此方法学习其他应用...

    一键反编译APK

    这种工具通常包括自动解压APK,运行dex2jar,反编译JAR,以及整理和显示源代码等功能。 至于“DecApkRelease”,这可能是一个具体的反编译工具的名称,或者是一个特定的反编译过程输出的文件夹。在实践中,"Release...

Global site tag (gtag.js) - Google Analytics