Android Apk 代码混淆与资源文件混淆实战

资源文件混淆 往期推荐 apk保护策略——Java代码混淆 IDA调试修改内存数据 IDA调试界面介绍及快捷键 IDA调试环境搭建 在使用AndroidKiller修改smali代码,进行回编译时,有时会出现报错的情况,报错的其中一种可能是由于资源文件的混淆,可以通过绕过资源对抗的方法解决。 一:资源混淆的例子 分别打开AndroidKiller和模拟器,以捕鱼达人软件为例进行演示,如下图所示。 反编译这款游戏时,如下图所示。 重新打包,点击“编译”按钮进行回编译,此时会出现错误信息,如下图所示。若想解决,就要使用M 阅读详情

Android项目在完工发布时,需要对代码和资源文件进行混淆,目的有两个:

1⃣️减小压缩包的体积
2⃣️防止代码被反编译后恶意利用

Android Apk混淆分两步走:
1⃣️混淆代码
2⃣️混淆资源文件

本人的开发环境为:

Operation System:Mac OS 10.10.5
Android Studio:2.0 Preview 5
Gradle Plugin:2.0.0-alpha3
buildToolsVersion:23.0.2
minSdkVersion:14
compileSdkVersion :23
targetSdkVersion:23

一.混淆代码

1.在build.gradle(Module app)文件中开启混淆器Proguard

