Android逆向之旅---反编译利器Apktool和Jadx源码分析以及错误纠正

本文详细介绍了Android逆向工程中常用的Apktool和Jadx工具,包括它们在反编译过程中可能遇到的问题及解决方案。Apktool在反编译时,可能会遇到QQ和支付宝应用的资源混淆导致的错误,通过对源码的分析,修复了这两个错误。Jadx则是一款提供可视化分析的反编译工具,借助ASM库生成Java源码。通过源码分析,我们可以更好地理解和应对反编译过程中遇到的挑战。
摘要由CSDN通过智能技术生成
               

一、前言

在之前的破解过程中可以看到我们唯一离不开的一个神器那就是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

这个错误其实是在使用apktool工具的时候报的错误最多的,这个主要是利用apktool的漏洞,修改了resource.arsc的头部信息


其实网上很多解决方案都是说apktool这个工具的版本太旧了,用最新版本,但是这里可以看一下apktool.jar的版本:


这个版本是最新的了。

其实反编译失败很简单,就是这些公司他们知道了apktool这个工具反编译那么牛逼,那肯定想办法不让你反编译成功呀,所以他们也去看apktool的源码,分析得到漏洞,然后进行apk的一些混淆,防止反编译,所以说防护和破解真的是无休止的战争,但是幸好apktool的代码也是更新的比较快的,所以会解决这些漏洞,但是我们在破解的时候遇到这些问题,不能一味的等待apktool的更新,既然是开源的,那么就直接分析源码,发现报错的地方修复即可。


四、分析Apktool源码

上面说了为什么要分析apktool的源码,下面就真正的开始分析吧

当然第一步先得到apktool的源码吧,地址:https://code.google.com/p/android-apktool/

看到有google的域名是不是瞬间感觉整个人都不好了,的确国内程序猿一般打开都是始终loading的过程,直至error,所以我们只能去万能的github上search了,找到了这个地址:https://github.com/iBotPeaches/Apktool,可以看到这个有很多人关注,而且代码是有人维护和更新的,所以靠谱,clone到本地。

但是他是一个gradle项目,所以咋们就给Eclipse装一个gradle插件,然后导入项目即可,这里因为apktool是Java项目,所以还是使用Eclipse比较习惯吧。但是这里又遇到一个蛋疼的地方,还是国内网络的问题,gradle下载失败,因为这里引用了一些第三方的jar

好吧,那么我们只能无奈的手动去一个一个找这些jar包,不过在这个过程中还是比较蛋疼的,就是有些jar找的很蛋疼,不过最后还是都凑齐了,没有报错了,项目结构如下:


这里Apktools这个项目是入口的项目,也是主要功能项目类,Baksmali和Sma

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值