APK逆向 AXML解析失败2.1:xml非法字符

291 阅读1分钟

1 问题描述

紧跟着上一次的分析,上个问题解决后又出现一个新问题

image.png

androguard库使用了lxml库来吧axml结构化数据转化成普通的xml格式,这里报错是指命名空间的前缀含有非法字符。

注:androidmanifest.xml的命名空间通常包括xmlns:android="http://schemas.android.com/apk/res/android" 其中等号前面的android就是命名空间前缀

注2:上一次的问题:juejin.cn/post/706255…

2 解析

直接逐个删除字符再重跑,即可确定哪些是非法字符,最终确定\n后面的那个像乱码的圈就是非法字符(emoji竟然不非法,也就是说可以在xml中插入emoji?),之后我还进行了lxml的源码跟踪,还发现一个非法字符":",就是英文冒号。

但是单独测试的时候可以写个测试来一个一个试,真正批量跑的时候不可能这样,所以需要一个通用的解法。

首先android系统读取axml的时候,其实根本不会用到这个前缀,这东西是给开发者看的,方便开发,系统用到的是命名空间uri,即http://schemas.android.com/apk/res/android,所以这个前缀随便起,既然只是分析apk,那就吧前缀统一赋值为"android",规避掉这个错误;如果要便于区分,也可以加一个判定,如果前缀不是"android"、"app"等常见前缀,就吧他修改为"androidfix"之类。