自动化打包资源混淆集成python实践----资源混淆
前面自动化打包资源混淆集成python实践----打包一文讲述了四种打包方案,以及美团打包方案、apk注释添加渠道号方案的实现。这里讲集成资源混淆。
1、资源混淆带来的好处:
1)对资源文件起一定的保护作用,使其不能知其名不知意(如login.png ----a.png> )
2)对压缩apk包大小,起一定的作用(混淆资源ID长度,对apk进行深度压缩)
2.方案种类
1)美团资源混淆
原理:干涉appt过程,改写appt 源码,在生成resources.arsc和*.ap_时把资源文件的名称进行替换
2)微信资源混淆
原理:对apk 中的resources.arsc进行内容修改,同时对apk进行深度压缩。
3.Python 集成微信资源混淆
1)思路:gradle 打包 ---->微信资源打包 --->多渠道打包
2)python实现
(1)使用微信资源混淆方法
法1:定义gradle andResGuard task, ./gradlew andresguard
法2:直接用命令行执行 java -jar resourceproguard.jar input.apk -7zip /shwenzhang/tool/7za -zipalign /shwenzhang/sdk/tools/zipalign
ps:这里使用法2使用混淆
(2)源码:
def func_andResGuard(apkPath,isChannels = False):
#根据AndResGuard-cli-1.1.0.jar,config.xml 实际路径替换
guardJarFile = workSpace + '/AndResGuard/AndResGuard-cli-1.1.0.jar'
guardConfigFile = workSpace + '/AndResGuard/config.xml' outDir = workSpace + '/AndResGuard/build'
cmd = 'java -jar ' + guardJarFile + ' '+apkPath + ' -config ' + guardConfigFile + ' -out '+ outDir +' -zipalign ' + zipalignFile
proc = subprocess.Popen(cmd,shell = True)
if isChannels:
func_listen_process(proc,AndResGuardProcessListener(apkPath,True))
else:
func_listen_process(proc,AndResGuardProcessListener(apkPath)) #andResGuard进程监听器
class AndResGuardProcessListener(ProcessListener):
curTime = 0
isChannels = False
apkPath = ''
preApkSize = 0 def __init__(self,apkPath,isChannels = False):
self.isChannels = isChannels
self.apkPath = apkPath
def start(self):
size =os.path.getsize(self.apkPath)
self.preApkSize = size /float(1024)/1024 self.curTime = time.time()
print '\n ------> AndResGuard start \n'
def doing(self):
return
def end(self):
time.sleep(30)
files = os.listdir(workSpace + '/AndResGuard/build')
for f in files :
if 'signed_7zip_aligned' in f:
size = os.path.getsize(workSpace + '/AndResGuard/build/' + f)
print '\n ------> AndResGuard before apk size : ' + str(float('%0.2f'%(self.preApkSize))) + 'M\n'
size = size /float(1024)/1024
print '\n ------> AndResGuard after apk size : ' + str(float('%0.2f'%size)) + 'M\n'
os.chmod( self.apkPath, stat.S_IWRITE )
os.remove(self.apkPath)
shutil.copyfile(workSpace + '/AndResGuard/build/' + f,self.apkPath)
break
else :
print ''
self.curTime = time.time() - self.curTime - 10
print '\n ------> AndResGuard end , cost time '+ str(int(self.curTime)) +'s\n\n' if self.isChannels:
func_channelsReleasePack(workSpace)
4、混淆压缩效果:


