Android_Proguard代码混淆器

1.混淆器概述

混淆器通过删除从未用过的代码和使用晦涩名字重命名类、字段和方法,对代码进行压缩,优化和混淆,生成一个比较小的.apk文件,该文件比较难进行逆向工程,是一种重要的保护手段。

混淆器被集成在android 构建系统中,所以你不必手动调用它。同时混淆器仅在发布模式下进行构建应用程序的时候才会运行起来,所以在调试模式下构建程序时,你不必处理混淆代码。这个文档描述了怎样启用并配置混淆器,以及使用跟踪(retrace)工具对混淆的堆栈跟踪信息(stack traces)进行解码。

2.启使混淆器

当你新建了一个Android工程之后,一个proguard.cfg文件会在工程的根目录下自动创建。这个文件定义了混淆器是怎样优化和混淆你的代码的,所以懂得怎样根据你的需要来定制是非常重要的。缺省的配置文件仅覆盖到了通常情况,所以根据你的需求,很可能需要编辑它。接下来的内容是关于通过定制混淆器配置文件来对混淆器配置。

为了让启用混淆器作为Ant或者Eclipse构建过程中一部分,可以在<project_root>/default.properties文件中,设置proguard.config属性。路径可以是绝对路径或者工程根目录的相对路径。

如果你让proguard.cfg文件在缺省位置(工程的根目录),你可以像这样指定位置:proguard.config=proguard.cfg,debug模式混淆无效,通过export导出有效。

3.混淆器后生成文件含义

(1).dump.txt

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

(2).mapping.txt

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

(3).seeds.txt

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

(4).usage.txt

列出从.apk中剥离的代码。

注意: 每次在发布模式下构建时,这些文件都会被最新的文件覆盖。所以每次发布程序时候,为了反混淆来自构建时产生的bug报告,请保存这些文件的一个拷贝。需要保存这些产生的Proguard文件。

4.混淆代码堆栈跟踪信息

当混淆代码并输出了一个堆栈调试信息时,这些方法名字是混淆过的,虽然可以进行调试,但是调试变得困难。幸运的是,每当混淆器运行时候,它都会输出到文件<project_root>/bin/proguard/mapping.txt中,该文件包含了从原始类,方法和属性名字到混淆后名字的映射,每次打包时应注意保存好该文件。使用<sdk_root>/tools/proguard/retrace.sh脚本命令能把混淆后的堆栈调试信息转换为可以未混淆前的堆栈调试信息。

retrace.bat|retrace.sh [-verbose] mapping.txt [<stacktrace_file=程序bug产生的堆栈信息文件>]

$sh /Applications/ADT/sdk/tools/proguard/bin/retrace.sh  -verbose /Users/zf/Documents/workspace/GridTest/proguard/mapping.txt /Users/zf/Desktop/bug.txt

5.常见混淆代码

(1).Android工程混淆

# 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 <methods>;
}

# 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 {
   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 {
   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 {
  public static final android.os.Parcelable$Creator *;
}

-keepclassmembers class **.R$* {
    public static <fields>;
}

(2).引入Gson包

##---------------Begin: proguard configuration for Gson  ----------
# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature  

# Gson specific classes
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.stream.** { *; }
-keep class com.google.gson.examples.android.model.** { *; }
-keep class com.google.gson.** { *;}  

##---------------End: proguard configuration for Gson  ---------- 
时间: 2024-09-30 06:46:37

Android_Proguard代码混淆器的相关文章

Android程序加入代码混淆器

加入代码混淆器,主要是加入proguard-project.txt文件的规则进行混淆,之前新建Android程序是proguard.cfg文件 可以看一下我采用的通用规则(proguard-project.txt文件) -optimizationpasses 5 -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontskipnonpubliclibraryclassmembers -dontpreverify -ver

5个常用Java代码混淆器 助你保护你的代码

从事Android App开发的都知道,一旦应用被破解,什么源代码.资源文件等都可能泄露,重要点有so文件的支付类.金融类应用等安全更是容易受到威胁!就Java语言编程,可以通过逆向工程反编译得到Java程序的源代码,这种反编译工具有jad .dex2jar .jdec .Dedexer 等.因此,为保护我们的劳动成果,尽可能给反编译人员制造障碍,我们可以用一些代码混淆器混淆代码,保护Java的类文件.然后,在混淆的基础上再做一层深层保护——加密.这个方法现在也比较流行,目前,有这方面技术的,有

.NET代码混淆控件Dotfuscator检测篡改

.NET混淆器Dotfuscator提供了强大的篡改防御和提示功能,可以有效地检测篡改,注入事实篡改防御,以及自动化事故管理和响应.本文主要介绍如何利用.NET代码混淆器Dotfuscator检测应用程序的篡改. Dotfuscator包含了一个篡改检测工具,它位于Dotfuscator文件夹中(C:\Program Files\PreEmptive Solutions\Dotfuscator Professional Edition 4.4\TamperTester.exe). 测试篡改步骤如

关于java加壳和代码混淆

关于java加壳和代码混淆 在C中,进行代码加密,首要经过加壳的方法.所谓加壳,即是先将程序代码加密,然后用特定的程序加载器,将代码解密后加载进内存,这样能够在避免代码的反编译,当然,有加壳东西,也有解壳东西,尽管不能100%避免crack,但仍然给代码增加一层有力的维护. 然而在Java中,维护代码是件很困难的工作,由于class文件十分标准,很容易反编译,且反编译后的代码明晰可读.常见的维护办法是运用代码混淆器,打乱class和function以及变量的姓名,能够搅扰反编译后的代码的可读性.

ProGuard代码混淆

简介 ProGuard是一个开源的Java代码混淆器,下载ProGuardGui工具. Maven Spring Boot ProGuard demo演示 <build> <finalName>${artifactId}</finalName> <plugins> <plugin> <groupId>com.github.wvengen</groupId> <artifactId>proguard-maven-

.NET混淆器Dotfuscator v4.25发布,界面优化,改进多项功能

Dotfuscator是一个.NET混淆器和压缩器,它可以帮助您防止您的应用程序被反编译.本次更新改进了界面,并增强和改进了多个功能,下面就一起来看看吧! [点击下载Dotfuscator试用] 增强 增加了一个新的调试检查功能. 新增"Action"属性"DebuggingCheckAttribute"和"InsertTamperCheckAttribute"来对应用程序进 行控制,管理其Debugging Check和Tamper Check

Android代码混淆(新版本ADT)

说明: 看网上说的很多Android代码混淆的方法都是旧版本ADT的方法,今天用到代码混淆,记下来分享一下,有需要的可以看看. 实践: 我就不写东西了,还是直接给大家看我项目中用到的文件就好了.注释我写在图片上了. 第二个文件的代码我还是写出来吧,可能有朋友用的和我的差不多.(注意不要把注释写进去) 这两个文件都是项目生成的时候由ADT自动生成的,不用自己加. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 -keep public class * extend

Android代码混淆之混淆规则

请尊重他人的劳动成果,转载请注明出处:<Android代码混淆技巧> 因为Android是使用Java开发的,所以开发者可以使用ProGuard对代码进行混淆.SDK已经集成了ProGuard工具,开发者可以从SDK目录下的\tools\proguard目录中进行查看. ProGuard是一个免费的Java类文件收缩,优化,混淆和预校验器.它可以检测并删除未使用的类,字段,方法和属性.它可以优化字节码,并删除未使用的指令.它可以将类.字段和方法使用短无意义的名称进行重命名.最后,预校验的Jav

Android 编程下的代码混淆

什么是代码混淆 Java 是一种跨平台的.解释型语言,Java 源代码编译成中间”字节码”存储于 class 文件中.由于跨平台的需要,Java 字节码中包括了很多源代码信息,如变量名.方法名,并且通过这些名称来访问变量和方法,这些符号带有许多语义信息,很容易被反编译成 Java 源代码.为了防止这种现象,我们可以使用 Java 混淆器对 Java 字节码进行混淆. 混淆就是对发布出去的程序进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能,而混淆后的代码很难被反编译,即使反编译成功