最近有一个同事需要去实现android某个功能,自己实现起来感觉到很困难,就看到别人软件实现了此功能。就反编译学了人家的实现方法,让我一下感慨万千,那以后学习和开发项目将方便很多。结合mac系统整理一下反编译android apk的过程。
一 测试环境 Mac osx 10.8.3 macbook pro
二 所需软件
apktool ,主要将apk中的xml文件、图片、语言资源文件等反编译成原状态。
dex2jar,主要将apk反编译成jar包文件。
jdgui,把jar包文件转化成可读写的.java 源文件。
三、配置MAC下的环境变量
为了使软件能在终端命令行下面直接运行,就需要配置他们的环境变量,mac环境变量配置如下:
1、打开终端 2、输入 cd ~ 进入~文件夹 3、输入 touch .bash_profile 回车 4、输入open -e .bash_profile 在TextEdit中打开这个文件
图 1 进入配置文件操作
四、反编译过程
1、apktool 可以用来反编译apk文件,解析出可读的xml文件,同时还可以用来修改xml中的文件进行汉化。下载apktool后通常有:aapt.exe,apktool.bat,apktool.jar 三个文件,假设我的apk文件位于/Users/house/Downloads/eoecn.apk下 ,输入以下命令:apktool d /Users/house/Downloads/eoecn.apk /Users/house/Downloads/test/,如下图
反编译后的效果
2、上面只是把xml源文件转换为可读,源代码文件位于smali文件夹下,所有原文件以smli文件后缀,还不是我们可读的文件。下面要用 dex2jar把apk文件反编译成jar文件,假设我的apk文件解压缩后的dex文件位于/Users/house/Downloads/eoecn/classes.dex下 ,输入以下命令:d2j-dex2jar.sh /Users/house/Downloads/eoecn/classes.dex /Users/house/Downloads/
这样就把dex文件解压成相应的jar文件
3、打开 jdgui程序,打开上面生成的jar包classes-dex2jar.jar,即可看到源代码了
java decompliler 这个工具非常强大不经支持多操作系统,还提供eclipse插件以及intellij插件,通过IDE工具直接查看class文件中 的源代码。
以上是apk 反编译的过程,这些小工具所提供的功能并不紧紧这些,还有非常强大的诸如文件签名,jar包验证等功能。