Android(安卓)Apk反编译和代码混淆(第二篇代码混淆)
16lz
2021-01-26
第一篇讲了怎么反编译,然后发现自己辛辛苦苦的结果就这样轻易的被别人破解,接下来就是代码混淆了,
1,混淆的目的和效果
代码混淆的目的就是让别人不能轻易读懂你的代码,还有精简编译后程序大小的作用,上一张图看一下混淆后的代码 就容易看懂了
混淆之后的代码,我们根本看不出来方法a是什么含义,所以这就是混淆的效果
2,代码混淆的使用和规则
1,使用
讲一下Androidstudio 使用混淆的配置
1,设置为true 打包的时候默认混淆代码,false则不混淆
2,混淆配置文件的名字
3,混淆的配置文件
2,规则
1,混淆的基本规则就是把不需要混淆的保存下来,其他全部都是默认混淆的
-keep class com.example.autils.*#表示这个包下所有的类都保持原状不进行混淆,而子包下的类名还是会被混淆-keep class com.example.autils.** #表示这个包下所有的类都保持原状不进行混淆,包括子包下面的类也会保持配置了上边的 ,但是方法和变量还是会被混淆,只是类名字没有被混淆-keep class com.example.bean.** { *; }#表示保持方法和变量不进行混淆-keep public class * extends android.app.Activity #所有继承android.app.Activity的类将不会进行混淆,-keepclasseswithmembernames class * { # 保持 native 方法不被混淆 native; } -keepclasseswithmembers class * { # 保持自定义控件类不被混淆 public (android.content.Context, android.util.AttributeSet);}-keepclassmembers public class * extends android.view.View {#所有View的 子类 及其getset方法都不混淆 void set*(***); *** get*();}-keepclassmembers class * extends android.app.Activity {#所有的activity子类中 参数类型为view的方法 public void *(android.view.View);}-keepclassmembers enum * { #不混淆枚举类型中的指定方法 public static **[] values(); public static ** valueOf(java.lang.String);}-keep class * implements android.os.Parcelable { #不混淆Parcelable 子类及其Creator成员变量 public static final android.os.Parcelable$Creator *;}-keepclassmembers class **.R$* {#不混淆R类里及其所有内部static类中的所有static变量字段 public static ;}
2,现在就需要知道什么需要混淆,什么不需要混淆
别的地方调用的比如系统activity,防止混淆之后找不到抛异常1,自定义控件不要混淆2,第三方库(一般第三方库都会提供混淆模板)3,枚举4,四大组件5,调用了反射的6,使用gson解析的bean类7,js调用的方法8,Parcelable 的子类9,所有fragment的子类,
3混淆简单的模板
#android 官方混淆配置###########优化精简代码###########-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/* #指定要启用和禁用的优化-optimizationpasses 5 #压缩比率 0---7-allowaccessmodification #指定在预先处理中 类和类成员的访问性可能会扩大-dontpreverify #指定不预先验证处理类文件#-dontoptimize-dontusemixedcaseclassnames #指定不产生混合的情况下的类名称而混淆-dontskipnonpubliclibraryclasses#-dontskipnonpubliclibraryclassmembers #指定不去忽略包可见的库类的成员。-verbose-keepattributes SourceFile,LineNumberTable#保留行号-keepattributes *Annotation* #保持注解-keepattributes Signature-keepattributes EnclosingMethod-keep class * extends java.lang.annotation.Annotation { *; }-keepclasseswithmembernames class * {#指定不混淆所有的jni方法 native ;}-keepclassmembers public class * extends android.view.View {#所有View的 子类 及其getset方法都不混淆 void set*(***); *** get*();}-keepclassmembers class * extends android.app.Activity {#所有的activity子类中 参数类型为view的方法 public void *(android.view.View);}-keepclassmembers enum * { #不混淆枚举类型中的指定方法 public static **[] values(); public static ** valueOf(java.lang.String);}-keep class * implements android.os.Parcelable { #不混淆Parcelable 子类及其Creator成员变量 public static final android.os.Parcelable$Creator *;}-keepclassmembers class * implements java.io.Serializable { static final long serialVersionUID; private static final java.io.ObjectStreamField[] serialPersistentFields; private void writeObject(java.io.ObjectOutputStream); private void readObject(java.io.ObjectInputStream); java.lang.Object writeReplace(); java.lang.Object readResolve();}-keepclassmembers class **.R$* {#不混淆R类里及其所有内部static类中的所有static变量字段 public static ;}-dontwarn android.support.v4.**-keep class android.support.v4.** { *; }-keep interface android.support.v4.app.** { *; }-keep public class * extends android.support.v4.**-keep public class * extends android.support.v4.app.Fragment-keep public class * extends android.support.v4.app.FragmentActivity-dontwarn android.support.** #不提示兼容库的错误警告# support design-dontwarn android.support.design.**-keep class android.support.design.** { *; }-keep interface android.support.design.** { *; }-keep public class android.support.design.R$* { *; }-keep public class * extends android.app.Application-keep public class * extends android.app.Service-keep public class * extends android.content.BroadcastReceiver-keep public class * extends android.content.ContentProvider
更多相关文章
- Android(安卓)访问隐藏API
- 在Android中为啥建议你用Message.obtain()方法获取Message对象,而
- Android(安卓)UI设计小知识——富文本
- Android(安卓)TextView中标点符号或英文导致自动换行问题
- Launcher功能的修改及添加,本篇是一些小功能的展示,通知栏显隐,dock
- 《Android开发艺术探索》之学习笔记(三)View的基础知识
- 三种方法,刷新 Android(安卓)的 MediaStore!让你保存的图片立即出
- Android(安卓)launcher动态Icon的实现方法
- 防止Android过快点击造成多次事件的三种方法