zoukankan      html  css  js  c++  java
  • androidmanifest.xml 解码工具又来一发

    背景:

    最近这几天在研究facebook的协议,但是facebook的采用 SSL Pinning 技术,正常通过fiddler是不能解开SSL观察协议。

    听说facebook app在 manifest里面使用了android新的配置,<application android:networkSecurityConfig="@xml/network_security_config">

    因此,特别想看看facebook apk的manifest,有没有这个新配置。

    但是用apktool来分析facebook apk又报错,于是自己撸一个小工具吧。

     

    官方针对 networkSecurityConfig 配置说明

    image


    简要说明,androidmanifest.xml二进制数据结构:

    关于androidmanifest的定义基本在/frameworks/base/libs/androidfw/include/androidfw/ResourceTypes.h 这个文件里

    仔细看看这个文件发现androidmanifest文件结构很简单,不复杂。 

    androidmanifest.xml 头定义如下,共8个字节,后面就是独立的不同类型的chunk组成 

    /**
     * Header that appears at the front of every data chunk in a resource.
     */
    struct ResChunk_header
    {
        // Type identifier for this chunk.  The meaning of this value depends
        // on the containing chunk.
        uint16_t type;
    
        // Size of the chunk header (in bytes).  Adding this value to
        // the address of the chunk allows you to find its associated data
        // (if any).
        uint16_t headerSize;
    
        // Total size of this chunk (in bytes).  This is the chunkSize plus
        // the size of any data associated with the chunk.  Adding this value
        // to the chunk allows you to completely skip its contents (including
        // any child chunks).  If this value is the same as chunkSize, there is
        // no data associated with the chunk.
        uint32_t size;
    };
    

    如 ResStringPool_header: 

    /** ********************************************************************
    *  String Pool
    *
    *  A set of strings that can be references by others through a
    *  ResStringPool_ref.
    *
    *********************************************************************** */
    
    /**
     * Definition for a pool of strings.  The data of this chunk is an
     * array of uint32_t providing indices into the pool, relative to
     * stringsStart.  At stringsStart are all of the UTF-16 strings
     * concatenated together; each starts with a uint16_t of the string's
     * length and each ends with a 0x0000 terminator.  If a string is >
     * 32767 characters, the high bit of the length is set meaning to take
     * those 15 bits as a high word and it will be followed by another
     * uint16_t containing the low word.
     *
     * If styleCount is not zero, then immediately following the array of
     * uint32_t indices into the string table is another array of indices
     * into a style table starting at stylesStart.  Each entry in the
     * style table is an array of ResStringPool_span structures.
     */
    struct ResStringPool_header
    {
        struct ResChunk_header header;
    
        // Number of strings in this pool (number of uint32_t indices that follow
        // in the data).
        uint32_t stringCount;
    
        // Number of style span arrays in the pool (number of uint32_t indices
        // follow the string indices).
        uint32_t styleCount;
    
        // Flags.
        enum {
            // If set, the string index is sorted by the string values (based
            // on strcmp16()).
            SORTED_FLAG = 1<<0,
    
            // String pool is encoded in UTF-8
            UTF8_FLAG = 1<<8
        };
        uint32_t flags;
    
        // Index from header of the string data.
        uint32_t stringsStart;
    
        // Index from header of the style data.
        uint32_t stylesStart;
    };
    

     

    知道了定义,就可以很方便写一个工具来解开二进制的androidmanifest.xml,转成纯文本的androidmanifest.xml

    image

    果然在facebook里面发现了最新的安全配置 android:networkSecurityConfig。

    它表示facebook是采用自己的根证书,防止中间人攻击。

    因此fiddler是不能解开facebook的ssl协议,只能是patch so文件来达到这个目的了。


    我的小工具:

    md 工具下载地址

    使用的方法很简单,md 二进制androidmanifest.xml文件路径,即可以解开。

     

  • 相关阅读:
    python文本处理
    转 Deep Learning for NLP 文章列举
    backpropagation
    开发者必备的6款源码搜索引擎 转
    转【面向代码】学习 Deep Learning(二)Deep Belief Nets(DBNs)
    Sampling
    各种形式的熵函数,KL距离
    [转] 如何在ie11里使用a连接创建动态下载文件流
    修改chrome背景色
    [转] 使用 Spring 5 的 WebFlux 开发反应式 Web 应用
  • 原文地址:https://www.cnblogs.com/russinovich/p/11827569.html
Copyright © 2011-2022 走看看