安卓应用反编译(二)-APK包反编译

第2节 APK包反编译

被编译器处理过的代码和资源已经打包成了APK,有的甚至被转化成了二进制文件。但是我们也有一些方法,把这些编译过的内容给变回原来的样子,这个过程叫做-反编译。

反编译分为两个部分:一个是资源文件,一个是java文件。so文件是c++编译的结果,可以认为是不可反编译的(反编译成汇编指令,估计大部分人也看不懂)。

2.1 反编译资源文件

APK tool是反编译的有力工具,据说是谷歌提供的官方的反编译工具,可以把APK目录解包,资源文件全部还原成编译前的样子,而dex文件反编译成smail格式的文件(而不是我们希望的java原文件)。smail格式文件是安卓系统的虚拟机执行时使用的语法,我们不会去讲解这部分内容。

2.1.1 工具准备

  1. APK tool的官网下载APKTool的最新版本;

  2. 在官网下载与APKTool配套的脚本文件-apktool.bat,其内容如下;

    @echo off
    if "%PATH_BASE%" == "" set PATH_BASE=%PATH%
    set PATH=%CD%;%PATH_BASE%;
    java -jar -Duser.language=en "%~dp0\apktool.jar" %1 %2 %3 %4 %5 %6 %7 %8 %9
  3. 将下载的jar包重命名为APKTool.jar,与脚本文件一起放到你希望存放的目录下,例如D:\Work\apktool;

如果无法访问官网下载,请上安豆网,下载最新的版本。

2.1.2 反编译资源

接下来开始使用APKTool,

  1. 启动cmd命令行窗口,进入apktool目录;
  2. 输入apktool d D:\Test.apk,开始反编译Test.apkapktool d后面需要跟上要反编译的APK文件路径;

    $ apktool d D:\Test.apk
    I: Using Apktool 2.0.3 on Test.apk 
    I: Loading resource table... 
    I: Decoding AndroidManifest.xml with resources... 
    I: Loading resource table from file: C:\Users\Gym\apktool\framework\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... 
  3. 编译的结果就在cmd命令行窗口启动的位置下,反编译的目录结构如下,

现在打开res目录下的资源都被还原了,打开后就能看到原始的设计;而java源码被反编译成了smali格式的文件。

2.2 反编译java源代码

要查看java源码,有三个方式:

  1. 把dex文件转换成smail文件,然后用专门的工具将smail翻译成java;
  2. 把dex文件转换成java的通用编译格式class文件,然后用专门的工具将class翻译成java;
  3. 把dex文件转换成jar文件,然后用专门的工具将jar翻译成java;

这里我们采用第三种方法。

2.2.1 工具准备

首先准备反编译用的工具。

  1. 在官网下载dex2jar工具,它可以把APK中的dex文件转化成jar文件;
  2. 下载完成后,将压缩包解压,放到你希望存放的目录下,例如D:\Work\dex2jar;

  3. 在官网下载JD-GUI,它可以查看jar文件的java源码;

  4. 下载完成后,将压缩包解压,放到你希望存放的目录下,例如D:\Work\jd-gui;

至此,java源码的反编译工具就安装并设置完成了。
如果无法访问官网下载,请上安豆网下载,那里将这几个工具整体打包,方便大家使用。

2.2.2 反编译代码

接下来开始使用反编译工具,

  1. APK文件后缀名改为zip,解压,找到Android软件安装包中的class.dex

  2. 用dex2jar工具将classes.dex生成jar文件;启动cmd命令行窗口,输入d2j-dex2jar D:\classes.dex,开始反编译classes.dexd2j-dex2jar后面需要跟上要反编译的dex文件路径;

    $ d2j-dex2jar D:\classes.dex
    dex2jar classes.dex -> .\classes-dex2jar.jar

    结果生成了classes-dex2jar.jar文件;

  3. 进入JD-GUI目录,运行JD-GUI工具,打开上面的生成的jar文件,即可看到java源代码。


/*******************************************************************/
* 版权声明
* 本教程只在CSDN安豆网发布,其他网站出现本教程均属侵权。

*另外,我们还推出了Arduino智能硬件相关的教程,您可以在我们的网店跟我学Arduino编程中购买相关硬件。同时也感谢大家对我们这些码农的支持。

*最后再次感谢各位读者对安豆的支持,谢谢:)
/*******************************************************************/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值