buildTypes {
        release {
            minifyEnabled true    //开启混淆
            shrinkResources true  //去掉未使用的资源文件
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

这里介绍一下ProGuard,它是AndroidStudio里新的混淆打包工具。它通过重新命名类名、变量名以及方法名等方式达到优化、混淆代码的效果。处理之后的代码代码名称短小且乱序无规律,从而可以达到减小Apk的体积以及加大反编译的难度的目的。

2.通过上面的一步,我们就再次打包之后的Apk的代码就已经被混淆了。如果你觉得这就结束了,那你就太天真了。

事实上,有一些代码我们是不能混淆的,否则会出现各种各样的错误。官网给出了三种可能会发生错误的情况:

1⃣️一个只在AndroidManifest.xml文件中引用的类
2⃣️一个被JNI层函数调用的函数
3⃣️动态调用的类或方法(反射…)

我们可以通过 如下方式指出不想被混淆的代码:

-keep public class <MyClass>

关于不同代码类型的混淆方式,请参考官网的 ProGuard Usage。

一般一个完整的项目里会用到各种各样的开源框架以及第三方类库,也需要给出对应的混淆规则。一般的框架以及类库都会给出对应的混淆规则,拿我最喜欢用的注解框架ButterKnife来说,它的混淆规则如下:

-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }

-keepclasseswithmembernames class * {
    @butterknife.* <fields>;
}

-keepclasseswithmembernames class * {
    @butterknife.* <methods>;
}

如果你的项目里使用了ButterKnife,而且你又想混淆你的代码,那就需要把上面的混淆规则全部加入你的proguard-rules.pro文件中。

注意:ProGuard默认不混淆四大组件(Activity,Service,BroadcastReceiver,ContentProvider)及其子类。

二.混淆资源文件

经过上面的代码混淆,我们已经能够实现代码的混淆。很大程度上减小了Apk的大小,增加了反编译的难度。但是这还不够。如果你把Apk文件直接解压出来,你会看到下面的结果:

这里写图片描述

可以看到,资源文件都是可以清楚地拿到的,这样就可能很容易就被看懂,甚至被恶意利用。现在我们就要设法把他们的名字都混淆一下,让其他人反编译了也看不懂,从而保护我们的软件不受侵害。

关于资源文件的混淆,这里推荐两个教程,一个是从更改源码的方式入手,一个是从resources.arsc入手。大家可以看一下参考一下:

1⃣️美团Android资源混淆保护实践
2⃣️安装包立减1M–微信Android资源混淆打包工具

安卓之APK瘦身与资源压缩方案 随着安卓设备的普及,应用市场上的竞争日益激烈。为了提供更好的用户体验,开发者需要不断优化应用的大小。APK瘦身和资源压缩成为减少应用体积、提高下载速度和节省存储空间的关键手段。本文将对安卓应用的APK瘦身与资源压缩方案进行深入分析,帮助开发者了解和实施有效的优化策略。 阅读详情

相关推荐

Android APK深度混淆与资源保护实战

Android APK混淆是指通过对应用的代码、资源等进行重命名和加密,以增加逆向工程的难度,保护应用的核心逻辑和敏感信息。其核心目标包括防止代码被轻易阅读、减少APK体积、提升安全性。在实际开发中,ProGuard 和 R8 是最常用的代码混淆工具,而资源混淆则涉及对资源ID、字符串、颜色等的处理。与代码混淆不同,资源混淆更关注资源文件(如XML、assets)的保护,二者在构建流程中协同工作,形成完整的安全防护体系。下一章将深入解析资源文件的核心结构:。

weixin_36204513的博客 1065

Android APK代码混淆与资源混淆详解,你确定不看?

APK的混淆分为资源混淆与代码混淆.一般大部分都使用两者结合.尤其是目前主流的应用. 其中的优点: 防止被恶意破解逆向分析 减少apk体积,也是瘦身的方法 代码可阅读性降低 其中的缺点: 调试不方便(可以配置mapping变得方便) 测试不充分,可能导致部分功能不能使用(比如注解相关等) 混淆前(这儿偷个懒直接用工具反编译看):混淆后:如何使用代码混淆:1.直接在build.gradle文件中配置即

Tanck的专栏 2万+

Android App资源文件混淆工具类实现

在Android应用中,资源文件是构成应用界面和功能不可或缺的一部分。图片、音频和视频资源常用于应用的图标、界面背景、用户提示音、动画效果以及演示视频等,它们直接影响着用户对应用的直观感受。图片资源包括但不限于PNG、JPG、WebP等格式,它们在应用中用于图标、按钮、背景、布局等视觉元素的展示。音频资源通常是指MP3、WAV等格式的文件,这些声音文件用于播放应用的背景音乐、提示音、效果音等。视频资源则是指MP4、3GP等视频格式,经常用在应用启动界面或帮助说明中。

weixin_36431145的博客 1353

Android资源文件以及混淆技术

Android资源文件以及混淆技术

helloworlddm的博客 502

Apk混淆工具,给APK文件做混淆加密

给APK文件做混淆加密,使APK不易被反编译,使用说明详见压缩包内。

SiamFC++笔记

SiamFC++: Towards Robust and Accurate Visual Tracking with Target Estimation Guidelines 文章根据这些思路:引入分类和目标状态估计分支(G1),无歧义的分类得分(G2),无先验知识的跟踪(G3)和评估质量得分(G4)来设计SiamFC ++。 SiamRPN ++和SiamFC ++的比较(红色部分代表得分高的区域): guide: G1 : 分类和状态估计任务的分离:分类任务将目标从干扰物和背景中分类出来,目标状态

木木JL的博客 9433

Android--混淆配置(比较详细的混淆规则)

Android--混淆配置(比较详细的混淆规则)

weixin_42602900的博客 2万+

SAP SM30数据维护实战:条件筛选与动态校验的实现技巧

本文详细介绍了SAP SM30数据维护的实战技巧,重点讲解如何通过条件筛选实现精准数据查取,以及利用表维护生成器事件实现动态数据检查与校验。文章提供了从基础视图创建到高级事件编程的完整流程,包括调用函数VIEW_MAINTENANCE_CALL传递筛选条件,以及在NEW_DATA和CHANGE_SAVE事件中编写业务规则校验逻辑,帮助开发者提升SM30的管控能力与数据质量。

q9w8e7r6t5的博客 521

【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表混淆 | resources.arsc 资源映射表二进制格式分析 | 混淆全局字符串池和资源名称字符串池 )

一、resources.arsc 资源映射表 混淆、 二、resources.arsc 资源映射表二进制格式分析、 三、参考资料、

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 2601

开发板的使用

一、开发板使用学习大纲。 1、开发板组成、核心板资源,底板资源。 2、开发板连接、调试工具、串口参数配置。 3、开发板启动过程。 4、文件传输 1)使用串口传输。 上传/下载 2)使用网口传输。 上传/下载 5、临时/永久配置开发板IP地址。 6、开发板启动脚本。 二、开发板的组成。 核心板: CPU处理器: 芯片:S5P6818(三星) 内核: ARM cortex-A53 -> 八核处理器 运行内存:512MB*2=1G nandflash:4G 底板: 电源线:5V 串口...

