混淆:
针对项目代码,代码混淆通常将代码中的各种元素(变量、函数、类名等)改为无意义的名字,使得阅读的人无法通过名称猜测其用途,增大反编译者的理解难度。
虽然代码混淆可以提高反编译的门槛,但是对开发者本身也增大了调试除错的难度。开发人员通常需要保留原始未混淆代码用于调试。
操作时机:项目打包时
加固:
针对apk,加固是多维度的安全防护方案,包括反破解、反逆向、防篡改等,可以防止应用被各类常见破解工具逆向,安全性要远大于单纯的代码混淆。
操作时机:项目打包成的apk文件

以上,混淆用于让apk被反编译后获取的代码难理解,加固用于让apk难于被反编译。两种操作都是对项目的安全措施,两个操作是不冲突的,可以选择其一,也可以两个操作都做。

--------------------------------------------------------------------------------------------

加固原理:

对App进行加固,可以有效防止移动应用被破解、盗版、二次打包、注入、反编译等,保障程序的安全性、稳定性。对于金融类App,尤其重要。

对App dex进行加固的基本步骤如下:
1. 从App原始apk文件里获取到原始dex文件
2. 对原始dex文件进行加密,并将加密后的dex文件和相关的存放到assert目录里
3. 用脱壳dex文件替换原始apk文件里的dex文件;脱壳dex文件的作用主要有两个,一个是解密加密后的dex文件;二是基于dexclassloader动态加载解密后的dex文件
4. 因为原始apk文件已经被修改,所以需要删除原始apk的签名信息,即删除META-INF目录下的.RSA、.SF 和MANIFEST.MF文件
5. 生成加固后的apk文件
6. 对加固后的apk文件进行签名,apk加固完成。

原理分析:
1.为什么要对原始dex进行加密,同时用脱壳dex文件替换原始dex文件?大部分的apk反编译工具(dex2jar、apktools、jui等)都是对dex文件进行反编译,将dex文件反编译成smail,然后再转化成class文件进行阅读和修改。用脱壳dex替换原始dex文件之后,用上面的反编译工具反编译apk文件,只能看到脱壳程序的class文件,看不到apk本身的class文件。对dex文件进行加密,这样即使第三方拿到了dex文件,以为无法解密,也就无法对其进行解析和分析。
2.怎么确保apk功能正常运行?加固后的apk启动之后,脱壳dex文件会对加密后的dex文件进行解密,然后机遇dexclassload动态加载解密后的dex文件。从用户的角度,加固前后App的功能和体验基本是一样的。

这个和插件化的原理是一样的。可以参见http://blog.csdn.net/jiangwei0910410003/article/details/48104581
3.dex加固主要是防止被静态反编译,进而获取源码并修改

加固工具:

1、腾讯加固

2、360加固

浅谈Android 混淆和加固的更多相关文章

  1. 浅谈android代码保护技术_ 加固

    浅谈android代码保护技术_加固 导语 我们知道Android中的反编译工作越来越让人操作熟练,我们辛苦的开发出一个apk,结果被人反编译了,那心情真心不舒服.虽然我们混淆,做到native层,但 ...

  2. 浅谈Android保护技术__代码混淆

    浅谈Android保护技术__代码混淆   代码混淆 代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为.将代码中的各种元 ...

  3. 浅谈Android应用保护(一):Android应用逆向的基本方法

    对于未进行保护的Android应用,有很多方法和思路对其进行逆向分析和攻击.使用一些基本的方法,就可以打破对应用安全非常重要的机密性和完整性,实现获取其内部代码.数据,修改其代码逻辑和机制等操作.这篇 ...

  4. 安卓开发_浅谈Android动画(四)

    Property动画 概念:属性动画,即通过改变对象属性的动画. 特点:属性动画真正改变了一个UI控件,包括其事件触发焦点的位置 一.重要的动画类及属性值: 1.  ValueAnimator 基本属 ...

  5. 浅谈Android应用性能之内存

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 文/ jaunty [博主导读]在Android开发中,不免会遇到许多OOM现象,一方面可能是由于开 ...

  6. 浅谈Android五大布局

    Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦.组件按照布局的要求依次排列,就组成了用户所看见的界面.Android的五大布局分别是LinearLay ...

  7. [转]浅谈Android五大布局(二)——RelativeLayout和TableLayout

    在浅谈Android五大布局(一)中已经描述了LinearLayout(线性布局).FrameLayout(单帧布局)和AbsoulteLayout(绝对布局)三种布局结构,剩下的两种布局Relati ...

  8. [转]浅谈Android五大布局(一)——LinearLayout、FrameLayout和AbsoulteLayout

    Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦.组件按照布局的要求依次排列,就组成了用户所看见的界面.Android的五大布局分别是LinearLay ...

  9. 浅谈Android Studio3.0更新之路(遇坑必入)

    >可以参考官网设置-> 1 2 >> Fantasy_Lin_网友评论原文地址是:简书24K纯帅豆写的我也更新一下出处[删除]Fa 转自脚本之家 浅谈Android Studi ...

随机推荐

  1. 关于I/O编程

    IO在计算机中指Input/Output,也就是输入和输出 由于程序在运行时,数据是驻留在内存中的,并由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘.网络等,就需要IO接口 IO编 ...

  2. Vue 加载外部js文件

    Vue.js  加载外部js文件 在项目内新建一个config.js //变量的定义 export var config = { baseurl:'http://172.16.114.5:8088/M ...

  3. 【ABP框架系列学习】模块系统(4)之插件示例开发

    0.引言 上一篇博文主要介绍了ABP模块及插件的相关知识,本章节主要开发一个插件示例来学习如何创建一个插件,并在应用程序中使用.这个命名为FirstABPPlugin的插件主要在指定的时间段内删除审计 ...

  4. asp.net core mvc发布后显示异常错误信息的方法

    在发布的项目文件夹中找到web.config文件,修改: <aspNetCore processPath="dotnet" arguments=".\Cloud.B ...

  5. Java核心技术及面试指南 流程控制方面的面试题答案

    2.2.5.1 switch语句能否作用在byte上,能否作用在long上,能否作用在String上? 1 switch里可以用char,byte,short,int这些基本类型,以及它们的封装类.  ...

  6. Windows平台编译MySQL5.7源码

    https://blog.csdn.net/linjingke32/article/details/85111711

  7. web进修之—Hibernate 懒加载(6)

    关于懒加载 在关系数据库设计的时候,我们很多时候把表之间的关系设置为强关联(使用外键进行约束),在Hibernate中利用对象的包含关系进行维护(HIbernate本身就是面向对象的数据库操作模式), ...

  8. 为什么你作为一个.NET的程序员工资那么低?

    最近看到很多抱怨贴,也许有一定的道理,但是你想过没,为什么大部分.NET程序员工资相对低?我个人是这么看的: 大批半罐子水的程序员,永远被局限在.NET的原始的小圈圈里.前端不会(你放弃了一项很重要的 ...

  9. 解读经典-《C#高级编程》第七版-Chapter1-.Net体系结构-Page6-13

    01 中间语言(IL) .Net中间语言(IL)的特性,很大程度上来自于要支持多语言互操作性.要支持多语言互操作性,是因为微软想搞一个大事情,将它的老产品线VB和VC++,VJ++都装入.Net架构中 ...

  10. Docker端口映射及创建镜像演示(二)--技术流ken

    前言 在上一篇博客<Docker介绍及常用操作演示--技术流ken>中,已经详细介绍了docker相关内容以及有关镜像和容器的使用命令演示. 现在我们已经可以自己下载镜像,以及创建容器了. ...