J2EE-web工程ProGuard代码混淆07_28

合集下载

代码混淆加密方法

代码混淆加密方法

代码混淆加密方法
代码混淆是一种保护源代码不被轻易理解或逆向工程的方法。

下面是一些常用的代码混淆技术:
1. 名称混淆(Name Obfuscation):这是最基础的混淆方式,即将类、变量、函数等的名称更改为难以理解的形式。

这样即使源代码被泄露,攻击者也难以理解代码的含义。

2. 控制流混淆(Control Flow Obfuscation):控制流混淆的目标是使代
码的执行流程难以理解。

例如,可以将条件语句的顺序打乱,或者使用复杂的跳转结构,使代码的逻辑难以理解。

3. 数据混淆(Data Obfuscation):数据混淆的目标是使数据结构难以理解。

例如,可以将数组元素的位置打乱,或者将数据结构中的元素混合使用,使攻击者难以理解数据的含义。

4. 指令替换(Instruction Substitution):指令替换是指将源代码中的某
些指令替换为等效但不易理解的指令。

例如,可以将加法指令替换为减法指令,使得攻击者难以理解代码的实际功能。

5. 宏展开(Macro Expansion):宏展开是指将源代码中的某些部分替换
为宏定义,然后在编译时展开这些宏。

这样可以减少代码的体积,并使攻击者难以理解代码的实际功能。

6. 动态代码生成(Dynamic Code Generation):动态代码生成是指根据运行时的环境动态生成代码。

例如,可以根据运行时的输入动态生成函数的实现,使得攻击者难以理解代码的实际功能。

以上就是一些常见的代码混淆技术。

在实际应用中,通常会结合使用多种混淆技术来提高代码的安全性。

移动应用开发中常见的代码混淆与反编译保护技术

移动应用开发中常见的代码混淆与反编译保护技术

移动应用开发中常见的代码混淆与反编译保护技术在如今移动互联网的高速发展下,移动应用程序的开发变得越来越受欢迎。

然而,随着应用程序的普及,一些不法分子也开始利用各种手段来窃取应用程序的代码,进行盗版和篡改。

为了保护应用程序的安全,开发者们力求采取一系列的代码混淆与反编译技术,以提高代码的安全性和保护应用程序的知识产权。

一、代码混淆技术代码混淆是一种将源代码转换成难以理解和阅读的形式的技术,通过代码混淆可以增加对代码的保护,减少被反编译的风险。

常见的代码混淆技术包括变量和函数的重命名、代码结构的改变、无用代码的插入等。

1. 变量和函数的重命名:通过将变量和函数进行重命名,可以使代码的阅读性大大降低,增加代码的混淆性。

开发者可以使用自动化工具将变量和函数名替换为无意义的字符串,使得代码难以理解和反编译。

2. 代码结构的改变:改变代码的逻辑结构和代码块的位置可以使代码更复杂、更难以理解。

开发者可以使用代码混淆工具重新组织代码的结构,增加代码的抽象性,增加代码的混淆程度。

3. 无用代码的插入:在代码中插入大量的无用代码可以增加代码的复杂性,使得反编译者难以分析代码的真正逻辑。

开发者可以通过自动化工具在代码中插入大量的无用代码,提高代码的混淆程度。

二、反编译保护技术反编译保护技术旨在防止应用程序被反编译,以减少盗版和篡改的风险。

常见的反编译保护技术包括代码加密、代码壳化和虚拟机技术。

1. 代码加密:通过对代码进行加密,可以增加代码的保护性,使得反编译者无法轻易获取源代码。

开发者可以使用加密算法将关键代码进行加密,并在运行时进行解密,以提高代码的安全性。

2. 代码壳化:代码壳化是一种将应用程序的二进制代码进行包装和加密的技术,可以有效防止应用程序被反编译。

开发者可以使用代码壳化工具将应用程序的二进制代码进行加密,以增加代码的安全性和反编译的难度。

3. 虚拟机技术:通过将应用程序代码编译成虚拟机指令,可以增加代码的保护性。