qq_45633736的博客 2658

钉钉宜搭低代码开发师高级认证考试题库113题

钉钉宜搭低代码开发师(高级)考试试题题库,多次考试收集整理,判断题,单选题,多选题,排版清晰,查找方便。希望能帮助到大家!!!

qq_40811920的博客 6396

Android资源文件混淆

Android资源文件混淆通常我们说的混淆都是指代码混淆,但其实资源文件中也有很多重要的文件,为了防止我们的资源文件被别人用apktools反编译直接获取到,我们可以使用某些工具来为我们的资源文件做混淆,保证我们资源文件的相对安全. 在写这篇博客前,博主已经踩了N多的坑,为了方便更多的人,我把资源文件混淆用到的工具和步骤上传到优快云供大家参考.准备工作: 工具下载地址:http://downl

浅浅清风的博客 1万+

论文翻译:Automatic Lesson Plan Generation via Large Language Models with Self-critique Prompting

在本文中,我们利用大型语言模型(LLMs)的理解和生成能力来自动生成定制化的课程计划。这解决了传统计划可能无法充分满足不同教学环境和学生群体的特定需求的常见挑战。我们提出了一个新颖的三阶段过程,包括使用检索增强生成(RAG)逐步生成课程计划的每个关键组成部分,通过LLMs进行自我批评,以及随后的细化。我们使用这种方法为小学2至5年级生成了涵盖80多个主题的数学课程计划。邀请了三位经验丰富的教育工作者制定全面的课程计划评估标准,然后使用这些标准将我们的LLM生成的课程计划与同一主题的实际课程计划进行基准比较。

CSPhD-winston的博客 1101

Jadx 终极指南:从零开始掌握 Android 反编译

Jadx 是一款强大的 Android 应用反编译工具,能够将 APK 文件转换为可读的 Java 代码。无论你是安全研究人员、Android 开发者还是逆向工程爱好者,掌握 Jadx 都将为你的工作带来巨大便利。本指南将带你从基础安装到高级技巧,全面掌握这款必备工具。🚀 ## 什么是 Jadx 及其核心优势 Jadx 是一个开源的 Android 应用反编译工具,它能够将编译后的 APK、

gitblog_00220的博客 858

最新Anaconda3的安装配置及使用教程(详细过程)

最新Anaconda3安装使用Anaconda下载方式一:官网下载方式二:清华镜像下载(推荐)Anaconda安装 Anaconda是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项 Anaconda + Jupyter 基本上已经是大部分机器学习/数据分析等开发者标配的开发环境, 不多介绍,直接进去正题: Anaconda下载 方式一:官网下载 下载地址传送门: 官网首页:https://www.anaconda.com/ 官网下载页:https://www

HowieXue 薛永浩的博客 34万+

Android 14.0 系统设置显示主菜单添加屏幕旋转菜单实现旋转屏幕功能

在14.0的系统rom定制化开发中,在对系统设置进行定制开发中,有产品需求要求增加 旋转屏幕功能的菜单,就是在点击旋转屏幕菜单后弹窗显示旋转0度,旋转 90度,旋转180度, 旋转270度针对不同分辨率的无重力感应的大屏设备的屏幕旋转功能的实现, 接下来就来分析实现这个功能

安卓兼职framework和app工程师的博客 1309

Android APK打包流程

Android APK 打包过程包括多个关键步骤,每个环节都提供了不同的操作机会。开发者可以在这些步骤中进行自定义,优化构建,调试,或增加特定的功能。1、资源打包(通过 AAPT 工具)生成资源索引文件 R.java。打包资源文件为二进制格式 resources.arsc。保留部分非二进制资源原始文件(如 res/raw 和图片)。2、处理 AIDL 文件将 .aidl 文件转换为 Java 接口文件。3、Java 源代码编译编译 R.java、Java 接口文件及其他源代码为 .class 文件。

weixin_44780781的博客 1631

深水区探秘:小红书App x-s参数逆向与高并发爬虫实战(2026版)

