`
永远的菜鸟
  • 浏览: 55181 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

android 混淆

 
阅读更多

注意:这里介绍的混淆是2.3SDK以后我方式。

 

1.打开工程会发现一个文件“proguard-android.txt”

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

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

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

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

}

 

 

上述文件就是android 自带的文件,从脚本中可以看到,混淆中保留了继承自Activity、Service、Application、BroadcastReceiver、ContentProvider等基本组件。

并保留了所有的Native变量名及类名,所有类中部分以设定了固定参数格式的构造函数,枚举等等。

此文件中的每一项在后面会具体列出。

 

2。操作步骤

  1).在工程的"default.properties"中添加这样一句话“proguard.config=proguard-android.txt”

  2).签名打包:选中工程--->右击Android Tools—Export Signed Appalication Packges

  3).打出的APK反编译你会发现代码都边了,此APK可以安装使用。

 

3。遇到问题

  1).如果不能打包,看出错在那里,一般的出现warning 的话,你在 proguard-android.txt文件中添加这一命令

    -dontwarn

  2).打包出的结果比以往的不混淆的大小是不一样的,可能省略很多东西。具体要看 proguard文件夹中的           四个.txt文件

       运行混淆器之后输出的文件有:

         dump.txt

                   描述.apk包中所有class文件的内部结构。

         mapping.txt

                   列出了源代码与混淆后的类,方法和属性名字之间的映射。这个文件对于在构建之后得到的     bug报告是有用的,因为它把混淆的堆栈跟踪信息反翻译为源代码中的类,方法和成员名字。更多信息,    查看解码混淆过的堆栈跟踪信息。

         seeds.txt

                   列出那些未混淆的类和成员。

         usage.txt

                   列出从.apk中剥离的代码

  3).有些类是不能混淆的,从proguard-android.txt文件可以看出,保留了很多类和方法。

  4).新建的工程中可能proguard-android.txt文件是空的,你可以去SDK目录下..\android-sdk-windows\tools\proguard查找这个文件。

 

 

 

 

 

3.介绍下proguard中的各个代码的具体含义

参数: 

 

-include {filename}    从给定的文件中读取配置参数 

 

-basedirectory {directoryname}    指定基础目录为以后相对的档案名称 

 

-injars {class_path}    指定要处理的应用程序jar,war,ear和目录 

 

-outjars {class_path}    指定处理完后要输出的jar,war,ear和目录的名称 

 

-libraryjars {classpath}    指定要处理的应用程序jar,war,ear和目录所需要的程序库文件 

 

-dontskipnonpubliclibraryclasses    指定不去忽略非公共的库类。 

 

-dontskipnonpubliclibraryclassmembers    指定不去忽略包可见的库类的成员。 

 

 

保留选项 

-keep {Modifier} {class_specification}    保护指定的类文件和类的成员 

 

-keepclassmembers {modifier} {class_specification}    保护指定类的成员,如果此类受到保护他们会保护的更好 

 

-keepclasseswithmembers {class_specification}    保护指定的类和类的成员,但条件是所有指定的类和类成员是要存在。 

 

-keepnames {class_specification}    保护指定的类和类的成员的名称(如果他们不会压缩步骤中删除) 

 

-keepclassmembernames {class_specification}    保护指定的类的成员的名称(如果他们不会压缩步骤中删除) 

 

-keepclasseswithmembernames {class_specification}    保护指定的类和类的成员的名称,如果所有指定的类成员出席(在压缩步骤之后) 

 

-printseeds {filename}    列出类和类的成员-keep选项的清单,标准输出到给定的文件 

 

压缩 

-dontshrink    不压缩输入的类文件 

 

-printusage {filename} 

 

-whyareyoukeeping {class_specification}     

 

优化 

-dontoptimize    不优化输入的类文件 

 

-assumenosideeffects {class_specification}    优化时假设指定的方法,没有任何副作用 

 

-allowaccessmodification    优化时允许访问并修改有修饰符的类和类的成员 

 

混淆 

-dontobfuscate    不混淆输入的类文件 

 

-printmapping {filename} 

 

-applymapping {filename}    重用映射增加混淆 

 

-obfuscationdictionary {filename}    使用给定文件中的关键字作为要混淆方法的名称 

 

-overloadaggressively    混淆时应用侵入式重载 

 

-useuniqueclassmembernames    确定统一的混淆类的成员名称来增加混淆 

 

-flattenpackagehierarchy {package_name}    重新包装所有重命名的包并放在给定的单一包中 

 

-repackageclass {package_name}    重新包装所有重命名的类文件中放在给定的单一包中 

 

-dontusemixedcaseclassnames    混淆时不会产生形形色色的类名 

 

-keepattributes {attribute_name,...}    保护给定的可选属性,例如LineNumberTable, LocalVariableTable, SourceFile, Deprecated, Synthetic, Signature, and InnerClasses. 

 

-renamesourcefileattribute {string}    设置源文件中给定的字符串常量 

分享到:
评论

相关推荐

    android 混淆工具

    Android混淆工具就是用来提升应用程序安全性的一种手段,它能够有效地保护代码不被逆向工程分析,降低恶意攻击的风险。本篇将详细介绍Android混淆工具,尤其是其中的经典工具ProGuard。 Android混淆工具的主要功能...

    Android 混淆打包不混淆第三方jar包

    Android混淆打包不混淆第三方jar包Android 混淆打包不混淆第三方jar包

    Android混淆技术

    Android混淆技术是Android应用开发者用于提升应用安全性的重要手段,主要目的是为了防止应用被反编译。在移动应用领域,反编译是一个常见的问题,特别是在应用包含敏感数据或者进行商业运营时,防止代码泄露变得尤为...

    Android 混淆配置

    本文将详细解析Android混淆配置的相关知识点,包括混淆的目的、配置原理、常用配置指令以及注意事项。 混淆的目的: 1. **保护代码安全**:混淆可以将源代码中的类名、方法名和变量名转化为无意义的简短名称,使得...

    Android混淆编译Demo

    在这个"Android混淆编译Demo"中,我们将深入探讨如何在Android Studio 3.1.2环境下进行混淆配置和编译。 首先,混淆是通过ProGuard工具实现的,它是一个Java字节码混淆器、优化器和裁剪器。在Android Studio中,...

    android 混淆 去除第三方jar

    Android Studio默认集成了ProGuard工具,它是Android混淆的核心。ProGuard不仅可以混淆代码,还能优化、压缩和删除未使用的类和方法。 标题提到的“android 混淆 去除第三方jar”,意味着我们需要处理包含在项目中...

    Android混淆 各个版本proguard文件

    本篇将详细介绍Android混淆以及各个版本的Proguard文件,帮助开发者理解其工作原理和使用方法。 混淆(Proguard)是一种Java字节码混淆工具,它能对应用的类、方法和变量进行重命名,使其变得难以理解和逆向工程,...

    android 混淆出错 Can't process class 解决办法

    在Android应用开发中,混淆(ProGuard)是一个重要的步骤,用于优化代码、移除未使用的类和方法,以及为发布版本提供安全保护。然而,在混淆过程中可能会遇到各种问题,其中"Can't process class"错误是常见的一种。...

    android混淆及报错解决.docx

    然而,混淆过程中可能会遇到一些问题,本篇文章将详细讲解Android混淆的原理、步骤以及如何解决常见的报错。 1. **混淆的基本原理** 混淆是通过改变类名、方法名、变量名来达到代码加密的效果,同时优化代码,移除...

    android混淆规则

    直接复制这个到Android项目中即可使用,只需要添加项目中用到的第三方的混淆规则即可,如果有自己的需要最好修改一下,不修改也无大碍

    android自定义混淆字典

    在 android studio 使用自定义混淆字典进行混淆,增加app被反编译后阅读的难度, 内容为16位由0,o,O,3个字符生产的如OoO0oOoOoO0O0oO0这样的不重复字符串,使用方式:将下载的dictoO0.txt放在proguard-rules.pro同级...

    Android 混淆代码详解及实例

    本文将深入探讨Android混淆代码的原理、步骤以及实例。 首先,Android Studio项目中默认包含一个`proguard-project.txt`文件,这是配置混淆规则的地方。如果误删,可以从其他项目中复制或者重新创建。在`proguard-...

    Android-Androidstudio多module混淆成一个Jar

    本文将详细介绍如何在Android Studio中将多个Module混淆并打包成一个Jar文件。 1. **创建Module** 首先,确保你已经拥有多个独立的Android Studio Module。每个Module代表一个独立的功能或库。在Android Studio中,...

    android 混淆器

    ### Android混淆器(ProGuard)知识点详解 #### 一、概述 **Android混淆器(ProGuard)**是一种用于压缩、优化并混淆Java字节码的工具,尤其适用于Android应用程序的开发过程中。通过删除未使用的代码,并将类名、方法...

    Android SO文件保护加固——混淆篇(一)源代码

    在Android SO文件保护中,混淆主要涉及以下几个方面: 1. **JNI方法名混淆**:JNI(Java Native Interface)是Java与原生代码交互的桥梁。在描述中提到的"JNI方法名混淆",就是将原本易于理解的JNI方法名改写为无...

    Android 资源混淆工具

    在Android开发过程中,为了增强应用的安全性,开发者有时会采取资源混淆这一技术手段。资源混淆主要是通过对应用中的资源文件(如图片、布局、字符串等)进行重命名和重新打包,使其变得难以理解和逆向工程,从而...

    android混淆与签名与反编译方法

    在Android开发中,混淆、签名和反编译是三个关键步骤,它们对于应用程序的安全性和发布流程至关重要。 **混淆**的主要目的是保护代码不被轻易逆向工程解析,减少恶意攻击的可能性。在Android中,通常使用ProGuard...

    代码混淆—关于android被反编译的两种解决方案

    本文将深入探讨两种防止Android应用被反编译的策略:代码混淆和使用安全工具。 首先,我们来了解一下什么是代码混淆。代码混淆是一种通过改变代码的可读性来增加其复杂性的技术,主要是通过对变量名、函数名和类名...

    android混淆编译代码 防止反编译

    本文将详细介绍如何在Android项目中进行代码混淆,以防止反编译。 首先,我们需要在项目文件中进行配置。在Android项目中,找到`project.properties`文件,通常位于项目的根目录下。在文件的最后添加一行`proguard....

    Android 签名混淆打包文档

    ### Android签名混淆打包详解 #### 一、签名与混淆打包的重要性 在Android应用开发过程中,签名与混淆打包是非常重要的步骤。签名确保了应用的身份唯一性和后续版本更新的一致性,而混淆则增强了应用的安全性,保护...

Global site tag (gtag.js) - Google Analytics