Android代码混淆加密配置(Proguard文件解析)

Android代码混淆加密配置(Proguard文件解析)

为了防止自己的APP被轻易反编译,我们需要对APK进行混淆,或者特殊加密处理。可以用“爱加密“提供的加密服务,反编译后只能看到几行代码和.so的库文件。本文说说Android 如何配置混淆。

关于如何反编译android apk,见我另外一篇文章:win/mac下反编译Android安装包-APK文件,http://blog.csdn.net/dzsw0117/article/details/51429683

一,何为混淆?

简单的说,就是将原本正常的项目文件,对其类,方法,字段,重新命名,a,b,c,d,e,f…之类的字母,达到混淆代码的目的,这样反编译出来,结构乱糟糟的,看了也头大。

二,官方默认的混淆配置

先看看官方的proguard-android.txt文件,位于/tools/proguard目录下,不知道怎么写,可以当成模板,复制一份出来到自己的工程,改成自己项目所需的混淆配置。内容如下:

# This is a configuration file for ProGuard.

# http://proguard.sourceforge.net/index.html#manual/usage.html

-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-verbose

# Optimization is turned off by default. Dex does not like code run

# through the ProGuard optimize and preverify steps (and performs some

# of these optimizations on its own).

-dontoptimize

-dontpreverify

# Note that if you want to enable optimization, you cannot just

# include optimization flags in your own project configuration file;

# instead you will need to point to the

# "proguard-android-optimize.txt" file instead of this one from your

# project.properties file.

-keepattributes *Annotation*

-keep public class com.google.vending.licensing.ILicensingService

-keep public class com.android.vending.licensing.ILicensingService

# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native

-keepclasseswithmembernames class * {

native ;

}

# keep setters in Views so that animations can still work.

# see http://proguard.sourceforge.net/manual/examples.html#beans

-keepclassmembers public class * extends android.view.View {

void set*(***);

*** get*();

}

# We want to keep methods in Activity that could be used in the XML attribute onClick

-keepclassmembers class * extends android.app.Activity {

public void *(android.view.View);

}

# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations

-keepclassmembers enum * {

public static **[] values();

public static ** valueOf(java.lang.String);

}

-keepclassmembers class * implements android.os.Parcelable {

public static final android.os.Parcelable$Creator CREATOR;

}

-keepclassmembers class **.R$* {

public static ;

}

# The support library contains references to newer platform versions.

# Don't warn about those in case this app is linking against an older

# platform version. We know about them, and they are safe.

-dontwarn android.support.**

# Understand the @Keep support annotation.

-keep class android.support.annotation.Keep

-keep @android.support.annotation.Keep class * {*;}

-keepclasseswithmembers class * {

@android.support.annotation.Keep ;

}

-keepclasseswithmembers class * {

@android.support.annotation.Keep ;

}

-keepclasseswithmembers class * {

@android.support.annotation.Keep (...);

}1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

741

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

以上英文好好琢磨下,这个混淆默认采取一些通用的规则,view,activity,Parcelable,注解,R文件,枚举这类的东西都不会混淆,我们也不能混淆这些,否则release版本会报错。

三,Android Studio开启混淆配置

很简单,只要设置minifyEnabled为true即可。

