Android apk反编译工具介绍

首先apk不能被代码混淆(或未经编译优化),如果混淆了,反编译出来的代号还是看不懂,
当然,在你没反编译出来之前,你也不知道有没有混淆。

网上各种反编译工具,眼花缭乱,本文是个人对这些工作做的一个简单的梳理。
最靠谱也是最原始的方法就是用下面的三个工具:apktool + dex2jar + jd-gui
其他的工具大部分都是衍生自这三个工具,或者说对这三个工具的包装。

apktool
It is a tool for reverse engineering 3rd party, closed, binary Android apps. It can decode resources to nearly original form
and rebuild them after making some modifications; it makes possible to debug smali code step by step.
Also it makes working with app easier because of project-like files structure
and automation of some repetitive tasks like building apk, etc.
反编译apk,输出资源文件和源码的smali文件:

用法:D:\apktool.bat F:\workspace\tmp\test.apk F:workspace\tmp\out

dex2jar
http://code.google.com/p/dex2jar/ //官方功能介绍

dex2jar contains following compment

  1. dex-readeris designed to read theDalvik Executable (.dex/.odex) format. It has a light weight API similar withASM.An example here
  2. dex-translatoris designed to do the convert job. It reads the dex instruction to dex-ir format, after some optimize, convert to ASM format.
  3. dex-irused by dex-translator, is designed to represent the dex instruction
  4. dex-toolstools to work with .class files. here are examples:
  5. d2j-smali[To be published]disassemble dex to smali files and assemble dex from smali files. different implementation to smali/baksmali, same syntax, but we support escape in type desc "Lcom/dex2jar\t\u1234;"
  6. dex-writer[To be published]write dex same way as dex-reader.

到官网下载最新的版本,直接反编译apk,apk文件名不能包含中文名称,新版本的aex2jar不用把apk换成zip解压了,直接反编译:
生产jar,然后用jd打开这个文件,在jd中可以查看代码,也可以导出为java文件
使用 dex2jar 来生成 .jar 文件. dex2jar会在someApk.apk所在目录下生成一个someApk_dex2jar.jar文件.
用法:
linux sh /home/dex2jar-version/dex2jar.sh /home/someApk.apk
windows C:\dex2jar-version\dex2jar.bat someApk.apk
注意:dex2jar只能生成jar文件,无法生成资源文件

Levin:apktool和dex2jar都能生成smali代码,两者有何异同?个人认为,两者都是将.dex文件即DalvikExecutable文件
反编译成smali代码,不同的是,apktool输出的是一个一个.smali代码文件,这种单个的.smali代码文件,
jd-gui打不开(我还没找到什么工具能打开),而dex2jar生成的为打包成*.jar格式的smali源码包,
这种jar格式的smali源码包,可以通过jd-gui转换为java代码。

jd-gui
http://jd.benow.ca/ //官方功能介绍、官方下载
Java Decompiler graphical UI
JD-GUI is a standalone graphical utility that displays Java source codes of “.class” files.
You can browse the reconstructed source code with the JD-GUI for instant access to methods and fields.

前文说过,其他的工具大部分都是衍生自这三个工具,或者说对这三个工具的包装,你可以看到其安装目录下有apktool等工具
下面对这些工具做个罗列,和本人的使用心得:
APKMultiTool:国外团队开发,Console交互界面,用来反编译apk,修改,并重新签名打包。只能反编译出资源文件,不能反编译出java代码
ApkDec: android开发社区www.juapk.com开发,图形界面,可以反编译出资源文件盒smali的jar包,
目前只有ApkDec-Release-0.1,win32版本,无法在64为机器上运行。找官方团队索要,无果。
Dodo APKTools:国产,只能反编译出一个一个的smali文件
Smali2Java:国产,这款反编译软件比较牛逼,能过将smali文件高保真还原成java文件。比jd-gui更上一层楼
http://www.hensence.com/cn/smali2java/ //官方功能介绍、官方下载
smali2java是一个将smali代码反编译成java代码的工具。
什么是smali?smali是将Android字节码用可阅读的字符串形式表现出来的一种语言,可以称之为Android字节码的反汇编语言。使用baksmali或apktool可以将Android应用程序包(apk或jar)反编译为smali代码。
Levin:jd-gui可以反编译smali代码,说明smali代码,类似于.class代码。
smali2java的反编译过程是:dex字节码-->smali代码-->java代码
smali2java工具基于apktool v1.5.0(baksmali v1.3.4)生成的smali文件,依赖于smali文件中的代码行数(.line关键字)和变量别名(.local关键字)等信息,可以最大程度还原原始的java代码。还原出的java代码将具有原始的变量命名,代码的顺序也与原始的java代码保持一致。因此,本工具也具有局限性,仅适用于带有行数和变量别名信息的smali文件(java编译器的编译选项可以在生成的字节码中剔除这些信息)。

总结:如果你即想反编译出资源,又想反编译出java源码,本人推荐如下最优方式(省时省力,效果好):
step1:使用apktool,反编译出所有的资源文件
step2:使用Smali2Java反编译出高保真的java代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
反编译工具包 下载后的操作步骤 Android APK反编译 未做测试全是最新工具包,另附已经做过测试的工具包,部分是旧工具,自己可替换 http://download.csdn.net/detail/haoqinghua/5500751 一、Apk反编译得到Java源代码 下载反编译工具包,打开apk2java目录下的dex2jar-0.0.9.9文件夹,内含apk反编译java源码工具,以及源码查看工具。 dex2jar:apk反编译工具 ,是将apk中的classes.dex转化成jar文件 jdgui:源码查看工具,是一个反编译工具,可以直接查看反编译后的jar包源代码 具体步骤: 首先将apk文件后缀改为zip并解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的,将classes.dex复制到dex2jar.bat所在目录dex2jar-0.0.9.9文件夹。 在命令行下定位到dex2jar.bat所在目录,运行 dex2jar.bat classes.dex 生成 classes_dex2jar.jar 然后,进入jdgui文件夹双击jd-gui.exe,打开上面生成的jar包classes_dex2jar.jar,即可看到源代码 二、apk反编译生成程序的源代码和图片、XML配置、语言资源等文件 如果是汉化软件,这将特别有用 首先还是要下载此反编译工具包,其中包含最新的apktool 1.5 具体步骤: 下载反编译工具包,打开apk2java目录下的apktool1.4.1文件夹,内含三个文件:aapt.exe,apktool.bat,apktool.jar 注:里面的apktool_bk.jar是备份的老版本,最好用最新的apktool.jar 在命令行下定位到apktool.bat文件夹,输入以下命令:apktool.bat d -f abc123.apk abc123, apktool.bat 命令行解释:apktool.bat d -f [apk文件 ] [输出文件夹] 反编译的文件如下(AndroidManifest.xml为例): 将反编译完的文件重新打包成apk,很简单,输入apktool.bat b abc123(你编译出来文件夹)即可,命令如下: 打包apk后的文件在目录C:\HelloAndroid下,生成了两个文件夹: build dist 三、 图形化反编译apk 上述步骤一、二讲述了命令行反编译apk,现在提供一种图形化反编译工具Androidfby 首先,下载上述反编译工具包,打开Androidfby目录,双击Android反编译工具.exe,就可以浏览打开要反编译apk
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值