自动化打包资源混淆集成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 ' + zipalignFileproc = 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 = 0isChannels = FalseapkPath = ''preApkSize = 0def __init__(self,apkPath,isChannels = False):self.isChannels = isChannelsself.apkPath = apkPathdef start(self):size =os.path.getsize(self.apkPath)self.preApkSize = size /float(1024)/1024self.curTime = time.time()print '\n ------>  AndResGuard start \n'    def doing(self):returndef 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)/1024print '\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)breakelse :print ''self.curTime = time.time() - self.curTime - 10print '\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

 

 

 

参考资料:

美团Android资源混淆保护实践

安装包立减1M--微信Android资源混淆打包工具

https://github.com/shwenzhang/AndResGuard

Android应用程序资源的编译和打包过程分析

转载于:https://www.cnblogs.com/sihaixuan/p/5326289.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404085.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[win7] 去除将窗口拖到屏幕边缘时“自动最大化”

在win7中将一个窗口拖到屏幕的边缘,这个窗口将会自动以最大化方式显示,这对于那些需要同时查看两个窗口中内容的用户来说就是个恶梦!因为屏幕大小是有限的,为了同时查看两个窗口中的内容,就要将这两个窗口以合适的方式…

iOS 应用程序的国际化

什么事应用程序的国际化? 就是不同国家之间使用的语言不一样,中国人的应用程序显示的汉字,美国人的应用程序是英文. 接下来我们就来实现应用程序的国际化: 1.首先我们新建一个工程,命名为:Internationalization-Demo; 2.添加语言(配置语言):(英文和中文) 3.目前,应…

获得H.264视频分辨率的方法

From: http://www.cnblogs.com/likwo/p/3531241.html 在使用ffmpeg解码播放TS流的时候(例如之前写过的UDP组播流),在连接时往往需要耗费大量时间。经过debug发现是av_find_stream_info(已抛弃,现在使用的是avformat_fi…

Web服务器性能估算

1 【引题】 但凡写过技术方案的都知道,在技术方案最终落实到工程实施部署时,必须编制出当前解决方案需要部署的IT设备及环境,包括:需要的网络环境、端口、带宽、组网方式、网络安全保障措施;需配置的服务器设备性能…

用实例分析H264 RTP payload

From: http://blog.csdn.net/zblue78/article/details/5948538 H264的RTP中有三种不同的基本负载(Single NAL,Non-interleaved,Interleaved) 应用程序可以使用第一个字节来识别。 在SDP中也说明了本次会话的属性 SDP 参数 下面描述了如何在 SDP 中表示一个 H.264 流…

实验4 颜色、字符串资源的使用

课程名称 基于Android平台移动互联网开发 实验日期 3月25 实验项目名称 颜色、字符串资源的使用 实验地点 S3010 实验类型 □验证型 √设计型 □综合型 学 时 1学时 一、实验目的及要求(本实验所涉及并要求掌握的知识点) 掌握Androi…

LAMP平台下构建Postfix邮件服务器

前言: 本人之前已经做过这个实验,只是版本不同,今天本来想用全新版本的源码包做实验,但是以httpd-2.4.2.tar.gz的源码包在配置虚拟主机这一块我不知道如何配置,按照以前的配置总是报错:AH00548: NameVirtua…

FU-A分包方式,以及从RTP包里面得到H.264数据和AAC数据的方法

From: http://www.cnweblog.com/fly2700/archive/2012/02/23/319718.html RFC3984是H.264的baseline码流在RTP方式下传输的规范,这里只讨论FU-A分包方式,以及从RTP包里面得到H.264数据和AAC数据的方法。 1、单个NAL包单元 12字节的RTP头后面的就是音视频…

Maven 手动添加 JAR 包到本地仓库

Maven 手动添加 JAR 包到本地仓库Maven 确确实实是个好东西,用来管理项目显得很方便,但是如果是通过 Maven 来远程下载 JAR 包的话,我宿舍的带宽是4兆的,4个人共用,有时候用 Maven 来远程下载 JAR 包会显得很慢&#x…

