本篇文章主要介绍了"apktool Android逆向之旅---反编译利器Apktool和Jadx源码分析以及错误纠正",主要涉及到apktool方面的内容,对于移动开发感兴趣的同学可以参考一下:
一、前言在之前的破解过程中可以看到我们唯一离不开的一个神器那就是apktool了,这个工具多强大就不多说了,但是如果没有他我们没法涉及到后面的破解工作了,这个工...
Baksmali依赖于:SmaliUtil
BrutDir依赖于:BrutCommon,BrutUtil
BrutUtil依赖于:BrutCommon
Smali依赖于:SmaliUtil
Apktool依赖于:Baksmali,BrutCommon,BrutDir,BrutUtil,Smali
这里直接来看看主要功能Apktools项目
第一、分析Apktool的反编译源码
首先我们知道,Java项目的入口方法肯定是main方法,搜一下找到这个Main类:

这个方法中得到参数,然后进行参数的分析和组装。继续往下看,看执行代码:

这里看到了我们经常用的一些命令参数,他们的含义这里也都可以了解到了,有一个ApkDecoder类,是反编译的核心类:

最终也是调用他的decode方法:

这里看到使用了Androlib这个核心类来做了一些操作,首先会判断需不需要解析资源文件,即arsc格式的,这里又细分了解析resource.arsc和AndroidManifest.xml这两个文件的解析,下面继续看:

这里会解析dex文件,得到smali源码,而且区分了多个dex的情况。
其实到这里我们可以发现,apktool在反编译的整个过程中核心点就三个:
解析resource.arsc文件,AndroidManifest.xml文件,dex文件
那么关于这三个文件的格式解析,一定请看这篇文章:Android中解析所有文件格式
如果看了这篇文章之后,会发现Android中的这三个文件都有各自的格式,解析也是很简单的。所以这里就不在详细介绍了具体的解析步骤了,但是这三个文件分别对应的三个经典格式图必须展示一下:
AndroidManifest.xml文件格式图:

Resource.arsc文件格式图: