Android Proguard apk防止破解

本文介绍了如何在Eclipse中配置Proguard进行源码混淆,以增强Android应用的安全性。通过添加混淆规则并使用导出功能生成apk,可以观察到Proguard不仅混淆了代码,还进行了优化。使用dex2jar和jd-jui工具反编译混淆后的apk,可以发现类和成员变量被重新命名,展示了混淆效果。此外,文章还提到了映射文件`mapping.txt`用于查看混淆前后的关系。

Android源码很容易被工具反编译出来,因此,对源码做混淆是一种非常常用的保护源码的方式,不仅如此,proguard还会对源码做一些优化。下面小编将教大家如何在Eclipse中配置proguard混淆,并且如何查看混淆前后的对应关系。

工具/原料

  • Eclipse
  • dex2jar
  • jd-jui

方法/步骤

  1. 在Eclipse中新建proguard_demo的Android工程,里面只有MainActivity.java和Person.java。因为MainActivity是启动类,是不能被混淆的。我将演示下如何将Person混淆掉。



  2. 首先打开“project.properties”文件,然后在文件中添加一行:proguard.config=./proguard-project.txt。文件中之前就有一行,不过是被注释掉了。这句话的意思是:使用当前目录下的proguard-project.txt作为混淆配置文件。



  3. -dontpreverify

    -repackageclasses ''

    -allowaccessmodification

    -optimizations !code/simplification/arithmetic

    -keepattributes *Annotation*

    -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.view.View {

        public <init>(android.content.Context);

        public <init>(android.content.Context, android.util.AttributeSet);

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

        public void set*(...);

    }

    -keepclasseswithmembers class * {

        public <init>(android.content.Context, android.util.AttributeSet);

    }

    -keepclasseswithmembers class * {

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

    }

    -keepclassmembers class * implements android.os.Parcelable {

        static android.os.Parcelable$Creator CREATOR;

    }

    -keepclassmembers class **.R$* {

        public static <fields>;

    }



  4. 打开“proguard-project.txt”文件,在文件末尾添加:


  5. 然后运行,可以看到界面上有一个文本框,上面写着“hello,world”。然后用dex2jar反编译生成的apk,可以看到有MainActivity和Person类。


  6. 也就是说直接运行的方式是不能应用proguard的。正确的方式是使用Eclipse的导出功能。在工程上右键->"Export..."->“Export Android Application”,导出apk包。可以使用Eclipse默认的keystore,具体的使用方法请参考小编前面一个文档http://jingyan.baidu.com/article/3a2f7c2e61395d26afd61193.html。

  7. 用dex2jar反编译导出的proguard_demo.apk,然后用jd-jui打开。可以看到Person被混淆掉了。





  8. 查看Eclipse在工程的根目录下面生成了一个progurad的文件夹。打开这个文件夹可以看到4个文件。其中有一个是“mapping.txt”,这里面列出了混淆前后的对应关系。可以看到我们的Person被混淆成了bJ,里面的成员变量name被混淆成了a。在MainActivity中也能看出来。同时,proguard还把方法调用优化成了直接引用成员变量。



  9. 另:jd-gui-0.3.5.windows工具;

  10. 本人亲测,后续会对含有其它架包的混合 进行说明;未完待续........


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值