问题
这两天突然有了做个App的想法,拿了一个apk用apktool来反编译,发现这个apk是被加固的,apk在反编译时会报错,错误提示如下:
W: 无法反编译 attr 值, 使用未反编译的 value 而不是: ns=android, name=qihoo, value=0x00000030
而且查看反编译的文件夹,里面只躺了一个AndroidManifest.xml。What?我的res呢?我的lib呢?
AndroidManifest.xml作为apk的入口,肯定是这块出了问题。果不其然,利用AXMLPrinter2.jar对AndroidManifest.xml进行格式转换,局部如下:
<application
...
android:qihoo="activity"
>
...
</application>
额...这个android:qihoo="activity"啥东西。通过各种搜索发现这种加密是利用Android在运行apk时不会对没有用的标签属性进行解析。但apktool在反编译时会对每个标签属性进行解析,所以就会报出上面的错误。
解决方案
1.用AXMLPrinter2.jar对 AndroidManifest.xml进行格式转换;
java -jar AXMLPrinter2.jar AndroidManifest.xml > AndroidManifest2.xml
2.修改下面所列的四个地方:
- 删除application标签下的android:qihoo属性,总大小为1*5*4bytes提交
- 修改XmlContent chunk 中 application start tag chunk的Attribute count 减去1
- 修改application start tag chunk的chunk size 减去0x14
- 修改整个xml的file size 减去0x14
3.保存,将修改的文件放入apk文件夹中;
4.反编译成功,完美!