关于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进行格式转换,局部如下:
<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.反编译成功,完美!


    


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值