ps:使用友盟分享功能时,需要在config.xml添加资源白名单(友盟根据资源名获取资源ID,而资源名被混淆了,导致资源找不到),填写正确的签名信息(否则微信分享调用 不起来)。
github:github:AndroidPackCi
参考资料:
https://github.com/shwenzhang/AndResGuard
自动化打包资源混淆集成python实践----资源混淆的更多相关文章
- 自动化打包资源混淆集成python实践----打包
1.自动化打包方案 1)友盟多渠道多渠道打包 2)gradle productFlavors系统的条件编译 3)美团打包 4)APK文件注释写入渠道号 2.各打包方案简介 1)友盟多渠道多渠道打包(w ...
- 自动化打包 Jenkins 持续集成 Git Gradle MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 基于Armitage的MSF自动化集成攻击实践
基于Armitage的MSF自动化集成攻击实践 目录 0x01 实践环境 0x02 预备知识 0x03 Armitage基础配置 0x04 Nmap:Armitage下信息搜集与漏洞扫描 0x05 A ...
- python进阶资源
本文为不同阶段的Python学习者从不同角度量身定制了49个学习资源. 初学者 Welcome to Python.org https://www.python.org/ 官方Python站点提供了一 ...
- 优秀Python学习资源收集汇总(强烈推荐)
Python是一种面向对象.直译式计算机程序设计语言.它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用縮进来定义语句块.与Scheme.Ruby.Perl ...
- [转]优秀Python学习资源收集汇总
Python是一种面向对象.直译式计算机程序设计语言.它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用縮进来定义语句块.与Scheme.Ruby.Perl ...
- 关于在打包Jar文件时遇到的资源路径问题(二)
在关于<关于在打包Jar文件时遇到的资源路径问题(一)>中,以及描述了当资源与可执行JAr分离时的资源路径代码的编写问题,后来想了想,为什么将<Java核心技术卷一>中的程序1 ...
- 关于在打包Jar文件时遇到的资源路径问题(一)
当我们将程序写好,并进行打包成Jar文件时,通常都带有各种资源,这些资源可以是图像或者声音文件,也可以是别的如文本文件或二进制文件等,这些资源都和代码密切相关.例如在一个JPanel类上显示一些可能变 ...
- 优秀Python学习资源
优秀Python学习资源收集汇总(强烈推荐) Python是一种面向对象.直译式计算机程序设计语言.它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用縮 ...
随机推荐
- HihoCoder1070 区间最小值(简单线段树)
个测试点(输入文件)有且仅有一组测试数据. 每组测试数据的第1行为一个整数N,意义如前文所述. 每组测试数据的第2行为N个整数,分别描述每种商品的重量,其中第i个整数表示标号为i的商品的重量weigh ...
- 小组项目需求——NABCD
关于项目微食堂的NABCD: N(need): 就我自己而言,每天在上午三四节课时就会想中午吃什么.而且大部分的课在二教,离食堂较远.可能会面临“抢不到饭”的问题.首先不知道去哪吃.吃什么,尤其在时间 ...
- LeetCode 315. Count of Smaller Numbers After Self
原题链接在这里:https://leetcode.com/problems/count-of-smaller-numbers-after-self/ 题目: You are given an inte ...
- bzoj 4591 [Shoi2015]超能粒子炮·改——组合数前缀和
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4591 先说说自己的想法: 从组合意义的角度考虑,从n个里选<=k个,就添加k个空位置, ...
- 检测一个DLL文件是x64还是x86
对于一个DLL,我们如何判定其是32位的还是64位的,或者是any cpu的platform? Visual Studio提供了一个很好的工具:corflags,这个是内嵌到Developer Com ...
- Attribute注解(用于判断权限)
一 Attribute原理: Attribute注解,是附加上方法.属性.类等上面的标签,可以通过方法的GetCustomAttribute获得粘贴的这个Attribute对象通过反射调用到粘贴到属 ...
- Day2-Python基础2---字符编码与转码
详细内容http://www.cnblogs.com/yuanchenqi/articles/5956943.html 一.编码介绍: 1.基本概念: 在python 2中默认编码是 ASCII,而在 ...
- Celery-4.1 用户指南: Signals (信号)
基础 有多种类型的事件可以触发信号,你可以连接到这些信号,使得在他们触发的时候执行操作. 连接到 after_task_publish 信号的示例: from celery.signals impor ...
- PowerDesigner中批量替换name和code的脚本
无论是cdm还是pdm都可以批量替换.处理.可在Tool-Execute commands-Edit/Run script中编辑运行脚本: 下面的脚本是批量将CDM中实体的用Code替换掉Name O ...
- paramiko监控 windows服务器 被监控服务器只需要安装openssh服务即可基于wmic完成大部分监控
#!/usr/bin/python #-*- coding: UTF-8 -*- #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...