Android是使用Java语言进行编程的。但是,由于其使用了自己的Dalvik虚拟机,所以Android的指令集使用的是Dalvik,且可执行文件格式也是使用的专有的DEX格式。

这样的话,如果想反编译Android的程序,就需要专门的反编译工具软件。

但是,其实Android在编译的时候,其实是先使用Java的工具链,然后在用自己提供的dx程序,将编译好的Java程序,抓换成专属的DEX文件。

如果有一个工具可以将DEX文件反转成一个Java程序文件,就可以利用现有非常成熟的Java反编译工具。

最早实现这个想法的是一个叫dex2jar的工具,也被大家广泛的使用。

不过,最近Google自己写了一个类似的工具,名叫enjarify。该工具是使用Python语言编写的,代码位于:https://github.com/google/enjarify/。

由于全是用Python语言写的,所以安装起来非常简单,直接用git将代码克隆到本地目录下就好了:

git clone https://github.com/google/enjarify.git

如果机器上没安装git,还可以点击“Download ZIP”,直接把当前的代码打包成一个zip文件下载下来。如果你没有办法访问github,可以从这里获得包含源码的zip文件。

由于enjarify使用Python 3的语法编写,所以请确保你的机器上有一个3.x版本的Python环境。

剩下的事情就很简单了,运行enjarify.sh(Linux或MAC下)或者enjarify.bat(Windows下),后面接上要转换的那个apk路径名作为参数就可以了:

enjarify yourapp.apk

当然,也可以直接转换apk里面的dex文件:

enjarify class.dex

如果你是在Linux系统下使用enjarify的话,可以在/usr/local/bin目录下,建立一个指向enjarify.sh的软链接:

ln -s "$PWD/enjarify.sh" /usr/local/bin/enjarify

由于在enjarify.sh脚本中使用到了realpath命令,所以如果在执行的过程中报错说找不到这个命令的话,还要事先安装一下。在Ubuntu下可以通过下面的命令:

sudo apt-get install realpath

经过试用,笔者发现这个工具完全可以替代dex2jar,而且转换的效果要比dex2jar好的多,错误也要少很多。

更多相关文章

  1. Android应用程序线程消息循环模型分析(1)
  2. 在 Android 中调用二进制可执行程序(native executable )
  3. android 中处理崩溃异常并重启程序
  4. android 内部文件读取
  5. Android应用程序内部启动Activity过程(startActivity)的源代码分析

随机推荐

  1. Android修改自定义Dialog的大小
  2. Android(安卓)几个常见异常且容易被忽略
  3. Android(安卓)Surface 介绍
  4. Android(安卓)Wifi移植他贴收集
  5. android 链式模式 责任链
  6. Android(安卓)随笔
  7. 【笔记】Android开发中从EditText中获取
  8. android memory
  9. Android(安卓)判断手机的Rom类型
  10. Android(安卓)获取播放视频的相关 内容,