├── Demo.apk ├── README ├── config.py ├── extendStringChunk.py ├── handleAXML.py ├── options.py ├── utf_16.py └── zipApk.sh /Demo.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wanchouchou/playWithAXML/10a7c12afef819b2f08f3005ab93a7b79b0fb083/Demo.apk -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | 本程序用于修改AXML二进制文件。目前完成的功能有: 2 | 1、混淆、替换AndroidManifes.xml中的属性名 3 | 2、向AXML中加入一个无效属性以实现AXML Ambiguity方案 4 | 5 | 使用平台: 6 | 由于加入了options相关代码,所以只能在LINUX环境下运行。 7 | 限制: 8 | 目前只对utf-16编码的AXML文件进行处理,暂不支持UTF-8。不过后者简单很多,大家可以自己实现~ 9 | 使用方法: 10 | 1、下载https://github.com/wanchouchou/ManifestAmbiguity中的所有文件,并make,得到manifestAmbiguit可执行文件 11 | 2、chmod a+x manifestAmbiguity #添加可执行权限 12 | ps:之所以要这样做,是因为我太懒,不重写AXML Ambiguity方案的代码,为了复用它,就在后续的代码中直接调用这个可执行文件了... 13 | 3、下载此分支下所有文件。 14 | 4、由于需要重签名apk,所以需要将自己的签名文件keystore放在此目录下,并重命名为clientkeystore。 15 | 5、useage: 16 | ./handleAXML.py -s/--source=[Source.apk] -o/--out=new.apk -c/--confuse -a/--ambiguity 17 | 注意,由于某些原因,这里的-o 后的参必须为new.apk~~ -s 后跟源apk名 -c 表示混淆 -a 表示加入一个无效属性以实现AXML Ambiguity方案 18 | 这两个参是可选的,大家可根据自己的需要选择。 19 | 6、程序执行过程中,会停留在签名阶段,输入自己clientkeystore对应的密码即可。 20 | 7、config.py为配置文件,具体作用里面有说明~ 21 | 22 | -------------------------------------------------------------------------------- /config.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python2.7 2 | # FileName: config.py 3 | # Author: wanchouchou 4 | # mail: 200802376@qq.com 5 | # Created Time: 2014-12-27 6 | 7 | 8 | # the size (in byte) of each string of the AXML, used in extendStringChunk.py 9 | NEW_EACH_STRING_SIZE = 200 10 | 11 | #Use NEW_STRING to replace all item in OLD_STRING_LIST in AXML 12 | NEW_STRING = '\n\n----######----\n------#-------\n-----#####----\n----#----#----\n---#-----#----\n--#-----##----\n\n' 13 | OLD_STRING_LIST = ['label', 'theme', 'icon', 'minSdkVersion', 'versionCode', \ 14 | 'versionCode', 'targetSdkVersion', 'protectionLevel', 'permissionGroup', 'required', 'allowBackup', \ 15 | 'permission', 'priority', 'launchMode',] 16 | 17 | -------------------------------------------------------------------------------- /extendStringChunk.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python2.7 2 | # FileName: extendStringChunk.py 3 | # Author: wanchouchou 4 | # mail: 200802376@qq.com 5 | # Created Time: 2014-12-14 6 | 7 | import struct 8 | import config 9 | 10 | NEW_EACH_STRING_SIZE = config.NEW_EACH_STRING_SIZE 11 | 12 | def getUint32(bytearray_data, pos): 13 | return struct.unpack_from('