Android逆向之旅--基于python解析编译之后的AndroidManifest.xml文件格式

这篇博客探讨了如何使用Python来解析和重构编译过的AndroidManifest.xml文件,使其恢复为可读格式。
摘要由CSDN通过智能技术生成

 本文通过python解析编译过的AndroidManifext.xml文件格式,还原其可阅读的格式。

# -*- coding:utf-8 -*-
__author__ = "教科书般的男人"
import os

xmldr = { }
stringContentList = []
xmlsb =[ ]
uri2prefix = {}
prefix2uri = {}


def filterStringNull(data):
    if data == None or len(data)==0:
        return data
    temp = []
    for i in data:
        if i != "00":
            temp.append(i)
    str = [chr(int(i, 16)) for i in temp]
    return "".join(str)


def parse_xml(filename):
    f = open(filename, "rb")
    print
    # 解析xml文件的头部,获取Magic Nubmber和File Size
    xmlident = f.read()
    xml_content = [i for i in xmlident]
    xml_content_16 = [hex(ord(i))[2:].zfill(2) for i in xml_content]
    header = [hex(ord(i))[2:].zfill(2) for i in xmlident[0:8]]
    magic_number = header[:4][::-1]
    xml_size = header[4:8][::-1]
    xmldr['magic_number'] = magic_number
    xmldr['xml_size'] = xml_size
    print "Parse XML Header-----------"
    print "magic number:" + str(magic_number[0]) + " " + str(magic_number[1]) + " " + str(magic_number[2]) + " " + str(magic_number[3])
    print "xml size:" + str(xml_size[0]) + " " + str(xml_size[1]) + " " + str(xml_size[2]) + " " + str(xml_size[3])
    xmlsb.append("<?xml version=\'1.0\'encoding=\'utf-8\'?> ")
    xmlsb.append("\n")
    # 解析StringChunk信息
    print "--------Parse String Chunk-----------"
    ChunkType = xml_content_16[8:12][::-1]
    print "string chunktag:" + str(ChunkType[0]) + " " + str(ChunkType[1]) + " " + str(ChunkType[2]) + " " + str(ChunkType[3])
    Chunk_size_str = xml_content_16[12:16][::-1]
    Chunk_size = "".join(Chunk_size_str)
    print "Chunk_size:" + str(int(Chunk_size, 16))
    String_Count_str = xml_content_16[16:20][::-1]
    String_Count = "".join(String_Count_str)
    print "Count:" + str(int(String_Count, 16))
    Style_Offset_str = xml_content_16[28:32][::-1]
    Style_Offset = "".join(Style_Offset_str)
    print "Start:" + str(int(Style_Offset, 16) + 8)
    chunkStringContentByte = xml_content[212:2056]
    firstStringSizeByte_str = xml_content_16[212:214][::-1]
    # 一个字符对应两个字节
    firstStringSize = int("".join(firstStringSizeByte_str), 16) * 2
    print "size:" + str(firstStringSize)
    firstStringContent = filterStringNull(xml_content_16[214:238])
    print "first string:" + firstStringContent
    stringContentList.a
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值