关于apktool反编译失败的解决方案


问题 

    这两天突然有了做个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进行格式转换,局部如下:

    ...

    额...这个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.反编译成功,完美!


    


你可能感兴趣的:(Android)