反编译编译后的AndroidManifest

反编译AndroidManifest.xml是反编译APK的核心工作之一。

而且往往很多应用为了防御apktool的反编译,会采取一些防御性的手段,比如修改AndroidManifest.xml的

文件头,导致反编译出错。

结合AXMLPrinte的源码以及http://blog.csdn.net/jiangwei0910410003/article/details/50568487

自己写了针对编译后的AndroidManifest.xml的反编译代码


图片来自http://blog.csdn.net/jiangwei0910410003/article/details/50568487

<span style="font-size:14px;">class AroidManifest:
    def __init__(self, fileInfo):
        self.__fileInfo = fileInfo
        self.strTable = []
        self.namespaceMap = {}</span></span>

先自定义AndroidManifest的处理类
准备一个list保存字符串池,一个dict保存namespace的映射
fileInfo则是保存的文件信息

下面是主要的处理逻辑

<span style="font-size:14px;">        rawChunk = self.__fileInfo.getRawBinary()

        switcher = {
            0x001c0001: self.readStringChunk,
            0x00080180: self.readResourceIdChunk,
            0x00100100: self.readStartNamespaceChunk,
            0x00100101: self.readEndNamespaceChunk,
            0x00100102: self.readStratTagChunk,
            0x00100103: self.readEndTagChunk,
            0x00100104: self.readTextChunk
        }

        self.readHead(rawChunk)
        rawChunk = rawChunk[8:]

        while 1:
            if not rawChunk:
                break
            start2End = toLong(rawChunk[4:8])
            headTag = rawChunk[0:4]
            switcher.get(toLong(headTag), self.readBreak)(rawChunk)
            rawChunk = rawChunk[start2End:]</span>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值