Android混淆那些事儿
博客: 安卓之家
微博: 追风917
CSDN: 蒋朋的家
简书: 追风917
博客园:追风917
Android混淆
Android混淆是Android开发者经常使用的一种用于代码防止被反编译的常见手法,一般在Release模式生效,主要有三个作用:
1 压缩、优化、删除代码;
2 一定程度上提高反编译后被读懂的难度;
3 通过删除代码功能实现的特殊作用。
比如在可以运用混淆技术在发布版本不打印 Log.d等调试信息,防止敏感信息泄露,而在dubug模式下可以打印所有调试信息方便调试。
Android混淆技术
1 Java类名、方法名混淆
Dalvik字节码包含了大量的调试信息,如类名、方法名、字段名、参数名、变量名等,使用反编译工具可以还原这些信息。从Android2.3开始,Google在SDK中加入了一款叫ProGuard的Android混淆工具,ProGuard会删除这些调试信息,并用无意义的字符序列来替换类名、方法名等,使得使用反编译出来的代码难以阅读,提升逆向难度。使用ProGuard 对Android混淆过后,反编译出来的类名和方法名无法阅读,但是反编译出来的功能代码仍然是非常容易阅读的,和源代码差不多,破解者仍通过阅读功能代码来自行标记类名、方法名等,然后逆向破解。
2 Java代码混淆
通过对功能代码流程进行乱序混淆,实际运行时乱序Android混淆后的代码流程却和原始代码流程是一样的,但反编译出来的代码流程静态阅读时与原始流程有很大差异,使破解者很难通过静态分析理解代码功能,从而保护Android混淆代码不被逆向分析。比如,原始的代码流程是1->2->3->4->5->6->7,经过乱序Android混淆后静态反汇编查看到的代码流程可能变成2->7->5->1->6->4->3,实际运行时代码流程仍然是1->2->3->4->5->6->7。
3 Dalvik字节码加密
将dex文件中的部分或全部Dalvik字节码加密,Android混淆,每次需要执行时由专门的Native代码负责动态解密和回填,静态反编译出来的代码已经无法阅读甚至无法反编译,动态调试也难以逆向分析。
4 Android apk加密
Android混淆可以保证源代码的一定安全,但是并不全面。Android apk加密技术包括:DEX加壳保护,DEX指令动态加载保护和高级源码混淆保护。其中DEX加壳保护通过将DEX文件隐藏,并生成一个类似于虚像的壳文件,阻止黑客利用反编译工具获取App源码。
Android Studio下的混淆
在as下混淆安卓项目,只要在build.gradle脚本里设置 一下即可,比如我们可以这样设置:
buildTypes {
debug {
minifyEnabled false
}
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
在debug模式下,不混淆,release正式发布版本里混淆,此时用到了两个文件,一个是sdk/tools/proguard/proguard-android.txt文件, 一个是项目下的proguard-rules.pro文件。
一般情况,我们只需要修改proguard-rules.pro文件,把不需要混淆的部分在该文件中声明,因为有些类已经混淆过,。比如使用百度地图安卓sdk需要在proguard-rules.pro中加入下面代码:
-keep class com.baidu.** {*;}
-keep class vi.com.** {*;}
-dontwarn com.baidu.**
enjoy!
悦分享,越快乐_
欢迎交流,转载请注明出处,谢谢!
Android混淆那些事儿的更多相关文章
- Android 混淆那些事儿
本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/WmJyiA3fDNriw5qXuoA9MA 作者:l ...
- android混淆那些事
写给Android开发者的混淆使用手册 综述 毫无疑问,混淆是打包过程中最重要的流程之一,在没有特殊原因的情况下,所有 app 都应该开启混淆. 首先,这里说的的混淆其实是包括了代码压缩.代码混淆以及 ...
- Android混淆打包配置总结
Android打包失败出现Proguard returned with error code 1. See console的错误 这个问题是由于代码混淆引起的,找不到引用包. 只需在你的proguar ...
- Android混淆、反编译以及反破解的简单回顾
=========================================================================虽然反编译很简单,也没下面说的那么复杂,不过还是转了过 ...
- android -------- 混淆打包报错(warning - InnerClass annotations are missing corresponding EnclosingMember annotations)
最近做Android混淆打包遇到一些问题,Android Sdutio 3.1 版本打包的 错误如下: Android studio warning - InnerClass annotations ...
- Android 混淆代码有关问题总结
Android 混淆代码问题总结 Android 混淆代码: 最快的方式: 1. 首先更新Android的SDK至最新版本,重新建立1个工程,把源码和资源及其他文件拷到新的工程里面. 2. 工程目录底 ...
- Android 混淆[学习笔记]
Android 混淆 Gradle的简介: http://www.flysnow.org/2015/03/30/manage-your-android-project-with-gradle.html ...
- Android混淆代码
Android代码混淆是必须的,java层代码如果不做混淆等于把源代码送人了.那如何做混淆呢? 之前一般都是提到采用proguard.cfg,但使用新版本ADT后没有这个文件了,取而代之的是progu ...
- Android混淆打包
一.理论知识 ProGuard是一款免费的Java类文件压缩器.优化器和混淆器.它能发现并删除无用类.字段(field).方法和属性值(attribute).它也能优化字节码并删除无用的指令.最后 ...
随机推荐
- 【Dog】
- 系统交易策略 hylt
最令我尴尬的事情,莫过于很多朋友来到网站,不知道我说的是什么.大多数人以为鬼仆是推销软件的.其实这里理解是错的,特别是一些软件制作与经销商,更出 于推销的目的,故意夸大产品性能,模糊交易系统与一般行情 ...
- python 默认的系统编码 sys.setdefaultencoding
python2.x的编码问题有时让人很头疼,一会ascii,一会unicode. 在脚本里多见这样的操作: import sys reload(sys) sys.setdefaultencoding( ...
- is not mapped 解决方法
1.确定是否已配置相关XML 2.注意类名大小写问题 3.如果是注解 第一种方式 @Entity(name = "Tb_User") public class User { ...
- bzoj3224 Tyvj 1728 普通平衡树(名次树+处理相同)
3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 5354 Solved: 2196[Submit][Sta ...
- Ruby on Rails Session 2: How to install Aptana Studio 3 on Ubuntu 12.04 LTS
Update: An updated version of these instructions for Ubuntu 12.10 (Quantal Quetzal) is available her ...
- linux下网络配置 命令
一.IP的配置: 不直接修改文件方式: 设置网卡eth0的IP地址和子网掩码: sudo ifconfig eth0 192.168.2.1 netmask 255.255.255.0 将IP地址改为 ...
- java数据结构--线性结构
一.数据结构 数据结构由数据和结构两部分组成,就是将数据按照一定的结构组合起来,这样不同的组合方式有不同的效率,可根据需求选择不同的结构应用在相应在场景.数据结构大致 分为两类:线性结构(如数组,链表 ...
- linux_tomcat7服务器日志爆满导致java崩溃的问题
在linux服务器上部署Tomcat后,运行久了,catalina.out文件会越来越大,对系统的稳定造成了一定的影响. 最近刚刚出现了某台linux服务器上的java应用都假死或挂掉 然后我在输入命 ...
- View,viewgroup,viewstub总结
:first-child { margin-top: 0; } blockquote > :last-child { margin-bottom: 0; } img { border: 0; m ...