安卓Apk反编译学习

一、工具准备

1.apktool

     ApkTool下载地址:https://ibotpeaches.github.io/Apktool/install/,*找到Installation for Apktool下载到apktool.bat(图1中Windows wrapper script)和apktoolx.x.x.jar(Windows下的find newest here)文件,改名为apktool.bat和apktool.jar。

安卓Apk反编译学习

       图1  apktool下载


        Apktool主要完成apk文件的打包和拆解(即build和decode,对应指令后的b和d),得到资源、smali(smali语言大概是davlik虚拟机的机器语言,未作深究)代码等各种文件。反编译指令为apktool d xxx.apk,而重新打包使用apktool b xxx(目录地址)。得到的文件默认放在同目录下,也可在命令中指定,具体命令如图2:

安卓Apk反编译学习

          图2  apktool参数

     

2.dex2jar

      这个就简单了,用来将apk中的classes.dex文件(直接解压提取)转成jar查看,官网下载后把classex.dex放入目录下,执行dex2jar.bat classes.dex命令,即可得到对应的jar文件。

3.jd-gui

    即Java-decompiler,查看jar中的class代码。打开上一步得到的jar文件即可。

4.smali2java

    最为方便的工具,可以直接打开apk查看代码,也可以打开单个smali文件转成Java。不过也只能查看代码,而不能查看其他文件。


二、反编译Java代码

1.使用smali2java直接打开apk


2.使用dex2jar和jd-gui

    解压apk提取classes.dex  ->  使用“dex2jar.bat classes.dex”将其转成jar文件  ->  使用jd-gui查看Java代码。


三、反编译资源文件等

    使用apktool解码apk得到的文件夹如下图3,其中res文件夹下存放layout、drawable、values等资源。

安卓Apk反编译学习

   图3  apktool解码文件

四、回编译
    修改文件后重新打包,使用apktool b xxx命令。