在移动互联网的碎片化时代,小红书凭借其“社区+电商”的独特模式,积累了超过3亿月活用户。其内容生态覆盖了从美妆、穿搭到旅行、数码等几乎所有垂直领域。对于数据分析师、市场研究员以及AI算法工程师而言,小红书平台蕴含的价值是巨大的——无论是热门趋势洞察、KOL画像分析,还是多模态图文数据的采集。然而,想要高效、稳定地获取小红书App的公开数据,却并非易事。与Web端相比,小红书App的防护体系堪称“铜墙铁壁”。其核心的反爬机制建立在动态混淆的加密参数之上,尤其是请求头中的X-SX-T以及X-S-Common。

2201_76125261的博客 263

Android 项目必备(二十四)--> Apk 混淆

本文主要讲解 `Apk` 的混淆,这里的混淆分为两种**代码混淆**和**资源文件混淆**。实际的产品研发中为了防止自己的劳动成果被别人窃取,混淆代码能有效防止 `apk` 文件被反编译,进而查看源代码。.........

Kevin Learn Android 2104

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Android APK优化系列瘦身篇:实战一个APK从11MB压缩到4MB,APK无用资源去除与代码压缩、混淆,瘦身维度的选型分析

SVG一般是用于纯色的图标;svg至少比jpg小一半,图片越大,体积越明显。Webp一般用与网络传输的图片;PNG格式也常用于屏幕截图和界面设计稿的保存。由于它支持透明背景和多种颜色深度,可以确保设计稿在不同设备和环境下的显示效果一致。由于JPG格式的广泛支持和较高的压缩率,它成为网络上共享图片的首选格式之一。Android应用中的图片分享功能通常会使用JPG格式来发送图片。所以我们可以将图片转换成对应的格式,会减少体积。

前期后期 4282

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Android进阶-反编译、apk重新打包、apk混淆、apk对齐与不对齐、jar混淆、proguard

前言:学习必须脚踏实地,所以大家真心想学,我相信你花点时间在认真按照博客编写过程一步一步去阅读,你将会有不一般的收获,不建议大跳跃性的阅读。 1.反编译详细说明地址一、概括:破解别人的app,拿到别人app的源代码。二、应用场景:自己做不出的功能,全网搜索都没结果的情况下,但是看到别人的app中有你需要的功能 ,就会去考虑反编译,但是一般是不会去做这样的事的,首先反编译也不是那么容易,其次可能有些人

王涛的博客 5986

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Android studio 代码混淆及打包apk

Android Studio相关博客: Android Studio(一):介绍、安装、配置 Android Studio(二):快捷键设置、插件安装 Android Studio(三):设置Android Studio编码 Android Studio(四):Android Studio集成Genymotion Android Studio(五):修改Andro

wf_fln的博客 2325

Android性能优化之应用瘦身(APK瘦身)

APK瘦身优化的优先级相对来说是比较低的,因为优化后也并不能明显的看到有什么好处,这一块主要影响转换率,应用越小, 可能用户下载的意愿就越高,另外在进行预装时,也有大小的要求。

fumeidonga的博客 1938

Android 混淆APK并检查是否混淆成功

https://blog.youkuaiyun.com/Eric_Blog_优快云/article/details/78904679 https://blog.csdhttps://www.cnblogs.com/pythoncd/p/10367144.html https://www.cnblogs.com/pythoncd/p/10367144.html

漫天撒花的博客 3650

Android apk优化之资源混淆7zip压缩

##目的 启用资源文件res混淆及压缩的好处: 增加破解难度,用无意义的字母替换掉资源文件目录及名称,如把res/drawable/wechat变为r/d/a。目前主流大厂的apk打开后,资源目录都是r文件夹,看不到真实的资源文件名,就是做了资源文件混淆。 减小打包后的apk体积。 ##原理 通过resource.arsc文件格式,混淆步骤为: 解析arsc文件,主要为全局与资源名字符串池 ...

WernerZeiss的博客 1979

Apk的混淆,这里的混淆分为两种代码混淆和资源文件混淆或是通过第三方加固

Apk的混淆,这里的混淆分为两种代码混淆和资源文件混淆

覃杰的博客 3598
上一篇: Java自定义注解入门举例
下一篇: 备战Android实习(Java基础知识篇)
肖小的人儿
博客等级 码龄12年 29粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值