proguard混淆原理

proguard混淆原理

proguard混淆原理ProGuard混淆原理在现代软件开发中,保护代码安全性是一项非常重要的任务。

ProGuard混淆工具就是为了解决这个问题而诞生的。

ProGuard是一种Java字节码混淆工具,它可以对Java代码进行压缩、优化和混淆,以保护代码的安全性和减小应用程序的体积。

ProGuard的混淆原理主要包括三个方面:压缩、优化和混淆。

ProGuard会通过压缩机制来减小代码的体积。

这是通过删除无用的代码、变量和注释来实现的。

通过这种方式,可以减小应用程序的体积,提高程序的运行效率。

ProGuard会对代码进行优化。

这是通过对字节码进行分析和重写来实现的。

ProGuard会对代码进行优化,使得代码在运行时更加高效。

它会检测和删除无用的方法、字段和类,并且会对代码进行重新排序和重写,以优化代码的执行路径和性能。

ProGuard会对代码进行混淆。

混淆是指对代码进行重命名,使得代码变得更加难以理解和分析。

ProGuard会对类名、方法名、字段名等进行重命名,并且会对代码进行重组和重写,以增加代码的复杂性和混淆性。

这样一来,即使有人对代码进行逆向工程,也很难还原出原始的代码逻辑和结构。

ProGuard混淆原理的核心在于对代码进行重写和重命名。

通过对代码进行重写,可以使得代码的逻辑变得更加复杂,增加了代码的阅读和理解难度。

通过对代码进行重命名,可以使得代码的意义变得更加模糊,增加了代码的分析和理解难度。

这样一来,即使有人对代码进行反编译和逆向工程,也很难还原出原始的代码逻辑和结构。

总结一下,ProGuard混淆工具通过压缩、优化和混淆三个方面的处理,可以对Java代码进行保护和加密。

它可以减小应用程序的体积,提高程序的运行效率,同时也可以保护代码的安全性。

通过对代码进行重写和重命名,可以使得代码的逻辑和结构变得更加复杂和模糊,增加了代码的分析和理解难度。

这样一来,即使有人对代码进行逆向工程,也很难还原出原始的代码逻辑和结构。

代码混淆方法

代码混淆方法

代码混淆方法
代码混淆(Code Obfuscation)是一种使代码更难以理解和修改的技术。

以下是一些常见的代码混淆方法:
1. 变量和函数重命名:将变量和函数名替换为无意义或难以理解的名称,这样可以增加阅读和理解代码的难度。

2. 控制流混淆:改变代码的执行流程,例如使用复杂的条件语句和循环,或者将代码的顺序打乱。

3. 数据混淆:改变数据的表现形式,例如使用加密或混淆算法处理数据,或者将数据嵌入到其他数据中。

4. 代码插入:在代码中插入无用的语句或代码片段,以增加代码的体积和复杂性。

5. 代码删除:删除一些无用的代码,使剩下的代码更难以理解。

6. 使用编译器或解释器的特性:利用编译器或解释器的特性,例如将代码编译为字节码或使用特殊的语言特性,可以使代码更难以理解。

7. 反编译防护:使用反编译防护技术,例如将代码转换为字节码或使用特殊的编译器选项,以防止代码被反编译。

需要注意的是,虽然代码混淆可以提高代码的安全性和保密性,但它并不能完全防止代码被破解或逆向工程。

因此,在使用代码混淆时,应该根据具体情况选择合适的方法,并配合其他安全措施来提高代码的安全性。

代码混淆技术研究综述

代码混淆技术研究综述

代码混淆技术研究综述引言随着信息技术的快速发展和普及,软件的开发和使用已经成为现代社会的一个重要组成部分。

随之而来的问题是软件安全性的挑战。

恶意攻击者往往试图通过逆向工程和分析软件源代码来发现其漏洞和弱点,从而实施攻击。

为了应对这一挑战,代码混淆技术应运而生。

代码混淆技术旨在通过改变软件源代码的结构和逻辑,使其难以理解和分析,从而加强软件的安全性。

