`
shuai1234
  • 浏览: 930388 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

Android 混淆代码总结

 
阅读更多
为了防止自己的劳动成果被别人窃取,混淆代码能有效防止被反编译,下面来总结以下混淆代码的步骤:
1. 大家也许都注意到新建一个工程会看到项目下边有这样proguard-project.txt一个文件,这个对混淆代码很重要,如果你不小心删掉了,没关系,从其他地方拷贝一个过来
2. 最重要的就是在proguard-project.txt添加混淆的申明了:
 a. 把所有你的jar包都申明进来,例如:
 -libraryjars libs/apns_1.0.6.jar
 -libraryjars libs/armeabi/libBaiduMapSDK_v2_3_1.so
 -libraryjars libs/armeabi/liblocSDK4.so
-libraryjars libs/baidumapapi_v2_3_1.jar
-libraryjars libs/core.jar
-libraryjars libs/gesture-imageview.jar
-libraryjars libs/gson-2.0.jar
-libraryjars libs/infogracesound.jar
-libraryjars libs/locSDK_4.0.jar
-libraryjars libs/ormlite-android-4.48.jar
-libraryjars libs/ormlite-core-4.48.jar
-libraryjars libs/universal-image-loader-1.9.0.jar
b. 将你不需要混淆的部分申明进来,因为有些类经过混淆会导致程序编译不通过,如下:
-keep public class * extends android.app.Fragment  
-keep public class * extends android.app.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 * extends android.support.v4.**
-keep public class com.android.vending.licensing.ILicensingService
--以上都是API里边的类,最好都要避免混淆
有些很特殊的,例如百度地图,你需要添加以下申明:
-keep class com.baidu.** { *; } 
-keep class vi.com.gdi.bgl.android.**{*;}
根据我的经验,一般model最好避免混淆(model无关紧要,不混淆也没多大关系)如:
-keep class com.bank.pingan.model.** { *; }
下面在贴上关于Umeng分享统计的避免混淆的申明
-dontwarn android.support.v4.**  
-dontwarn org.apache.commons.net.** 
-dontwarn com.tencent.** 
-keepclasseswithmembernames class * {
    native <methods>;
}
-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}
-keepclasseswithmembers class * {
    public <init>(android.content.Context);
}
-dontshrink
-dontoptimize
-dontwarn com.google.android.maps.**
-dontwarn android.webkit.WebView
-dontwarn com.umeng.**
-dontwarn com.tencent.weibo.sdk.**
-dontwarn com.facebook.**
-keep enum com.facebook.**
-keepattributes Exceptions,InnerClasses,Signature
-keepattributes *Annotation*
-keepattributes SourceFile,LineNumberTable
-keep public interface com.facebook.**
-keep public interface com.tencent.**
-keep public interface com.umeng.socialize.**
-keep public interface com.umeng.socialize.sensor.**
-keep public interface com.umeng.scrshot.**
-keep public class com.umeng.socialize.* {*;}
-keep public class javax.**
-keep public class android.webkit.**
-keep class com.facebook.**
-keep class com.umeng.scrshot.**
-keep public class com.tencent.** {*;}
-keep class com.umeng.socialize.sensor.**
-keep class com.tencent.mm.sdk.openapi.WXMediaMessage {*;}
-keep class com.tencent.mm.sdk.openapi.** implements com.tencent.mm.sdk.openapi.WXMediaMessage$IMediaObject {*;}
-keep class im.yixin.sdk.api.YXMessage {*;}
-keep class im.yixin.sdk.api.** implements im.yixin.sdk.api.YXMessage$YXMessageData{*;}
-keep public class [your_pkg].R$*{
    public static final int *;
}
3.以上工作完成,混淆工作就完成了一大半了,最后需要做的就是在project.properties文件中加上你的混淆文件申明了,如下:
   proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
4. OK, 最后一步,打签名包测试,如果有问题,仔细看下Log也许有得类不能混淆,那么你得加入到proguard-project.txt文件中
-------以上就是混淆代码的全过程了
 
最后贴上proguard-project.txt的全部代码:
  
[java] view plaincopy在CODE上查看代码片派生到我的代码片
# To enable ProGuard in your project, edit project.properties  
# to define the proguard.config property as described in that file.  
#  
# Add project specific ProGuard rules here.  
# By default, the flags in this file are appended to flags specified  
# in ${sdk.dir}/tools/proguard/proguard-android.txt  
# You can edit the include path and order by changing the ProGuard  
# include property in project.properties.  
#  
# For more details, see  
#   http://developer.android.com/guide/developing/tools/proguard.html  
  
# Add any project specific keep options here:  
  
# If your project uses WebView with JS, uncomment the following  
# and specify the fully qualified class name to the JavaScript interface  
# class:  
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {  
#   public *;  
#}  
-optimizationpasses 5  
-dontusemixedcaseclassnames  
-dontskipnonpubliclibraryclasses  
-dontpreverify  
-verbose  
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*  
  
-keepattributes *Annotation*  
-keepattributes Signature  
  
-libraryjars libs/apns_1.0.6.jar  
-libraryjars libs/armeabi/libBaiduMapSDK_v2_3_1.so  
-libraryjars libs/armeabi/liblocSDK4.so  
-libraryjars libs/baidumapapi_v2_3_1.jar  
-libraryjars libs/core.jar  
-libraryjars libs/gesture-imageview.jar  
-libraryjars libs/gson-2.0.jar  
-libraryjars libs/infogracesound.jar  
-libraryjars libs/locSDK_4.0.jar  
-libraryjars libs/ormlite-android-4.48.jar  
-libraryjars libs/ormlite-core-4.48.jar  
-libraryjars libs/universal-image-loader-1.9.0.jar  
  
-keep class com.baidu.** { *; }   
-keep class vi.com.gdi.bgl.android.**{*;}  
  
-keep public class * extends android.app.Fragment    
-keep public class * extends android.app.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 * extends android.support.v4.**  
-keep public class com.android.vending.licensing.ILicensingService  
  
-keep class com.google.gson.stream.** { *; }  
-keep class com.google.gson.examples.android.model.** { *; }  
-keep class com.uuhelper.Application.** { *; }  
-keep class net.sourceforge.zbar.** { *; }  
-keep class com.google.android.gms.** { *; }   
  
-keep class com.bank.pingan.model.** { *; }  
  
-keep public class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper  
-keep public class * extends com.j256.ormlite.android.apptools.OpenHelperManager  
   
-keep class com.android.vending.licensing.ILicensingService  
-keep class android.support.v4.** { *; }    
-keep class org.apache.commons.net.** { *; }    
-keep class com.tencent.** { *; }    
   
-keep class com.umeng.** { *; }    
-keep class com.umeng.analytics.** { *; }    
-keep class com.umeng.common.** { *; }    
-keep class com.umeng.newxp.** { *; }    
   
-keep class com.j256.ormlite.** { *; }    
-keep class com.j256.ormlite.android.** { *; }    
-keep class com.j256.ormlite.field.** { *; }    
-keep class com.j256.ormlite.stmt.** { *; }   
  
-dontwarn android.support.v4.**    
-dontwarn org.apache.commons.net.**   
-dontwarn com.tencent.**    
  
-keepclasseswithmembernames class * {  
    native <methods>;  
}  
  
-keepclasseswithmembernames class * {  
    public <init>(android.content.Context, android.util.AttributeSet);  
}  
  
-keepclasseswithmembernames class * {  
    public <init>(android.content.Context, android.util.AttributeSet, int);  
}  
  
-keepclassmembers enum * {  
    public static **[] values();  
    public static ** valueOf(java.lang.String);  
}  
  
-keep class * implements android.os.Parcelable {  
  public static final android.os.Parcelable$Creator *;  
}  
  
-keepclasseswithmembers class * {  
    public <init>(android.content.Context);  
}  
  
-dontshrink  
-dontoptimize  
-dontwarn com.google.android.maps.**  
-dontwarn android.webkit.WebView  
-dontwarn com.umeng.**  
-dontwarn com.tencent.weibo.sdk.**  
-dontwarn com.facebook.**  
  
-keep enum com.facebook.**  
-keepattributes Exceptions,InnerClasses,Signature  
-keepattributes *Annotation*  
-keepattributes SourceFile,LineNumberTable  
  
-keep public interface com.facebook.**  
-keep public interface com.tencent.**  
-keep public interface com.umeng.socialize.**  
-keep public interface com.umeng.socialize.sensor.**  
-keep public interface com.umeng.scrshot.**  
  
-keep public class com.umeng.socialize.* {*;}  
-keep public class javax.**  
-keep public class android.webkit.**  
  
-keep class com.facebook.**  
-keep class com.umeng.scrshot.**  
-keep public class com.tencent.** {*;}  
-keep class com.umeng.socialize.sensor.**  
  
-keep class com.tencent.mm.sdk.openapi.WXMediaMessage {*;}  
  
-keep class com.tencent.mm.sdk.openapi.** implements com.tencent.mm.sdk.openapi.WXMediaMessage$IMediaObject {*;}  
  
-keep class im.yixin.sdk.api.YXMessage {*;}  
-keep class im.yixin.sdk.api.** implements im.yixin.sdk.api.YXMessage$YXMessageData{*;}  
  
-keep public class [your_pkg].R$*{  
    public static final int *;  
}  
[java] view plaincopy在CODE上查看代码片派生到我的代码片
2015-05-25更新  
[java] view plaincopy在CODE上查看代码片派生到我的代码片
1. 依赖工程的jar 申明:  
[java] view plaincopy在CODE上查看代码片派生到我的代码片
以下是邮件发送的实例  
[java] view plaincopy在CODE上查看代码片派生到我的代码片
-libraryjars ../KlowerBase/libs/mail-activation.jar  
-libraryjars ../KlowerBase/libs/mail-additionnal.jar  
-libraryjars ../KlowerBase/libs/mail.jar  
[java] view plaincopy在CODE上查看代码片派生到我的代码片
2. 解决邮件发送时报的以异常  
[java] view plaincopy在CODE上查看代码片派生到我的代码片
 -keep class javax.mail.**{*;}  
 -keep class com.sun.mail.**{*;}  
-keep class javax.activation.**{*;}  
-keep class org.apache.harmony.**{*;}  
-keep class java.security.**{*;}  
[java] view plaincopy在CODE上查看代码片派生到我的代码片
#解决:can't find referenced class java.beans.Beans  
-dontwarn org.apache.commons.collections.BeanMap  
-dontwarn java.beans.**  
#解决:can't find referenced class javax.security.sasl.Sasl  
-dontwarn com.sun.mail.imap.protocol.**  
[java] view plaincopy在CODE上查看代码片派生到我的代码片
   

OK,That's all.
--Thank you!
  

 

分享到:
评论

相关推荐

    介绍了Android代码混淆的三种方法及可能出现的问题

    介绍了Android代码混淆的三种方法及可能出现的问题.通过jocky或proguard实现jar包混淆;通过proguard实现Android项目整体导出混淆。并总结了一些容易出现的问题

    Android代码混淆的写法总结

    本篇文章主要介绍了Android代码混淆的写法总结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Android 混淆代码详解及实例

    为了防止自己的劳动成果被别人窃取,混淆代码能有效防止被反编译,下面来总结以下混淆代码的步骤: 1. 大家也许都注意到新建一个工程会看到项目下边有这样proguard-project.txt一个文件,这个对混淆代码很重要,...

    android app进行代码混淆实例详解

    接到一个新的任务,对现有项目进行代码混淆。之前对混淆有过一些了解,但是不够详细和完整,知道有些东西混淆起来还是比较棘手的。不过幸好目前的项目不是太复杂(针对混淆这块来说),提前完成~~现总结之。  第...

    代码混淆,及反编译

    代码混淆、Android、反编译、文档、详解;有自我总结的详细文档。现来分享。

    Proguard混淆Android/Java源代码

    看了好多博客论坛对proguard混淆android/java代码的介绍,自己用起来总出错。现总结具体用法步骤,并亲测无误,其中不乏参考之处还请见谅!

    Android应用开发之代码混淆

    Android项目中的混淆很easy,之所以写这篇总结是由于近期发现公司的代码居然没有混淆,反编译后代码随手可得。很震惊。

    Android代码块执行顺序分析总结

    本文介绍了Android代码块执行顺序分析总结,分享给大家,具体如下: 子类、父类变量,代码块,以及构造方法的加载顺序,是我们在程序开发中时不时遇到的一个问题,也是比较容易混淆的。 基础准备: 变量: 成员变量...

    Android安全保护.pdf

    从Android APP的脆弱性入手,分析恶意APP的工作原理和恶意行为,并针对相关脆弱点分析和总结了APP代码混淆与加壳、完整性校验、代码隐藏等保护措施,例如:通过自定义底层so文件结构、代码混淆、代码反调试、dex文件...

    王栋栋_周报_AndroidAPK相关总结_20190809.doc

    一如既往孤独相伴,万千纷扰与我何干.

    移动安全系列教学下载共43份.zip

    Android安全安全技术--22--其他Android安全知识总结.pdf Android安全安全技术--34--Emulator模拟器的配置和ROOT(终极版).pdf Android安全应用逆向--23--反编译classes.dex文件.pdf Android安全应用逆向--24--使用...

    【推荐】超全的移动安全自学资料精编合集(43份).zip

    移动安全: 我设计的Java代码混淆解决方案 Android安全安全技术: Android系统安全(上) Android安全安全技术: Android系统安全(下) Android安全安全技术: ARM汇编语言 Android安全安全技术: Small汇编语言 Android...

    Android学习系列教程实例.pdf

    Android 学习文档总结 ................... 1 DevDiv 推荐资源 ........................ 2 Windows 8 ........................................................... 2 iOS .........................................

    java反编译源码-android_app_security_crack:安卓应用的安全和破解

    总结安卓应用的安全措施和如何出于研究目的去破解安卓应用,其中介绍好多代的加密技术发展历史,包括常见的代码混淆,自我校验,dex文件变形,dex文件隐藏、so保护等等。总结了安卓的编译和反编译的基本流程和逻辑。...

    Android热更新开源项目Tinker集成实践总结

    前言 最近项目集成了Tinker,开始认为集成会比较简单,但是在实际操作的过程中还是遇到了一些问题,本文就会介绍在集成过程大家基本会遇到的主要问题。 考虑一:后台的选取 目前后台功能可以通过三种方式实现: ...

Global site tag (gtag.js) - Google Analytics