9.5.3 Android Apk 反编译 & 9.5.

作者: 凌川江雪 | 来源:发表于2018-08-12 22:49 被阅读91次

    Android的应用程序Apk文件是一个压缩文件,可以通过解压获得里面的文件内容。我们找来一个Apk文件(这里用的是app-release.apk),然后使用普通解压工具(如WinRAR、360解压等)直接解压app-release.apk,可以得到文件夹app-release,工作目录如下:

    进入文件夹app-release,目录如下,可以看到许多熟悉的东西:

    但是你会发现资源文件等xml文件基本无法打开,即使能打开也是如下图的乱码,这些乱码就是Android加密过的文件:

    既然直接解压Apk文件是无法获得正常的应用程序,那么来看看如何使用正确的方法反编译应用程序。
    首先请出三个重量级的工具,如下:


    这三个工具分别负责反编译不同的部分。

    9.5.3.1 apktool

    首先来反编译apk中的XML文件,利用apktool_2.3.3.jar。进入工具目录,执行命令:

    java -jar apktool_2.3.3.jar d -f app-release.apk 
    

    得到输出文件:


    这时候打开res中的xml文件:

    此时可以正确地查看这些XML文件而不是之前的乱码了。这个工具在汉化软件的时候非常有用,可以提取资源文件并进行汉化,然后执行如下命令重新打包回去即可:

    java -jar apktool_2.3.3.jar b app-release
    

    重新打包的命令与解码的命令相似,只是将d改为b,并选择前面解码生成的文件夹。执行该命令后,在文件夹下就会生成两个新的文件夹,如下图所示dist和build文件夹,重新打包的APK就在dist目录下:

    下一步,解决Source Code。

    9.5.3.2 Dex2jar、jd-gui

    先回到最开始用解压缩工具解压apk后的那个文件夹,文件夹中有一个非常重要的文件,如下图的dex文件:


    这个文件就是源代码打包后的文件,将它复制到dex2jar-0.0.9.15的根目录下,然后进入dex2jar-0.0.9.15的目录并执行下面第二张图的代码:
    d2j-apk-sign.bat classes.dex
    

    cmd上会开始分析,分析完毕后,在dex2jar-0.0.9.15的目录目录下生成了一个jar文件:

    到这里,打开jd-gui,选择file-open file,并选择刚刚生成的classes-dex2jar.jar文件,即可查看相关源代码:



    总结思路:
    使用apktool将apk反编译成文件夹,
    再重新打包生成build和dist目录以及相关文件(包括classes.dex),
    使用Dex2jar将classes.dex分析生成jar文件,
    对jar文件使用jd-gui即可查看相关的源代码。

    9.5.4 Android Apk 加密

    由于Java字节码的特殊性,使得它非常容易被反编译。因此,为了能够对编译好的Java Class文件进行一些保护,通常会使用ProGuard来对Apk进行混淆处理,用无意义的字母来重命名类、字段、方法和属性。当然,ProGuard不仅仅可以用来混淆代码,还可以删除无用的类、字段、方法和属性,以及删除没用的注释,最大限度地优化字节码文件。


    在Android Studio中,打开app目录下的build.gradle文件:


    **这里的minifyEnabled属性就是控制ProGuard的开关,将即设置为true,即可开启混淆功能,在使用AS导出apk时,即可生成混淆。

    相关文章

      网友评论

      • Aldrich_N:dex2jar反编译后的jar包,打开全都是混淆过的文件
        凌川江雪:@Aldrich_N 本文方法适用于开源的apk,非开源apk在导出的时候肯定会层层加密的噢

      本文标题:9.5.3 Android Apk 反编译 & 9.5.

      本文链接:https://www.haomeiwen.com/subject/nnlrbftx.html