本文将对代码混淆技术进行综述,并探讨其研究现状和发展趋势。

一、代码混淆技术概述代码混淆技术是一种通过对软件源代码进行转换和重组来隐藏其真实意图和逻辑的手段。

通过代码混淆,可以使软件的逻辑结构变得复杂和难以理解,从而降低攻击者对软件源代码的分析效率,增加攻击者攻击软件的成本和难度。

代码混淆技术通常包括以下几种常见手段:1. 控制流混淆:通过改变软件的控制流程,使得程序的执行路径变得复杂和混乱,增加攻击者理解和分析程序的难度。

代码混淆技术的目标是增加软件系统的复杂性,使得攻击者难以理解和分析软件的内部逻辑和结构,从而提高软件的安全性。

二、代码混淆技术研究现状代码混淆技术是软件安全领域的一个重要研究方向,当前已经取得了一些研究成果。

代码混淆技术的研究现状主要包括以下几个方面:1. 控制流混淆技术研究控制流混淆是代码混淆技术中的一个重要手段,当前已经有许多研究针对控制流混淆进行了深入的探讨。

现有的控制流混淆技术主要包括基础块替换、指令混淆、虚假指令插入等方法。

通过这些技术,可以有效地改变程序的控制流程,使得程序的执行路径变得复杂和难以理解。

2. 数据混淆技术研究数据混淆技术是代码混淆技术的另一重要方面。

目前已经有许多研究着眼于数据混淆技术的研究。

常见的数据混淆技术包括变量重命名、数据加密、数据重排等方法。

通过这些技术,可以有效地隐藏程序中的数据访问关系,增加程序的复杂度。

3. 代码混淆工具研究当前已经有一些代码混淆工具得到了研究和开发,并广泛应用于实际的软件开发中。

Java Web 代码混淆方案 2

Java Web 代码混淆方案 2

Java Web 代码混淆方案1. 目的为保护公司程序,防止核心代码外泄,增加项目被反编译的难度,对发布程序进行混淆处理,特制定此方案。

本方案以功率预测工程(SPPP-*)为例基于proguard-maven-plugin插件进行混淆。

2. 插件说明2.1. proguard-maven-pluginproguard-maven-plugin是代码混淆工具Proguard对应的maven插件,对jar包进行混淆处理。

配置如下:3. 不混淆项说明DAO类DAO类和MyBatis的Mapper映射文件中的配置(如:namespace、id)相关联。

如果混淆DAO类中的代码,Mapper中的配置将失效。

model类model与DAO的原因大致相同,也是因为Mapper映射文件中的配置与model相关联。

VO类VO类是转成JSON与前端进行交互的,如果混淆了,那么前端js与后台对应不上。

在spring的配置文件中配置的类spring配置文件中对Bean进行了声明、属性注入,混淆代码后会造成spring无法装载Bean。

shiro、springmvc配置文件中声明的自定义类Controller的方法参数前端的请求param对应Controller方法得参数名称。

AOP设置的切入点方法(如:声明式事务配置的方法名规则)AOP在工程中使用方法名前缀进行匹配,混淆方法名称将造成AOP的失效。

web.xml 中配置的自定义Servlet 、Filter4. 过程说明合并jar 包;合并后的jar 包混淆处理;用混淆jar 包替换war 包中个未混淆jar 包;4.1. 合并jar 包把各个模块的jar 包解压到一个目录下(提示覆盖时确认即可),注意依赖顺序,运行 jar cvf SPPP-shade-pg.jar * 进行打包,生成的jar 包待用。

4.2. maven 构建混淆模块在parent项目上创建obfuscate模块。

代码混淆

代码混淆

前一段时间PM让我搞代码混淆,开始我一头雾水,不清楚是搞什么的。

(代码混淆就是对编译的class文件中的一些处理,也就是防止class文件反编译后产生可读性很强的源文件)。

接到任务后到网上狂找这方面的东东,有以下工具(jocky,proguard,retroguard......)我只使用了两种jocky和proguard,主要说一下proguad。

