本篇文章主要介绍了"apktool Android逆向之旅---反编译利器Apktool和Jadx源码分析以及错误纠正",主要涉及到apktool方面的内容,对于移动开发感兴趣的同学可以参考一下:
一、前言在之前的破解过程中可以看到我们唯一离不开的一个神器那就是apktool了,这个工具多强大就不多说了,但是如果没有他我们没法涉及到后面的破解工作了,这个工...
StringChunk的头部信息包括这些内容:
header:标准的Chunk头部信息结构
stringCount:字符串的个数
styleCount:字符串样式的个数
flags:字符串的属性,可取值包括0x000(UTF-16),0x001(字符串经过排序)、0X100(UTF-8)和他们的组合值
stringStart:字符串内容块相对于其头部的距离
stylesStart:字符串样式块相对于其头部的距离
其中header是一个标准的Chunk头部信息:
type:是当前这个chunk的类型(两个字节)
headerSize:是当前这个chunk的头部大小(两个字节)
size:是当前这个chunk的大小(四个字节)
就是八个字节。
我们继续分析错误代码:

这里会检查已给Chunk结构的完整性,出入的StringPool值是:

看到了,这里是字符串常量池Chunk的头部信息,而且值是固定的:0x001C0001
在进入看看代码:

这里如果发现格式不正确就抛出一个异常,也就是格式不是0x001C0001的话。
那么问题差不多清楚了,这里崩溃的原因很可能是支付宝应用的resource.arsc的StringPool的Chunk的头部信息被混淆了,导致这个错误的,我们通过上面的分析知道,StringPool这个Chunk的头部标准格式是:0x001C0001,我们来看看支付宝应用的resource.arsc文件的二进制数据:

发现了,有这个值,那么为何还报错呢?到这里我们或许不知道该怎么办了,其实很简单,我们再去弄一个能够反编译的apk的resource.arsc文件看看:

擦,发现果然不一样,支付宝头部信息多了8个字节,0x000001000,那么我们再看上面的检查Chunk头部类型数据的代码: