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基本理解
  2. 新手学习linux需了解的内容
  3. Android学习系列(一)初识安卓
  4. 想抢先体验Android操作系统的魅力吗?那就使用Android(安卓)LiveCD
  5. Android牛博
  6. Android中配置和使用Google Map服务
  7. 箭头函数的基础使用
  8. NPM 和webpack 的基础使用
  9. Python list sort方法的具体使用

随机推荐

  1. android studio 已过时
  2. Android 各种自定义进度条Progressbar
  3. Android读取Txt文件
  4. Android软件更新
  5. Android实现网易新闻客户端侧滑菜单(2)
  6. Android应用程序启动过程源代码分析(4)
  7. android中读取联系人和通话记录
  8. Android资源加载过程分析
  9. android收藏
  10. SeekBar