buildTypes {

release {

minifyEnabled true//true开启混淆配置,false关闭

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

signingConfig signingConfigs.duqian_android_keystore

}

debug{//省略}

}1

2

3

4

5

6

7

81

2

3

4

5

6

7

8

四,Android混淆的通用规则

debug调试的apk是没有混淆的,所以无论你怎么反编译,都看到的是源码,你要检验release包是否混淆。

1,系统混淆配置

-dontusemixedcaseclassnames #混淆时不使用大小写混合类名

-dontskipnonpubliclibraryclasses #不跳过library中的非public的类

-verbose #打印混淆的详细信息

-dontoptimize #不进行优化,建议使用此选项,

-dontpreverify #不进行预校验,Android不需要,可加快混淆速度。

-ignorewarnings #忽略警告

#-optimizationpasses 5 #指定代码的压缩级别1

2

3

4

5

6

7

81

2

3

4

5

6

7

8

2,常用的一些混淆配置

-keepattributes Signature #范型

#native方法不混淆

-keepclasseswithmembernames class * {

native ;

}

#v4包不混淆

-keep class android.support.v4.app.** { *; }

-keep interface android.support.v4.app.** { *; }

#Gson混淆配置

-keep class sun.misc.Unsafe { *; }

-keep class com.idea.fifaalarmclock.entity.***

-keep class com.google.gson.** { *; }

#JavaBean

-keepclassmembers public class cn.net.duqian.bean.** {

void set*(***);

*** get*();

}

-keep class com.xx.duqian_cloud.JavaScriptInterface { *; }#webview js

#忽略 libiary 混淆

-keep class io.vov.vitamio.** { *; }

#butterknife不混淆

-keep class butterknife.** { *; }

-dontwarn butterknife.internal.**

-keep class **$$ViewBinder { *; }

-keepclasseswithmembernames class * {

@butterknife.* ;

}

-keepclasseswithmembernames class * {

@butterknife.* ;

}1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

321

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

第三方框架不混淆,也要看具体情况,不是所有的lib都不能混淆。用了反射的肯定不能混淆。

-keepclassmembers class * {

public (org.json.JSONObject);

}

#okhttp

-dontwarn okhttp3.**

-keep class okhttp3.**{*;}

-keep interface okhttp3.**{*;}

#okio

-dontwarn okio.**

-keep class okio.**{*;}

-keep interface okio.**{*;}

-dontwarn retrofit2.**

-keep class retrofit2.** { *; }

-keepattributes Signature

-keepattributes Exceptions

-dontwarn rx.**

-keep class rx.**{*;}1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

201

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

五,Android混淆的方法和通配符对照表

引用的图片,未必准确:

六,Android混淆的总结

Java的反射,为什么不能混淆呢?因为代码混淆,类名、方法名、属性名都改变了,而反射它还是按照原来的名字去反射,结果只射出一个程序崩溃,Crash,一脸的懵逼。

注解用了反射,所以不能混淆。 不混淆任何包含native方法的类的类名以及native方法名,否则找不到本地方法。

Activity更不能混淆,因为AndroidManifest.xml文件中是完整的名字,混淆后怎么找?

自定义view也是带了包名写在xml布局中,给我换成a,怎么破? R文件混淆了,id没了,界面崩溃那时自然咯。

本文没有指定混淆某个类中的某个方法。

Android代码混淆加密配置(Proguard文件解析)相关教程

android加密墙,Android代码混淆加密配置(Proguard文件解析)相关推荐

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

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

  2. 前端JavaScript代码混淆加密原理介绍

    因为JavaScript大都是运行在浏览器端,这就导致任何人都可以直接对网站的代码进行查看,如果代码没有进行任何处理就会导致直接暴露源码,他人便可轻而易举的复制你的劳动成果,但是由于没有纯粹的加密方案 ...

  3. 你知道吗?JS代码混淆加密,很有用!

    JS代码为什么要进行混淆加密? 因为:JS代码是明文. JS是种开放源码的编程语言, 无论是前端浏览器中的JS代码,还是在后端使用,如nodejs,js代码都是明文, 明文代码,他人可以随意查看.复制 ...

  4. android 打包 混淆配置_玩转代码混淆工具:ProGuard

    维基百科对ProGuard的介绍是:ProGuard是一个压缩(shrink),优化(optimize)与混淆(Obfuscate)Java代码的开源命令行工具.也就是说混淆只是ProGuard的其中 ...

  5. idea java 代码混淆加密_使用 IntelliJ IDEA 开发一般 Java 应用程序时配置 Allatori 进行代码混淆...

    使用 IntelliJ IDEA 开发一般 Java 应用程序时通过 Allatori 进行代码混淆非常容易配置,下面总结一下本人经验,介绍一下配置方法. 首先在 IDEA 的 Module 所在硬盘 ...

  6. 在Android Studio中进行代码混淆

    此文章来源于http://blog.csdn.net/wenwen091100304/article/details/52802247点击打开链接 在Android APP开发完成后,为了防止APP被 ...

  7. Android 代码混淆 R8与Proguard

    Android Gradle插件升级至3.4.0版本之后,带来一个新特性-新一代混淆工具R8,做为D8的升级版替代Proguard:在应用压缩.应用优化方面提供更极致的体验. Gradle插件版本3. ...

  8. ZFJPyMix-Python代码混淆加密

    更新说明 https://gitee.com/zfj1128/ZFJPyMix ----------------------------------------分割线----------------- ...

  9. Python代码部署的三种加密方案:代码混淆、代码编译、代码打包

    前言 最近需要源码部署一个项目,因此探索一下保护源码的方式,由简单到复杂主要总结为以下三大类: 代码混淆:主要是改变一些函数名.变量名 代码打包:思路是把Python代码打包成 .exe 的可执行文件 ...

最新文章

  1. 神经网络是存储了海量的信息还是将海量的关系映射存储在了一起(发挥了存储记忆功能),还是变成了看似是一个公式,实际是成千上万个规律的公式融合在一个式子中( 类似于正弦波的傅里叶分解成无限中频率的波的加和
  2. android 取消和svn关联_Android Studio如何取消与SVN的关联
  3. [BZOJ 2839] 集合计数
  4. 黑马程序员pink老师前端入门教程,零基础必看的JavaScript基础语法视频教程
  5. 软件定义数据中心—Windows Server SDDC技术与实践
  6. VMWARE虚拟机中CentOs7网络连接
  7. 我的世界服务器皮肤显示插件怎么用,我的世界皮肤和插件安装方法
  8. 与技术无关,犯错了,希望大家帮下
  9. MySQL-----pymysql模块
  10. SKlearn——逻辑斯蒂回归(LR)参数设置
  11. python 图像识别_AI场景,3步懂图像识别产品
  12. oracle修改用户密码
  13. python数组横向合并_python中合并数组的方法
  14. IntelliJ IDEA使用技巧(一)——常用快捷键
  15. Django报错:'Specifying a namespace in include() without providing an app_name '
  16. 从一个面试官的角度谈谈产品经理怎么写简历
  17. springboot 微信支付接口
  18. 学了一年php感觉什么都不会,php自学要多久_一个学了1年php后选择放弃
  19. Windows系统SVG图片预览插件
  20. windows使用模拟器

热门文章

  1. 京东数据分析工程师面试题11.17-11.19编辑
  2. 集成开发环境PL/SQL Developer v13.0新功能(二)——PL / SQL美化功能增强
  3. 大数据(电商行业)规模参考
  4. 《你好,放大器》----学习记录(一)
  5. 布尔的符号元素和符号法则  布尔逻辑之三
  6. 闭式系统蒸汽管径推荐速度_闭式蒸汽供热系统
  7. ID|IC|CPU卡|国密卡|二代证|防复制门禁一体机门禁读卡器带触摸键盘(不带二维码)选型必备
  8. 阿里巴巴港股上市:总市值反超腾讯
  9. 领英常见问题-领英加不了人怎么办与加好友注意哪些细节
  10. Java计算机毕业设计中期检查写作参考