反编译 的时候报错误 java.io.IOException: Expected: 0x00080003, got: 0x00080009b
使用010工具加上AndroidManifest.xml模板,加载后直接按F5运行解除来

搜索09 00 08 00 然后修改成 03 00 08 00,然后把AndroidManifest.xml 塞进apk重新反编译还是会报错
java.io.EOFException
I: Decoding AndroidManifest.xml with resources...
Exception in thread "main" brut.androlib.AndrolibException: Could not decode XML
at brut.androlib.res.decoder.XmlPullStreamDecoder.decode(XmlPullStreamDecoder.java:136)
...
at brut.apktool.Main.main(Main.java:77)
Caused by: java.io.EOFException
at java.io.DataInputStream.readFully(DataInputStream.java:197)
...
at brut.androlib.res.decoder.XmlPullStreamDecoder.decode(XmlPullStreamDecoder.java:129)
... 7 more
这个问题困扰了一两天。在各种群里问也没有人回答,所以只能自己找线索。
因此下载了AXMLparser的源码加日志打印后发现,正常的AndroidManifest文件读取到某个字段
结束就会停止,而报错的文件会一直执行到文件末尾然后报错。所以猜测可能是哪里的偏移值写多了或者是
故意写错。
还好看雪上的大牛们对文件格式已经进行了详尽的分析和绘图。主要参考的是该链接对AndroidManifest
文件格式分析的内容,对比010editor里的实际数据进行分析。文章中提到scStylePoolOffset字段在很多apk
中都是0,并且作用不明,加上自己打印日志产生的猜想,把这一字段设置成和其它apk一样的0:

修改后再次反编译apk,发现AndroidManifest文件不报错了,可以正常执行反编译。【猜对了^^】
网友评论