本篇文章主要介绍了"apktool Android逆向之旅---反编译利器Apktool和Jadx源码分析以及错误纠正",主要涉及到apktool方面的内容,对于移动开发感兴趣的同学可以参考一下:
一、前言在之前的破解过程中可以看到我们唯一离不开的一个神器那就是apktool了,这个工具多强大就不多说了,但是如果没有他我们没法涉及到后面的破解工作了,这个工...
一、前言
在之前的破解过程中可以看到我们唯一离不开的一个神器那就是apktool了,这个工具多强大就不多说了,但是如果没有他我们没法涉及到后面的破解工作了,这个工具是开源的,也是使用Java语言开发的,代码相对简单,我们今天就来分析一下他的大体逻辑,注意是大体逻辑哦,因为如果要一行一行代码分析,首先觉得没必要,其次浪费时间,有了源码,谁看不懂呢。至于为什么要分析这个工具其实原因只有一个,就是我们在之前的反编译过程中会发现,总是有那么几个apk应用不让我们那么容易的反编译,他们就利用apktool的漏洞,对apk做了一定的混淆工作,所以我们需要通过分析源码来解决这些异常错误,从而能够对每个apk反编译都是如鱼得水。
二、破解的国际惯例
其实在之前的破解文章中,我们在拿到一个apk进行破解之前,都会干这两件事:
第一件事:用压缩软件解压apk,得到classes.dex,然后使用dex2jar+jd-gui工具查看代码逻辑
但是这里我们会发现如果想看资源文件比如AndroidManifest.xml和res下面的一下xml文件都是乱码的,因为他们是遵循Android中的arsc文件格式,关于这个格式不了解的同学可以网上搜一下,但是关于这个文件格式我在之前的几篇文章中做了格式解析:
Android中如何解析资源文件样式 其实不管是什么文件格式,都是有文件格式的说明文档的,只要按照这个说明文章去做解析即可
第二件事:使用apktool工具进行反编译apk,得到smali源码和资源文件
这里得到的是smali源码,破解了这么长时间,smali语法就不做太多的介绍了,他就是Android虚拟机识别执行的指令代码,他和dex文件可以互相转化的,使用baksmali.jar和smali.jar这两个工具即可,后面会详细说到,当然这里还可以得到所有的资源文件,即arsc格式解析之后的内容,而且这个工具可以实现回编译,这个功能也是很强大的,不过后面分析源码就知道了,回编译其实是借助aapt这个强大的系统命令来完成的。
所以这里我们可以看到最终如果我们想要完全的分析一个apk,apktool工具是不可或缺的,他是开启破解大门的钥匙,这个工具也是在逆向领域敲门砖,而且现在很多比较可视化的破解工具,比如:apk改之理,jeb,gda等,其实这些工具核心都是使用apktool+dex2jar+jd-gui这三个工作组成的,只是后期做了一定的界面优化而已。
三、Apktool工具反编译常见的问题
上面说了apktool工具的地位和作用,下面我们再来看一下apktool工具在反编译的过程中会遇到哪些问题呢?
这里我们只看BAT这三家公司的app,我们在反编译的过程中发现了QQ和支付宝分别报了这两个错误:
1、QQ报了这个错误:
Exception in thread "main" brut.androlib.AndrolibException: Multiple res specs: attr/name
这个主要是因为QQ利用了apktool的一个漏洞,做了属性id的混淆

2、支付宝报了这个错误:
Exception in thread "main" brut.androlib.AndrolibException: Could not decode arsc file