下面是我翻译的proguard的帮助文档。

本人E文不是很好,如果有不解的地方可以参考一下原帮助文档。

ProGuard是一个免费的java类文件压缩,优化,混淆器.它探测并删除没有使用的类,字段,方法和属性.它删除没有用的说明并使用字节码得到最大优化.它使用无意义的名字来重命名类,字段和方法.ProGuard的使用是为了:1.创建紧凑的代码文档是为了更快的网络传输,快速装载和更小的内存占用.2.创建的程序和程序库很难使用反向工程.3.所以它能删除来自源文件中的没有调用的代码4.充分利用java6的快速加载的优点来提前检测和返回java6中存在的类文件.参数:-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} 保护指定的类和类的成员,但条件是所有指定的类和类成员是要存在。

proguard用法

proguard用法

proguard用法ProGuard是一个用于Java字节码的代码优化器和混淆器,可以帮助开发者在保持应用程序功能完整的同时,减少应用程序的大小,并提高应用程序的运行效率和安全性。

在本文中,我们将探讨ProGuard的用法,并提供一些相关参考内容,帮助开发者更好地使用ProGuard来优化和保护他们的Java应用程序。

ProGuard的基本用法非常简单,只需执行以下步骤即可:1. 下载并安装ProGuard:可以从ProGuard的官方网站上下载最新的ProGuard版本,并将其解压到一个本地目录中。

2. 创建一个ProGuard配置文件:可以通过手动创建一个文本文件,并命名为`proguard.cfg`,也可以使用ProGuard自带的GUI进行配置文件的生成。

配置文件是用于定义ProGuard的处理规则的,它会告诉ProGuard哪些类、方法和字段需要被保留,哪些可以被优化和混淆。

以下是一个示例配置文件的内容:```-injars input.jar-outjars output.jar-libraryjars /path/to/android.jar-dontwarn-keep public class com.example.MyClass {public static void main(ng.String[]);}-optimizationpasses 5```3. 运行ProGuard:可以使用命令行界面或脚本来运行ProGuard。

在命令行界面中,使用以下命令运行ProGuard:```java-jar/path/to/*************************```其中`/path/to/proguard.jar`是ProGuard的路径,`proguard.cfg`是上一步所创建的配置文件的路径。

在运行ProGuard之后,它会根据配置文件中的规则对应用程序进行优化和混淆,并生成一个新的Jar文件。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ProGuard代码混淆1.混淆器的选择ProGuard下载地址:/index.html#downloads.html 2.优化策略因为公司项目都是 SSH 或者 SSJ 框架,涉及到非常多的配置文件,所以a.必须保留实现Action类中的公有的,友好的,私有的属性和公有的方法。

b.因为配置文件中的类名是一个完整的类名,如果经过处理后就有可能找不到这个类。

c.类中的属性是jsp页面所需要的,如果经过处理jsp页面就无法得到action中的数据。

所以混淆器的配置需要根据工程使用的技术、标准的编码规范以及pro配置编写人员对工程的深入理解,否则极易导致工程无法正常运行。

ProGuard混淆时运行 proguard.jar, 并读取配置文件 ***.proProGuardUI 图形化界面不能完全满足需要,需要单独配置 pro 文件,但通过图形界面配置可以很方便的查看配置内容。

如图:3.命令java -jar ProGuard4.8\lib\proguard.jar @path\TrueCMS.pro4.为混淆器增加内存使用proguard进行混淆时,若项目比较大,经常会报OutOfMemory错误,则需要增加混淆器的内存java -Xms256m -Xmx512m -jar proguard.jar @configuration.projava -Xms256m -Xmx512m -jar proguardgui.jar configuration.pro注意:要在ProGuard 目录的bin下运行这些命令5.参数简介参数:-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} 设置源文件中给定的字符串常量6.详细说明(07/27补充)A.综述这是一个不应该在开源社区出现的东西,但它的的确确是一个开源的项目,正像它的名字一样,Proguard,即Program Guard(程序卫士),它代表了开源的相对面--代码保护。

