Linux系统如何反编译apk

概括

反编译APK一般会用到以下几个工具:

  1. apktool:得到apk资源文件,布局文件,AndroidManifest.xml等。
  2. dex2jar:从dex文件到jar文件。
  3. jd-gui: 打开并解析jar,得到class文件。

本篇文章记录linux系统中基于以上三个工具对apk进行反解。

apktool

下载

https://bitbucket.org/iBotPeaches/apktool/downloads/
目前最新的是2.4.0版本,建议下这个。
得到的是apktool_2.4.0.jar。

使用

反解apk命令: java -jar apktool.jar d test.apk

test@work:~/Desktop$ java -jar apktool.jar d test.apk 
I: Using Apktool 2.4.0 on test.apk
I: Loading resource table...
I: Decoding AndroidManifest.xml with resources...
S: WARNING: Could not write to (/home/test/.local/share/apktool/framework), using /tmp instead...
S: Please be aware this is a volatile directory and frameworks could go missing, please utilize --frame-path if the default storage directory is unavailable
I: Loading resource table from file: /tmp/1.apk
I: Regular manifest package...
I: Decoding file-resources...
I: Decoding values */* XMLs...
I: Baksmaling classes.dex...
I: Copying assets and libs...
I: Copying unknown files...
I: Copying original files...
I: Copying assets and libs...
I: Copying unknown files...
I: Copying original files...

得到与apk文件夹同名的如下些文件:

-rw-rw-r--   1 test test 2815 9月   6 15:11 AndroidManifest.xml
-rw-rw-r--   1 test test 8931 9月   6 15:11 apktool.yml
drwxrwxr-x   5 test test 4096 9月   6 15:11 assets
drwxrwxr-x   3 test test 4096 9月   6 15:11 original
drwxrwxr-x 142 test test 4096 9月   6 15:11 res
drwxrwxr-x  10 test test 4096 9月   6 15:11 smali
drwxrwxr-x   3 test test 4096 9月   6 15:11 unknown

apktool更多使用说明请 --help。

dex2jar

下载

https://sourceforge.net/projects/dex2jar/files/
解压: unzip dex2jar-2.0.zip

用法

  1. 将test.apk改名为test.zip,然后像平常压缩包一样解压,或者用命令:unzip test.apk。 得到classes.dex文件
  2. 命令./d2j-dex2jar.sh test/classes.dex 得到classes-dex2jar.jar文件:
    dex2jar test/classes.dex -> ./classes-dex2jar.jar

jd-gui

下载

https://github.com/java-decompiler/jd-gui/releases
目前最新的是1.6.3 。
linux系统要.jar后缀的文件,需下载jd-gui-1.6.3.jar 。

用法

  1. 打开jd-gui: java -jar jd-gui-1.6.3.jar
  2. 在jd-gui里打开classes-dex2jar.jar文件,就可以看到class文件了,和java基本一样,可以看代码,看流程。
  3. 可以另存为,保存为想原工程那样结构,只不过是class而已。

十分抱歉,我用的linux系统,截图不方便,用文字有点抽象,请自己多试试。

你可能感兴趣的:(Linux系统如何反编译apk)