关于android防止反编译的保护措施——混淆编译

ndroid程序基本上都是java语言很容易被反编译,这里呢google在android2.3的时候就加入了ProGuard代码混淆工具。
这里呢,要分两部分说。一部分是2.3时代,一部分是4.0时代,他们的混淆是不一样的,但也大同小异。
         先说2.3时代:在自动生成项目时sdk会自动生成两个文件,一个是proguard.cfg  一个是project.properties  ,他们就是反编译用的关键。
首先,在project.properties  中加入一行代码  proguard.config = proguard.cfg     这样proguard的配合就指向了proguard.cfg这个文件。 如果不加这句就不会进行混淆编译
之后进入proguard.cfg 能看到以下代码:

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-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 com.android.vending.licensing.ILicensingService

-keepclasseswithmembernames class * {
    native <methods>;
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {
    public <init>(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 {
  public static final android.os.Parcelable$Creator *;
}
这里也可以根据你的需求增加命令行  具体请自行查阅文档或百度
这个就是进行反编译的配置语句了。此时再生成的APK程序反编译后就是混淆后的代码了。

注意:当有第三方jar包引入时,可能需要在proguard.cfg中添加 -dontwarn 指令。
例子1:ADT2.0后SDK自动生成项目会自动添加一个叫 android-support-v4.jar的jar包 这时进行反编译会报错,说 Proguard returned with error code 1. 云云。这就是找不到这个jar包的原因。
这时加入  -dontwarn android.support.v4.**  这句就OK了
例子2:这是关于百度地图api的,引入百度地图的jar包baidumapapi_v2_1_1.jar。也是出现和上面差不多的错误都是
Proguard returned with error code 1. 云云。这就是找不到这个jar包的原因。
这时加入 -dontwarn com.baidu.** 就OK了

细心的读者应该发现了混淆指令都是多个单词的合写,例如:
-keepclassmembers    是keep  class member ,-dontwarn 是don't  warn
关于第三方jar包的指令就很好了解了 -dontwarn  (jar包的主题目录).**(全匹配)    所以刚才的指令就是  com.baidu下所有类的匹配共同混淆 这样反编译出来连里面百度api的内容也是混淆的。 

下面来说说android4.0的混淆编译
这个时候项目自动生成的两个文件分别是 project.properties 和 proguard-project.txt
在project.properties中能看到以下代码
这些#都是用来注释的
# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system edit
# "ant.properties", and override values to adapt the script to your
# project structure.
#
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt                         ←就这行去掉#

# Project target.
target=android-17

只要去掉倒数第三行的#就可以了,将这句proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt    释放出来  这也是个指向性语句将配置指向proguard-project.txt
进入proguard-project.txt看到以下代码:
# 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 *;                                                                                                   ←反注释 将语句释放出来
#}                                                                                                                  ←反注释 将语句释放出来

最后3行都是混淆指令 亦可以根据需求添加混淆指令

这里暂时没发现对第三方jar包的不支持  如果读者发现了请留言,或者发现了错误请大神指正。


原文地址:http://www.apkbus.com/blog-57993-53473.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值