android 混淆后的机制,Android 混淆机制

一、为什么要加入混淆机制?

为了防止apk被反编译后,很容易被其他人看懂。

混淆机制的本质是什么?

把原来有具体含义的类名,变量名,方法名,修改成让人看不懂的名字,例如方法名getUserName编程了方法名a

二、如何混淆代码

Android工程目录下有两个文件,project.properties,proguard-project.txt

1、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-18# 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

此行指定了混淆代码的配置文件,是/home/jltxgcy/android-sdk-linux/tools/proguard/proguard-android.txt。如果想优化你的代码,配置文件换成/home/jltxgcy/android-sdk-linux/tools/proguard/proguard-android-optimize.txt。

冒号后面就是自定义混淆规则文件,如下:

2、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 *;

#}# 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      增加自定义混淆机制,默认情况下,这里的规则会被附加到/home/jltxgcy/android-sdk-linux/tools/proguard/proguard-android.txt后面。

3、导出混淆后的apk

默认的debug版本的apk是不包含混淆信息的,所以要产生release版本的apk,点击右键,选择Android Tools->Export Signed Application Package,此时导出的apk是包含混淆信息的。

三、实例分析

91d6e8661d6490bb2d07691a871539e2.png

1、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-optimize.txt:proguard-project.txt

# Project target.

target=android-18

2、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 *;

#}

-keep public class * extends android.app.Activity #保留继承Activity类的类名

-keep public class * extends android.app.Application #保留继承Application类的类名

#-keepclassmembers class com.jltxgcy.crack.MainActivity$SNChecker {

# public boolean isRegistered();

#}

-keep class android.support.v4.** { *; }//保留这个第三方jar包不被混淆

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

3、/home/jltxgcy/android-sdk-linux/tools/proguard/proguard-android-optimize.txt如下:

# This is a configuration file for ProGuard.

# http://proguard.sourceforge.net/index.html#manual/usage.html

# Optimizations: If you don‘t want to optimize, use the

# proguard-android.txt configuration file instead of this one, which

# turns off the optimization flags. Adding optimization introduces

# certain risks, since for example not all optimizations performed by

# ProGuard works on all versions of Dalvik. The following flags turn

# off various optimizations known to have issues, but the list may not

# be complete or up to date. (The "arithmetic" optimization can be

# used if you are only targeting Android 2.0 or later.) Make sure you

# test thoroughly if you go this route.

-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*

-optimizationpasses 5

-allowaccessmodification

-dontpreverify

# The remainder of this file is identical to the non-optimized version

# of the Proguard configuration file (except that the other file has

# flags to turn off optimization).

-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-verbose

-keepattributes *Annotation*

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

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

# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native

-keepclasseswithmembernames class * { #保留native的方法的方法名和包含native方法的类的类名不变

native ;

}

# keep setters in Views so that animations can still work.

# see http://proguard.sourceforge.net/manual/examples.html#beans

-keepclassmembers public class * extends android.view.View {#保留继承于View的类中set*和get*方法的方法名不变

void set*(***);

*** get*();

}

# We want to keep methods in Activity that could be used in the XML attribute onClick

-keepclassmembers class * extends android.app.Activity { #保留继承于Activity的类中以View为参数,返回值是void的方法的方法名

public void *(android.view.View);

}

# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations

-keepclassmembers enum * {

public static **[] values();

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

}

-keep class * implements android.os.Parcelable { #保留实现了Parcelable接口的类的类名以及Parcelable$Createor内部类的类名

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

}

-keepclassmembers class **.R$* { #保留R$*类中静态字段的字段名

public static ;

}

# The support library contains references to newer platform versions.

# Don‘t warn about those in case this app is linking against an older

# platform version. We know about them, and they are safe.

-dontwarn android.support.**

4、导出签名的apk,命名为CrackApk01.apk。

5、在proguard-project.txt中去掉注释

-keepclassmembers class com.jltxgcy.crack.MainActivity$SNChecker {

public boolean isRegistered();

}         再次导出签名的apk,命名为CrackApk02.apk。

四、proguard-android-optimize.txt和proguard-project.txt说明

-keep class 保留类名

-keepclassmembers 保留类中的方法或者字段名

-keepclasseswithmembernames 保留类名和类中的方法或者字段名

五、工程源码下载

原文:http://blog.csdn.net/jltxgcy/article/details/22670651

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值