【虎.无名】一般的java混淆器,主要针对Java应用进行,如只保留main入口,直接针对java字节码的类库进行混淆。而我以前的工作主要是编写公共底层库,需要做一些源代码保护,最后用的是apusic提供的joc.jar混淆编译器,可直接针对源代码进行混淆编译。目前joc下载链接已经失效,而且不支持jdk1.5以上版本了。无奈只能重新对Java混淆器进行选型。Allatori 功能上似乎还行,就是不知道有没有有效期等其他问题。试验了proguard4.2/Allatori-2.1-Demo/yguard-2.2.0三种。Allatori效果最好,但是无法通过Android的编译,其次是ProGuard,可选项很多,但是很遗憾没有字符串加密功能。】
http://www.zxbc.cn/html/20070419/6497_4.html Java混淆编译器(转apusic.com)-java基础 作者:佚名 出处:中国自学编程网收集整理 发布日期:2007-04-19
翻了几页Java虚拟机规范之后突发奇想,别的混淆器都是在编译好的byte code上做文章,能不能从源码直接编译成经过混淆的class文件呢?就这样花了一个多星期的时间写了一个Java混淆编译器(Java Obfuscator Compiler)。
A: 下载joc.jar (http://www.apusic.com/product/cpsy.htm),运行java -jar joc.jar就可以启动Java混淆编译器,joc的命令行参数和javac完全相同,但增加了一个新的参数-Xobfuscate,它的用法如下:
-Xobfuscate:<level>
其中<level>指定混淆级别,可以是以下几种级别:
-Xobfuscate:none 不进行混淆
-Xobfuscate:private 对所有private访问级别的元素进行混淆
-Xobfuscate:package 对所有private或package private元素进行混淆
-Xobfuscate:protected 对所有private, package private, protected元素进行混淆
-Xobfuscate:public 对所有的元素都进行混淆
-Xobfuscate:all 相当于-Xobfuscate:public
如果使用-Xobfuscate不带级别参数,则相当于-Xobfuscate:package
http://bbs.pediy.com/showthread.php?t=37063 关于Java混淆器
Java混乱器现在有很多现成的东西,比如 JShrink , Zelix KlassMaster,JODE, DashO, 等等。
如果想要自己编写混乱器,那么你最先应该了解 Java Class 文件的规格,同时要深入了解字节代码的格式等等,而且要通过对面向对象的理解,来进行名城的混乱,等等
难,如果想交流关于混乱器的制作,请合伙联系 vhly@163.com
--
关于混乱器,我想Jshrink可以满足初步的需求,如果想要更高强度的,可以使用Zelix KlassMaster, DashO等,但是这两个还都需要花钱呢。下面列举混乱器的特性:(按强度排列)
ProGuard 开源混乱器,支持脚本控制,可以使用GUI界面,重命名a-z A-Z等单个字符名称。字符串不加密,支持 J2ME
RetroGuard 开源混乱器,支持脚本控制,可以使用GUI界面,重命名a-z A-Z等单个字符名称。包括优化代码,字符串不加密 支持 J2ME
yGuard 同上两个,支持Ant自动构建
CodeShield 使用 Cnnn 来命名 如 C001 C002 等等 字符串不加密 GUI支持
JCloak 同上
JODE 支持 Obfuscator Decompiler Encryptor 支持混乱、反编译、加密
JShrink 使用Java Api对类进行重命名,支持字符串加密,支持 J2ME JProof 1stBarrier 未分析
Marvin 不支持GUI,支持脚本,字符串加密
Smokescreen 15天试用,支持字符串加密支持J2ME 保护时有漏洞,类文件原始字符串内容不删除***
DashO 商业使用,有强大的功能,优化,加密,支持广泛
Zelix KlassMaster 保护功能非常强大,支持字符串的复杂加密保护,字节代码混乱,堆栈混乱,支持异常重构
对于制作混乱器,首先要有一个功能完善的类文件分析库,然后通过各种算法。对于类文件的名称、成员、方法以及字节代码进行修改。
---
http://www.javaeye.com/news/2303 Java混淆器Allatori 2.1版本发布
Allatori属于第二代混淆器,具有全方位保护你的知识产权的能力。Allatori具有以下几种保护方式:命名混淆,流混淆,调试信息混淆,字符串编码,以及水印技术。对于教育和非商业项目来说这个混淆器是免费的。 2.1版本支持war和ear文件格式,并且允许对需要混淆代码的应用程序添加有效日期。这里是Allatori的官方网站(http://www.allatori.com/)和演示版的下载地址。【[INFO] Expiry date set to 一月 01, 2000?是不是demo版本就不可使用?】
---
http://www.javaeye.com/topic/772 Java 混淆器 RetroGuard 的使用方法
Java 代码编译后生成的 .class 中包含有源代码中的所有信息(不包括注释),尤其是在其中保存有调试信息的时候。所以一个按照正常方式编译的 Java .class 文件可以非常轻易地被反编译。反编译工具有很多种,其中非常强大的一种是 jad。
为了避免出现这种情况,保护开发者的劳动,又有一种叫做 Java 混淆器的工具被开发出来。Java 混淆器的作用是对编译好的代码进行混淆,使得其无法被反编译或者反编译后的代码混乱难懂。Java 混淆器也有很多种,其中比较强大的一种是 RetroGuard(只说比较强大是因为我对其功效还是有些怀疑的)。
这里我介绍一下 RetroGuard 的使用方法。
将下载的 .tar.gz 或者 .zip 文件解压。有用的只有 retroguard.jar 一个文件,其它的是源代码和文档。
RetroGuard 是针对 jar 文件做混淆的。使用之前需要先配置一下。可以手工编辑配置文件,更好的方法是使用 RetroGuard 提供的 GUI 工具来生成配置文件。使用方法如下:
java -classpath retroguard.jar;xxx.jar;yyy.zip;... RGgui
然后在 GUI 的 Wizard 中设置各个参数。上面的 -classpath 中应该列出要混淆的 jar 所依赖的所有的包。
RGgui 的详细使用方法可以看 RetroGuard 的文档 docs.html。
配置文件生成后,就可以运行 RetroGuard 进行混淆了。使用方法如下:
java -classpath xxx.jar;yyy.zip;... RetroGuard vvv-unofb.jar vvv.jar vvv.rgs vvv.log
其中 vvv-unofb.jar 是未混淆的 jar 文件,vvv.jar 是混淆后生成的 jar 文件,vvv.rgs 是配置文件,vvv.log 是日志文件。缺省的配置文件名称为 script.rgs,缺省的日志文件名称为 retroguard.log。
在生成配置文件时需要注意的是:
1、所有 public 的类名、方法名、变量名应该全部保留。因为所有设置为 public 的内容代表了整个包对外表现的接口。若某个内容不想为外界访问,就不应该设置为 public 的。
2、若包中某个类使用了 java.lang.Class 或者 java.lang.ClassLoader 中的某个方法加载了一个类,若这个类在包外,不需要特别处理;若这个类在包内,则需要保留这个类的类名,否则混淆后会找不到这个类。 3、在包中的所有调试信息(源文件名、行号、变量/参数信息等等)应全部删除。
RetroGuard 还有一种打 patch 的所谓“增量式混淆”的使用方法。方法的要点是把上一次混淆生成的 log 文件作为下一次混淆的配置文件,这样就可以生成一个仅包含修改的 patch jar。在使用的时候把这个 path jar 放在 CLASSPATH 的上一次混淆 jar 之前。这种增量式混淆有两种方法:
1、每个 patch jar 仅包含上一个版本混淆以来发生的变化,这样每个 patch jar 会很小,但是 CLASSPATH 会越来越长。
2、每个 patch jar 包含上一个主要版本(2.0、3.0、4.0)混淆以来发生的变化,这样两个主要版本间的 patch jar 会越来越大。但是 CLASSPATH 只需做很小的变化。
以上的两种方式我都不喜欢,感觉都不够优雅。
---
http://www.javah.net/JAVArenzheng/20070720/4237.html 混淆器retroguard使用经验(原创)
后来我仔细想了原因,原来pulic static void main(String []) 已经被混淆成了a()方法了。一时我真不知改怎么解决。于是我开始查找retroguard使用说明,结果发现它还有更多用法,比如可以保留某些类不混淆。具体设置就是利用script.rgs文件。retroguard提供了一个编写script文件的图形界面:
java RGgui
按照提示,很容易编写script文件,我设置了保留包含有main方法的那个类(即Main Class)不混淆。这样得到script.rgs文件后,在命令行输入:
java RetroGuard bandviewer1.01-unob.jar bandviewer1.01-ob.jar script.rgs
---
资源下载
proguard下载(http://proguard.sourceforge.net/ 官方网址无法下载)
http://internap.dl.sourceforge.net/sourceforge/proguard/proguard4.2.zip
http://www.mirrorservice.org/sites/download.sourceforge.net/pub/sourceforge/p/pr/proguard/proguard4.2.zip
Allatori 2.1版 http://www.allatori.com/downloads/Allatori-2.1-Demo.zip 【能对字符串加密,支持有效期处理】
RetroGuard http://www.retrologic.com/downloads/retroguard-v2.3.1.zip
【http://www.leesw.com/ 】smokescreen java obfuscator的website
【http://www.retrologic.com/retroguard-main.html 】RetroGuard java obfuscator的website
【http://www.codingart.com/codeshield.html 】CodeShield Java Bytecode Obfuscator
【http://www.meurrens.org/ip-Links/Java/CodeEngineering/jobe-doc.html 】JOBE
【http://www.preemptive.com/tools/ 】DashO(不是共享软件)
【http://www.condensity.com/ 】Condensity(不是共享软件,不过有5天试用版)
【http://www.force5.com/servlet/EvalDownload 】Jcloak
【http://www.jproof.com/downloads.html 】1stBarrier
【http://www.2lkit.com/products/2LKitObf/index.htm 】2lKit Obfuscator
【http://www.duckware.com/jobfuscate.html 】Jobfuscate
【http://www.meurrens.org/ip-Links/Java/CodeEngineering/zelixDoc/documentation/index.html 】Zelix
【http://www.drjava.de/obfuscator/ 】Marvin
【http://www.e-t.com/jshrink.html 】Jshrink
1stBarrier (JProof): http://www.jproof.com/products.html
2LKit Obfuscator: http://www.2lkit.com/products/2LKitObf/index.htm
Condensity: http://www.condensity.com/
Dash-O (preEmptive): http://www.preemptive.com/
JCloak (Force 5): http://www.force5.com/
JOBE: http://www-personal.engin.umich.edu/java/unsupported/jobe/doc.html
JObfuscator (Helseth): http://www.helseth.com/
Jshrink (Estridge Technology): http://www.e-t.com/jshrink.html
RetroGuard (RetroLogic): http://www.retrologic.com/
SourceGuard (4thPass): http://www.4thpass.com/sourceguard/
Zelix KlassMaster: http://www.zelix.com/
Java开源混淆器比较(:ProGuard JavaGuard RetroGuard yGuard JODE)
ProGuard 是一个免费的 Java类文件的压缩,优化,混肴器。它删除没有用的类,字段,方法与属性。使字节码最大程度地优化,使用简短且无意义的名字来重命名类、字段和方法 。eclipse已经把Proguard集成在一起了。
JavaGuard (http://sourceforge.net/projects/javaguard/ )JavaGuard是一个通用的字节码模糊器,旨在容易地适合你的规则建造和测试进程,保证你的有价值的代码更安全,使其不易被反编译以及其它形式的反向处理。
RetroGuard是不错的Java混淆器,在JBuilder7的企业版中也带了这个混淆器。
yGuard 是RetroGuard的一个升级版本自带一个ANT任务 【虎.无名:混淆效果很不好,还不如ProGuard 4.2,而且后者有GUI配置界面,方便很多,可选项也很多。】
JODE包含一个Java混淆器与一个Java优化器。通过一个脚本文件可以控制Class文件的多种优化方式。它支持以下操作:1.能够把Class,method,field 和local names 重命成简略的,模糊的或者特定名字的或者依照一个转换表. 2.除去debugging 信息. 3.除去"坏死的"代码(classes, fields, methods). 4.优化局部变量的分配。
分享到:
相关推荐
### JAVA混淆编译工具知识点详解 #### 一、概述 在现代软件开发中,随着Java语言的广泛应用,代码安全成为了不容忽视的问题。为了保护源代码不被轻易逆向工程或非法复制,开发者们通常会采用一种名为“混淆编译”的...
总的来说,Java混淆和反编译是软件安全和逆向工程领域的重要组成部分。Jock作为混淆工具,提供了一种保护Java代码的方式;而反编译则是为了分析混淆后的代码,尽管这通常是一项挑战。理解和掌握这些技术,对于开发者...
混淆技术主要用于保护Java代码不被轻易地反编译和理解,而反编译则是为了调试、学习或者分析他人的代码。本压缩包“java混淆和反编译套餐工具.zip”包含了相关的工具,帮助开发者进行这两项操作。 首先,我们要了解...
java混淆和反编译 jocky支持最新jdk
总的来说,jocky作为Java混淆编译插件,提供了便捷的混淆配置和集成方案,对于防止代码被反编译有着重要的作用。正确使用和配置jocky,可以帮助开发者更好地保护自己的知识产权,降低代码被恶意利用的风险。在实践中...
### Java混淆器的作用 在软件开发领域,尤其是Java编程中,源代码保护是一个非常重要的话题。随着技术的发展,软件知识产权的保护变得越来越复杂。对于开发者来说,编写好的代码往往包含了很多独创性的算法、业务...
大家熟知的Progaurd只能对class文件进行混淆,也就是必须先把java源码编译为class文件,然后再进行混淆 Jockey跟其他混淆工具不同的是:它是直接对编译过程做文章,也就是在把java文件编译为class文件的过程中对代码...
为了保护源代码不被轻易反编译和理解,开发者通常会使用混淆加密技术来增强代码的安全性。本文将深入探讨如何对Java jar包进行混淆加密,以及相关工具的使用。 一、代码混淆的重要性 代码混淆的主要目的是使原始的...
混淆是将源代码中的类名、方法名、变量名等有意义的标识符转换为无意义的简短名称,使得阅读混淆后的代码变得极其困难,从而降低代码被反编译和理解的可能性。ProGuard提供了四种主要的混淆策略:缩短类名、方法名和...
本篇将详细讲解如何使用混淆器ProGuard来混淆Java类,以增加反编译的难度,从而保护你的知识产权。 ProGuard是一款开源的Java字节码混淆、优化和预校验工具。它能够重命名类、方法和字段,使其变得难以理解,同时还...
《Java混淆算法的研究.pdf》可能详述了各种JAVA混淆算法的实现细节,包括基于流的混淆、基于图的混淆和基于代理类的混淆等。这些算法各有特点,例如基于流的混淆侧重于改变控制流和数据流,基于图的混淆利用图论原理...
Java混淆和加密JavaScript代码是保护Web应用程序源代码安全的重要手段,尤其是在公开发布或者与第三方共享时,能够防止恶意用户分析和篡改代码。本压缩包包含的资源专注于这个主题,让我们详细了解一下相关知识点。 ...
Java代码混淆器ProGuard是Java开发中用于保护和优化应用程序的重要工具。它的主要功能是对Java字节码进行混淆,使得代码难以被逆向工程解析,从而提高代码的安全性。混淆过程中,函数变量、类和方法名会被重命名为...
Java混淆器的设计与实现对于保护软件知识产权和提升移动代码的安全性具有重要意义。通过对Java类文件结构的深入分析,结合有效的混淆策略和技术,可以有效地降低反编译结果的可读性,从而提高软件的安全性和保密性。...
混淆工具的使用步骤一般包括配置混淆规则、运行混淆器和验证混淆效果。配置规则可能涉及到保留关键类、方法和注解,避免混淆破坏程序原有的功能。混淆过程中需要小心,因为过度混淆可能会导致程序运行错误。 总的来...
MYJ2C将编译的Java方法转换为C语言。编译生成的文件后,生成的二进制文件通过Java Native Interface 重新链接到原始程序。在此过程结束时,包含原始方法的.class文件中不会保留原始方法的信息。 Before public ...
Java混淆器是开发Java应用程序时一个非常重要的工具,它的主要目的是保护代码安全,防止未经授权的逆向工程分析。本文将详细介绍Java混淆器的工作原理、重要性以及如何使用,特别是基于ProGuard 4.6版本的操作流程。...
java混淆器 RetroGuard 免费提供源码 可运行jar文件 Java 代码编译后生成的 .class 中包含有源代码中的所有信息(不包括注释),尤其是在其中保存有调试信息的时候。所以一个按照正常方式编译的 Java .class 文件...
Java混淆器,如Jocky和RetroGuard,是开发者用来增强代码安全性的工具,主要目的是防止Java类文件被轻易地反编译,从而保护软件的知识产权。在Android开发中,混淆尤其重要,因为Android应用的主要代码是用Java编写...
4. **混淆**: 在Java中,混淆是指通过重命名类、方法和变量,使得代码变得难以阅读,从而保护源代码不被轻易理解或反编译。通常使用ProGuard或R8这样的工具进行混淆。 接下来,我们将按照以下步骤在IDEA中使用Maven...