您的位置:首页 > 移动开发 > Android开发

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

2013-11-20 14:14 363 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: