您的位置:首页 > 移动开发 > Android开发

反编译APK工具及步骤

2017-05-12 09:01 351 查看

前言

学习Android的时候,通过阅读优秀的源码可以使我们的编程水平得到极大的提高。同时,在平时需要实现某些界面或者功能时而又无从下手时,通过阅读相关的源码可以给我们灵感和启发。

源码的获取一方面可以通过Github上的各种开源库获取。另外一种办法就是反编译APK了。我们知道,Android APK是由Android源代码,布局文件,配置文件,资源文件等打包而成的。那么我们可不可以由APK反编译成源代码和布局文件等呢?答案是肯定的。不过反编译出来的文件和原始文件还是有一定区别。那就是有可能由于原作者在生成APK时对代码进行了混淆,导致我们反编译生成的代码函数名,方法名,类名等变成了没有意义的字符,不能很好的反应其功能。不过相信只要你认真看,还是可以理解作者的思路的。

(注:apk反编译应仅用于学习之用,抄袭并不可取)

本篇文章主要讲解了反编译APK所需要的工具及基本操作步骤。我的操作环境为windows10,示例的APK为mobileqq_android.apk(腾讯QQ)

APK文件内容解析

首先,我们下载QQ的apk文件,并将其后缀该为.zip,并解压(ps:apk文件实际就是zip格式的文件),得到的目录为



我们来分析下其组成

assets:原始资源

com:源代码

lib:库文件

META-INF:清单文件,描述apk的内容信息

R:资源文件,对应android工程的res文件

AndroidManifest:配置文件

.dex文件:android虚拟机的文件

如果这时候我们尝试去查看解压出来的文件内容,会发现全部是乱码,这是因为我们只是解压了文件,并没有反编译的原因。所以只是解压是不行的,我们这里先把解压的文件删掉,并把原来的apk文件后缀改回来。

反编译工具

要反编译apk,需要下面的工具

apktool:一个google开发的可以解压和打包apk的工具

dex2jar:一个把dex文件转换成jar包的工具,我们知道dex是android虚拟机的执行文件,而我们平时编写的java程序是编译成class文件,这里用这个工具进行转换

jd-gui:全称Java Decompiler project,一个java反编译工具和阅读器,我们通过这个工具可以反编译和阅读dex2jar转换出来的class文件。

基本操作

首先,apktool的具体使用说明可以查看这里

为了能够在windows上运行apktool工具,我们需要创建一个批处理文件,具体操作就是把下面的一小段代码复制到txt文件里,然后改名为apktool.bat

代码:

@echo off

if “%PATH_BASE%” == “” set PATH_BASE=%PATH%

set PATH=%CD%;%PATH_BASE%;

java -jar -Duser.language=en “%~dp0\apktool.jar” %*

让这个批处理文件和apktool文件放在同个目录下。(注意,如果下载的apktool jar包名不是apktool,需要改为apktool)

接下来在命令行下执行

apktool d mobileqq_android.apk

如果没有错误的话,会在同目录下生成一个mobileqq_android文件。我们打开看看里面的内容。



这个时候可以发现已经和直接解压出来的文件不一样了,这个时候res文件夹里面的文件已经不是乱码了,但是我们看看存在一些smali_classes*文件,这些文件对应的是之前的.dex文件,如果把.dex文件比作.bin文件的话,smail文件就相当于汇编文件。

接下来,我们要使用dex2jar工具将apk中的.dex文件转换成class文件。具体操作查看这里

首先把dex2jar解压出来,然后在命令行中输入

d2j_dex2jar mobileqq_android.apk

这时候就会生成mobileqq_android.jar包,里面就是class文件。

最后我们就需要用jd-gui工具来查看了,由于我是windows系统,所以就下载windows版本的。

解压jd-gui-windows-1.4.0,然后打开里面的jd-gui程序,再把我们生成的mobileqq_android.jar导入,就大工告成!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息