经过几天的摸索,终于对Proguard 应用于实际项目有一些不成熟的见解。

上面提过,对于Web工程,公司都是用了SSH/SSJ框架,这类框架中所有action/service/dao/domain以及包结构都固定写死在对应的配置文件中,这使得Proguard 发挥的空间仅限于service/dao内的方法、各部分的通用工具方法及util工具类,Proguard 灵活配置的优势便显现出来了。

B.使用说明1.在Eclipse中选中需要混淆的工程,右键Exprot->选择jar文件导出备用2.打开proguard4.8\lib 目录下的proguardgui.jar,在input/output 选项中增加输入文件,找到刚才导出的jar文件并确定,然后增加输出文件。

3.在中增加工程lib文件夹下所有的jar包,以及java jre4.Shrinking(压缩)中不设置任何配置如图5.Obfuscation如下图配置其中jss.txt 是我们提供给proguard 进行混淆的字符串,若为空,ProGuard会按小写英文字母a,b,c,d….顺序混淆。

6.Optimization如图配置rmation 如图配置Target中选择当前jdk版本8.在Process选项中选择,将配置保存成**.pro文件9.打开pro文件在配置后加入-keep class WebRoot.WEB-INFO.lib.* ---不混淆lib文件夹中所有jar包-keep class * extends .trueway.platform.** {public <methods>;} #不混淆继承于platform的所有类其他配置请根据实际情况进行添加10.配置完成后在ProGuradUI中->,加载配置文件,->即开始混淆,混淆完的文件会根据配置文件输出到指定位置。

也可以使用命令行完成上述动作,且执行效率会有质的飞跃。

命令为:(java -Xms256m -Xmx512m –jar D:\proguard4.8\lib\proguard.jar @D:\ rm.pro)7.注意要点A.在产品的开发过程中,应养成良好的代码习惯,将可重复利用的代码都封装成私有方法或工具类,便于代码维护及代码混淆的效果。

B.工程比较大时,请使用命令行方式混淆,效率会提高10倍以上。

C.通配符:' ?“为任意单个字符,‘*’的任意数量的字符(不包扩分隔符),“**”为任意数量的字符,‘%’对于任何原始类型,“***”为任何类型,和“…“为任意数量的参数。

D.虽然ProGuard声称支持war包,但遗憾的是混淆完的war包会丢失所有class,所以一定需要war包的情况下需要先对jar包混淆,再将jar包内的class替换到war 包内,可正常运行,未出现异常。

E.配置文件中如下配置一定不能颠倒顺序,否则会无法生成outjar。

-injars 'D:\bak\pg\in\rm.jar'-outjars 'D:\bak\pg\in\rmout.jar'F.需要注意web.xml中配置的filter, listener等需要被skip掉。

G.ProGuardUI 可以看做是一个配置文件生成器,而不适合做混淆动作。