H264编码 封装成MP4格式 视频流 RTP封包

From:http://www.cnblogs.com/ghw-NO1/archive/2012/08/28/2660848.html 一、概述 本文讲述的是对H264编码且封装成MP4格式的视频流进行RTP打包过程时需要了解的一些基本知识。 二、H264的基础知识 1.H264的编码格式 H.263 定义的码流结构是分级结构,共四层。自上而…

[单选题]PHP函数,mail($param1, $param2, $param3),其中的$param2参数包含什么?

信息的内容 信息的发送地址 信息的回复地址 信息的主题正确答案:转载于:https://www.cnblogs.com/pizishui/p/5361848.html

不使用加减乘除实现加法

思路: 例如: a5,b9,ab14 a转换为二进制形式为101,b转换为二进制形式为1001,其和转换为二进制形式为1110。 对于二进制形式的相加,可分两步进行操作: 1)先不考虑进位,则01…

让开!!!谁也别拦着我封装React组件!

1简介 我是歌谣 放弃很容易 但是坚持一定很酷 喜欢我就一键三连哈 2前言 在我们的工作生活中 每次学习一个框架我们就不免要封装组件 而具备封装一个完美组件的能力 我称之为"优秀" 3准备工作 父组件 <Geyao/> 子组件 import React, { Component } from re…

ffmpeg教程

From&#xff1a; http://blog.csdn.net/cffishappy/article/details/7352898 概要 电影文件有很多基本的组成部分。首先&#xff0c;文件本身被称为容器Container&#xff0c;容器的类型决定了信息被存放在文件中的位置。AVI和Quicktime就是容器的例子。接着&#xff0c;你有一…

实现Parcelable接口

2019独角兽企业重金招聘Python工程师标准>>> 1 官方例子 public class MyParcelable implements Parcelable {private int mData;public int describeContents() {return 0;}public void writeToParcel(Parcel out, int flags) {out.writeInt(mData);}public static…

一个跨平台的 C++ 内存泄漏检测器

From&#xff1a;http://www.ibm.com/developerworks/cn/linux/l-mleak2/index.html 内存泄漏对于C/C程序员来说也可以算作是个永恒的话题了吧。在Windows下&#xff0c;MFC的一个很有用的功能就是能在程序运行结束时报告是否发生了内存泄漏。在Linux下&#xff0c;相对来说就没…

PAT 1039. 到底买不买(20)

题目链接&#xff1a;https://www.patest.cn/contests/pat-b-practise/1039 解题思路&#xff1a;自己刚开始想的是用两个字符串来做&#xff0c;搜别人题解的时候发现别人一种很好的解题思路&#xff0c;是用string做的&#xff0c;感觉做的很巧妙 具体的代码如下&#xff1a;…

ios UIPickerView 技巧集锦

重新实现 UIPickerView 参考资料: http://www.cocoachina.com/bbs/read.php?tid85374 http://www.cocoachina.com/iphonedev/toolthain/2011/1205/3663.html 设置循环滚动 设置 UIPickerView 的数据源数量为很大的规模, 取数据时对行数进行取模, 从而实现循环滚动的效果. 在每…

Delphi工具之TDUMP

TDUMP是一个命令行程序&#xff0c;它输出.exe或.dll&#xff08;以及其他文件类型&#xff09;文件的结构。 TDUMP位于Delphi安装目录下的Bin目录里&#xff0c;如下&#xff1a; 缺省时&#xff0c;TDUMP的输出显示到屏幕上&#xff1b; 用户可以将TDUMP的输出定向到一个文本…

libevent的使用(socket)

From: http://blog.csdn.net/kaitiren/article/details/35253319 这篇文章介绍下libevent在socket异步编程中的应用。在一些对性能要求较高的网络应用程序中&#xff0c;为了防止程序阻塞在socket I/O操作上造成程序性能的下降&#xff0c;需要使用异步编程&#xff0c;即程序…