apk混淆经验

2018-08-16  本文已影响0人  charjack

一般正常发不出去的apk都是需要进行混淆打包的,否则太容易被破解了。比如用Android逆向助手这个工作,把apk转化为dex,然后dex再转化为jar,就可以通过工具查看java文件了。亲测,的确恐怖!然后再用这个工具反编译一下apk,拿到资源文件,这样一个apk就轻松的被破解了。此外除了java文件的混淆外,还有就是微信团队开源了一个混淆资源文件的方法,https://github.com/shwenzhang/AndResGuard,可以增加对代码可读性进行一定的包装。

下面是一点进行apk混淆的常用的方法。

-optimizationpasses 5 ->设置混淆的压缩比率 0 ~ 7 -dontusemixedcaseclassnames -> Aa aA -dontskipnonpubliclibraryclasses ->如果应用程序引入的有jar包,并且想混淆jar包里面的class -dontpreverify -verbose ->混淆后生产映射文件 map 类名->转化后类名的映射-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* ->混淆采用的算法.

-keep public class * extends android.app.Activity                        ->所有activity的子类不要去混淆

-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

-keep public class * extends android.app.backup.BackupAgentHelper

-keep public class * extends android.preference.Preference

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

-dontwarn android.support.v4.**

-dontwarn android.annotation

-libraryjars libs/android-support-v4.jar

-keepclasseswithmembernames class * {            -> 所有native的方法不能去混淆.

    native ;

}

-keepclasseswithmembers class * {

    public (android.content.Context, android.util.AttributeSet);            -->某些构造方法不能去混淆

}

-keepclasseswithmembers class * {

    public (android.content.Context, android.util.AttributeSet, int);

}

-keepclassmembers class * extends android.app.Activity {

  public void *(android.view.View);

}

-keepclassmembers enum * {                                -> 枚举类不能去混淆

    public static **[] values();

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

}

-keep class * implements android.os.Parcelable {              -> aidl文件不能去混淆.

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

}

-keepclassmembers class * {

  public (org.json.JSONObject);

}

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

-keepattributes *Annotation*

============================================

对于引用第三方包的情况,可以采用下面方式避免打包出错:

-libraryjars libs/aaa.jar

-dontwarn com.xx.yy.**

-keep class com.xx.yy.** { *;}

上一篇下一篇

猜你喜欢

热点阅读