H.一个完整的配置例子:*****************************************************************************-injars 'D:\bak\pg\in\rm.jar'-outjars 'D:\bak\pg\in\rmout.jar'-libraryjars 'D:\eclipse_v34\jdk\jdk1.5.0_11\jre\lib\rt.jar'-libraryjars 'D:\workspace\rm\WebRoot\WEB-INF\lib\FastInfoset-1.2.7.jar'-libraryjars 'D:\workspace\rm\WebRoot\WEB-INF\lib\XmlSchema-1.4.5.jar'-libraryjars 'D:\workspace\rm\WebRoot\WEB-INF\lib\abdera-core-0.4.0-incubating.jar'-libraryjars'D:\workspace\rm\WebRoot\WEB-INF\lib\abdera-extensions-json-0.4.0-incubating.jar'-libraryjars'D:\workspace\rm\WebRoot\WEB-INF\lib\abdera-extensions-main-0.4.0-incubating.jar'-libraryjars 'D:\workspace\rm\WebRoot\WEB-INF\lib\abdera-i18n-0.4.0-incubating.jar'-libraryjars 'D:\workspace\rm\WebRoot\WEB-INF\lib\abdera-parser-0.4.0-incubating.jar'-libraryjars 'D:\workspace\rm\WebRoot\WEB-INF\lib\activation.jar'-libraryjars 'D:\workspace\rm\WebRoot\WEB-INF\lib\ant-1.6.5.jar'-libraryjars 'D:\workspace\rm\WebRoot\WEB-INF\lib\antlr-2.7.7.jar'-libraryjars 'D:\workspace\rm\WebRoot\WEB-INF\lib\aopalliance-1.0.jar'-libraryjars 'D:\workspace\rm\WebRoot\WEB-INF\lib\asm-2.2.3.jar'-libraryjars 'D:\workspace\rm\WebRoot\WEB-INF\lib\aspectjrt.jar'-libraryjars 'D:\workspace\rm\WebRoot\WEB-INF\lib\aspectjweaver.jar'-libraryjars 'D:\workspace\rm\WebRoot\WEB-INF\lib\aspriseTIFF.jar'-libraryjars 'D:\workspace\rm\WebRoot\WEB-INF\lib\axiom-api-1.2.7.jar'-libraryjars 'D:\workspace\rm\WebRoot\WEB-INF\lib\axiom-impl-1.2.7.jar'-libraryjars 'D:\workspace\rm\WebRoot\WEB-INF\lib\baseframework.jar'-libraryjars 'D:\workspace\rm\WebRoot\WEB-INF\lib\bcprov-jdk15-1.43.jar'...-dontskipnonpubliclibraryclassmembers-target 1.5-dontshrink-dontoptimize-useuniqueclassmembernames-keeppackagenames-keepattributesExceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table, *Annotation*,Synthetic,EnclosingMethod-keepparameternames-dontpreverify-dontwarn-ignorewarnings-keep class WebRoot.WEB-INFO.lib.*-keep class * extends .trueway.platform.** {public <methods>;}-keep class * extends org.springframework.orm.hibernate3.support.HibernateDaoSupport { public <methods>;}-keep class **.model.** {public private protected <fields>;public <methods>;}-keep class .trueway.resourceAllocation.application.domain.* {public private protected <fields>;public <methods>;}-keep class **.service.impl.* {public <methods>;}-keep class .trueway.platform.** {public private protected <fields>;public <methods>;}-keep class .trueway.resourceInterface.service.** {public private protected <fields>;public <methods>;}-keep class **.po.* {public private protected <fields>;public <methods>;}-keep class .trueway.sso.* {public private protected <fields>;public <methods>;}-keep class .trueway.startup.AdminFilter {public private protected <fields>;public <methods>;}# Keep names - Native method names. Keep all native class/method names.-keepclasseswithmembers,allowshrinking class * {native <methods>;}# Keep names - _class method names. Keep all .class method names. This may be # useful for libraries that will be obfuscated again with different obfuscators.-keepclassmembers,allowshrinking class * {ng.Class class$(ng.String);ng.Class class$(ng.String,boolean);}# Remove - System method calls. Remove all invocations of System# methods without side effects whose return values are not used.-assumenosideeffects public class ng.System {public static long currentTimeMillis();static ng.Class getCallerClass();public static int identityHashCode(ng.Object);public static ng.SecurityManager getSecurityManager();public static java.util.Properties getProperties();public static ng.String getProperty(ng.String);public static ng.String getenv(ng.String);public static ng.String mapLibraryName(ng.String);public static ng.String getProperty(ng.String,ng.String); }# Remove - Math method calls. Remove all invocations of Math# methods without side effects whose return values are not used.-assumenosideeffects public class ng.Math {public static double sin(double);public static double cos(double);public static double tan(double);public static double asin(double);public static double acos(double);public static double atan(double);public static double toRadians(double);public static double toDegrees(double);public static double exp(double);public static double log(double);public static double log10(double);public static double sqrt(double);public static double cbrt(double);public static double IEEEremainder(double,double);public static double ceil(double);public static double floor(double);public static double rint(double);public static double atan2(double,double);public static double pow(double,double);public static int round(float);public static long round(double);public static double random();public static int abs(int);public static long abs(long);public static float abs(float);public static double abs(double);public static int max(int,int);public static long max(long,long);public static float max(float,float);public static double max(double,double);public static int min(int,int);public static long min(long,long);public static float min(float,float);public static double min(double,double);public static double ulp(double);public static float ulp(float);public static double signum(double);public static float signum(float);public static double sinh(double);public static double cosh(double);public static double tanh(double);public static double hypot(double,double);public static double expm1(double);public static double log1p(double);}# Remove - Number method calls. Remove all invocations of Number# methods without side effects whose return values are not used.-assumenosideeffects public class ng.* extends ng.Number { public static ng.String toString(byte);public static ng.Byte valueOf(byte);public static byte parseByte(ng.String);public static byte parseByte(ng.String,int);public static ng.Byte valueOf(ng.String,int);public static ng.Byte valueOf(ng.String);public static ng.Byte decode(ng.String);public int compareTo(ng.Byte);public static ng.String toString(short);public static short parseShort(ng.String);public static short parseShort(ng.String,int);public static ng.Short valueOf(ng.String,int);public static ng.Short valueOf(ng.String);public static ng.Short valueOf(short);public static ng.Short decode(ng.String);public static short reverseBytes(short);public int compareTo(ng.Short);public static ng.String toString(int,int);public static ng.String toHexString(int);public static ng.String toOctalString(int);public static ng.String toBinaryString(int);public static ng.String toString(int);public static int parseInt(ng.String,int);public static int parseInt(ng.String);public static ng.Integer valueOf(ng.String,int);public static ng.Integer valueOf(ng.String);public static ng.Integer valueOf(int);public static ng.Integer getInteger(ng.String);public static ng.Integer getInteger(ng.String,int);public static ng.Integer getInteger(ng.String,ng.Integer); public static ng.Integer decode(ng.String);public static int highestOneBit(int);public static int lowestOneBit(int);public static int numberOfLeadingZeros(int);public static int numberOfTrailingZeros(int);public static int bitCount(int);public static int rotateLeft(int,int);public static int rotateRight(int,int);public static int reverse(int);public static int signum(int);public static int reverseBytes(int);public int compareTo(ng.Integer);public static ng.String toString(long,int);public static ng.String toHexString(long);public static ng.String toOctalString(long);public static ng.String toBinaryString(long);public static ng.String toString(long);public static long parseLong(ng.String,int);public static long parseLong(ng.String);public static ng.Long valueOf(ng.String,int);public static ng.Long valueOf(ng.String);public static ng.Long valueOf(long);public static ng.Long decode(ng.String);public static ng.Long getLong(ng.String);public static ng.Long getLong(ng.String,long);public static ng.Long getLong(ng.String,ng.Long); public static long highestOneBit(long);public static long lowestOneBit(long);public static int numberOfLeadingZeros(long);public static int numberOfTrailingZeros(long);public static int bitCount(long);public static long rotateLeft(long,int);public static long rotateRight(long,int);public static long reverse(long);public static int signum(long);public static long reverseBytes(long);public int compareTo(ng.Long);public static ng.String toString(float);public static ng.String toHexString(float);public static ng.Float valueOf(ng.String);public static ng.Float valueOf(float);public static float parseFloat(ng.String);public static boolean isNaN(float);public static boolean isInfinite(float);public static int floatToIntBits(float);public static int floatToRawIntBits(float);public static float intBitsToFloat(int);public static int compare(float,float);public boolean isNaN();public boolean isInfinite();public int compareTo(ng.Float);public static ng.String toString(double);public static ng.String toHexString(double);public static ng.Double valueOf(ng.String);public static ng.Double valueOf(double);public static double parseDouble(ng.String);public static boolean isNaN(double);public static boolean isInfinite(double);public static long doubleToLongBits(double);public static long doubleToRawLongBits(double);public static double longBitsToDouble(long);public static int compare(double,double);public boolean isNaN();public boolean isInfinite();public int compareTo(ng.Double);public <init>(byte);public <init>(short);public <init>(int);public <init>(long);public <init>(float);public <init>(double);public <init>(ng.String);public byte byteValue();public short shortValue();public int intValue();public long longValue();public float floatValue();public double doubleValue();public int compareTo(ng.Object);public boolean equals(ng.Object);public int hashCode();public ng.String toString();}# Remove - String method calls. Remove all invocations of String # methods without side effects whose return values are not used. -assumenosideeffects public class ng.String {public <init>();public <init>(byte[]);public <init>(byte[],int);public <init>(byte[],int,int);public <init>(byte[],int,int,int);public <init>(byte[],int,int,ng.String);public <init>(byte[],ng.String);public <init>(char[]);public <init>(char[],int,int);public <init>(ng.String);public <init>(ng.StringBuffer);public static ng.String copyValueOf(char[]);public static ng.String copyValueOf(char[],int,int);public static ng.String valueOf(boolean);public static ng.String valueOf(char);public static ng.String valueOf(char[]);public static ng.String valueOf(char[],int,int);public static ng.String valueOf(double);public static ng.String valueOf(float);public static ng.String valueOf(int);public static ng.String valueOf(ng.Object);public static ng.String valueOf(long);public boolean contentEquals(ng.StringBuffer);public boolean endsWith(ng.String);public boolean equalsIgnoreCase(ng.String);public boolean equals(ng.Object);public boolean matches(ng.String);public boolean regionMatches(boolean,int,ng.String,int,int);public boolean regionMatches(int,ng.String,int,int);public boolean startsWith(ng.String);public boolean startsWith(ng.String,int);public byte[] getBytes();public byte[] getBytes(ng.String);public char charAt(int);public char[] toCharArray();public int compareToIgnoreCase(ng.String);public int compareTo(ng.Object);public int compareTo(ng.String);public int hashCode();public int indexOf(int);public int indexOf(int,int);public int indexOf(ng.String);public int indexOf(ng.String,int);public int lastIndexOf(int);public int lastIndexOf(int,int);public int lastIndexOf(ng.String);public int lastIndexOf(ng.String,int);public int length();public ng.CharSequence subSequence(int,int);public ng.String concat(ng.String);public ng.String replaceAll(ng.String,ng.String);public ng.String replace(char,char);public ng.String replaceFirst(ng.String,ng.String);public ng.String[] split(ng.String);public ng.String[] split(ng.String,int);public ng.String substring(int);public ng.String substring(int,int);public ng.String toLowerCase();public ng.String toLowerCase(java.util.Locale);public ng.String toString();public ng.String toUpperCase();public ng.String toUpperCase(java.util.Locale);public ng.String trim();}# Remove - StringBuffer method calls. Remove all invocations of StringBuffer# methods without side effects whose return values are not used.-assumenosideeffects public class ng.StringBuffer {public <init>();public <init>(int);public <init>(ng.String);public <init>(ng.CharSequence);public ng.String toString();public char charAt(int);public int capacity();public int codePointAt(int);public int codePointBefore(int);public int indexOf(ng.String,int);public int lastIndexOf(ng.String);public int lastIndexOf(ng.String,int);public int length();public ng.String substring(int);public ng.String substring(int,int);}# Remove - StringBuilder method calls. Remove all invocations of StringBuilder# methods without side effects whose return values are not used.-assumenosideeffects public class ng.StringBuilder {public <init>();public <init>(int);public <init>(ng.String);public <init>(ng.CharSequence);public ng.String toString();public char charAt(int);public int capacity();public int codePointAt(int);public int codePointBefore(int);public int indexOf(ng.String,int);public int lastIndexOf(ng.String);public int lastIndexOf(ng.String,int);public int length();public ng.String substring(int);public ng.String substring(int,int);}2012/07/27 By lv☂E-mail:lvjianw@。

相关文档
最新文档