java混淆
㈠ 如何混淆java编译后的类或jar,或将jar编译成exe,使人无法反编译获得源代码
混淆就可以了
我一直在用proguard4.5.1做Java项目的混淆
㈡ JAVA涓鎴愬憳鍙橀噺锛屽眬閮ㄥ彉閲忥纴瀹炰緥鍙橀噺锛岀被鍙橀噺锛屾湁浠涔埚叧绯伙纴锛岋纻
java鏄撴贩娣嗘傚康涔嬬被鍙橀噺銆佸疄渚嫔彉閲忋佸眬閮ㄥ彉閲
绫诲彉閲忋佸疄渚嫔彉閲忋佸眬閮ㄥ彉閲忕被鍙橀噺鏄绫讳腑镫绔嬩簬鏂规硶涔嫔栫殑鍙橀噺锛岀敤static 淇楗般
瀹炰緥鍙橀噺涔熸槸绫讳腑镫绔嬩簬鏂规硶涔嫔栫殑鍙橀噺锛屼笉杩囨病链塻tatic淇楗般
灞閮ㄥ彉閲忔槸绫荤殑鏂规硶涓镄勫彉閲忋
鐪嬩笅闱㈢殑浼浠g爜璇存槑锛
public class Variable{
static int allClicks=0; //绫诲彉閲
String str="hello world"; //瀹炰緥鍙橀噺
public void method(){
int i =0; //灞閮ㄥ彉閲
}
}
瀹炰緥鍙橀噺涔熺О涓:钬滃烟钬濓纴钬沧垚锻桦彉閲忊濓纴鍦ㄥ疄浣撶被鎴栨暟鎹绫讳腑琚绉颁负钬滃睘镐р濇垨钬滃瓧娈碘濄傚綋瀹炰緥鍙橀噺鍙浠ユ敼鍙樻椂锛岃绉颁负瀵硅薄镄勭姸镐併
2. final鐢ㄤ簬甯搁噺镄勫0鏄庯纴瑙勮寖瑕佹眰甯搁噺镄勫彉閲忓悕鏄澶у啓镄勚
3. statci 鍦╦ava 閲岄溃鐢ㄤ簬瀵圭被鏂规硶鍜屽睘镐ц繘琛屼慨楗帮纴鍏朵綔鐢ㄦ槸浠涔埚憿锛
链変袱绉嶆儏鍐垫槸non-static镞犳硶锅氩埌镄勶纴杩欐椂浣犲氨瑕佷娇鐢╯tatice銆
绗涓绉嶏细浣犲笇链涗笉璁轰骇鐢熶简澶氩皯涓瀵硅薄锛屾垨涓嶅瓨鍦ㄤ换浣曞硅薄镄勬儏褰涓嬶纴闾d簺鐗瑰畾鏁版嵁镄勫瓨鍌ㄧ┖闂撮兘鍙链変竴浠斤绂
绗浜岀嶏细浣犲笇链涙煇涓鍑芥暟涓嶈佸拰class object缁戝湪涓璧枫傚嵆浣挎病链変骇鐢熶换浣昽bject锛屽栫晫杩樻槸鍙浠ヨ皟鐢ㄥ叾static鍑芥暟锛屾垨鏄鍙栫敤鍏秙tatic data
㈢ j2ee ssh java代码如何混淆或者如何加密
有代码混淆器下 但就是不管你怎么混淆都能反编译了
㈣ java的源代码隐藏问题
你要的功能其实是Java代码混淆,如果要了解Java编译成exe,可以看“参考资料”。
下面一段文字摘自《Java 手机/PDA 程序设计入门》一书,可以做为混淆器性能的大致观点:
笔者没用过DashO,所以无法对其作出个人评价。所以现在仅说明笔者曾用过的产品。以笔者的个人观点,如果就混淆的程度来说,ZKM最好,JAX中等,RetroGuard和ProGuard最差,一分钱一分货,这是千古不变的道理。如果就功能性而言,ZKM和JAX都不错,不过,JAX是IBM所开发的产品,因此也继承了大部分IBM产品的最大特色,就是“功能超强,可是不易使用”,可能光是要看完JAX的设定文件就是一个很大的问题。
下面分别介绍几种具有代表性的混淆器,对它们的产品性能进行对比。我们使用不同混淆器对同一段java代码进行混淆,分别列出混淆后代码反编译的结果,并给出使用的一些直接体会。
原始java代码:
public class SimpleBean implements Serializable {
private String[] name = {"name0","name1","name2","name3"};
private List myList = null;
public void SimpleBean() {
myList = new ArrayList(4);
}
public void init_public() {
myList.add("name");
for(int i= 1; i < 4; i++){
init_private(i);
}
}
private void init_private(int j) {
myList.add(name[j]);
}
private void writeObject(java.io.ObjectOutputStream out)
throws IOException {
}
}
一、ProGuard 4.5.1
ProGuard是一款免费的Java类文件压缩器、优化器和混淆器。它能发现并删除无用类、字段(field)、方法和属性值(attribute)。它也能优化字节码并删除无用的指令。最后,它使用简单无意义的名字来重命名你的类名、字段名和方法名。经过以上操作的jar文件 会变得更小,并很难进行逆向工程。eclipse已经把Proguard集成在一起了。它支持脚本控制,可以使用GUI界面,字符串不加密,支持 J2ME。
类似功能的开源混淆器:
RetroGuard yGuard(RetroGuard的一个升级版本) JODE
Jad反编译混淆后class得到的代码:
public class SimpleBean
implements Serializable
{
public SimpleBean()
{
a_java_util_List_fld = null;
}
public void SimpleBean()
{
a_java_util_List_fld = new ArrayList(4);
}
public void init_public()
{
a_java_util_List_fld.add("name");
for(int i = 1; i < 4; i++)
{
int j = i;
SimpleBean simplebean = this;
a_java_util_List_fld.add(simplebean.a_java_lang_String_array1d_fld[j]);
}
}
private String a_java_lang_String_array1d_fld[] = {
"name0", "name1", "name2", "name3"
};
private List a_java_util_List_fld;
}
优点:
1、对内部private方法的调用进行了内联,但基本达不到混淆效果;
2、使用文档详尽,混淆选项配置文件的编写示例多;
3、混淆选项粒度较细,可以使用GUI界面,支持本地方法的保护等;
4、支持j2me,可以集成到Eclipse;
5、开源。
缺点:
1、符号混淆的命名具有提示性,字符串未加密,没有其它的混淆措施;
2、混淆主要针对Xlet、Midlet等应用,混淆库文件时配置文件将会很复杂。
二、Jocky
Jocky是金蝶中间件技术领袖袁红岗先生的个人作品(旧有名称JOC)。原本是方便Apusic 应用服务器的开发,现在开放出来,供大家自由使用。Jocky混淆编译器是在Sun JDK中提供的Java编译器(javac)的基础上完成的,修改了其中的代码生成过程,对编译器生成的中间代码进行混淆,最后再生成class文件,这样编译和混淆只需要一个步骤就可以完成。也就是说,它是直接从源码上做文章,这是Jocky与其它混淆编译器最大的不同之处。另外可以在源程序中插入符号保留指令来控制哪些符号需要保留,将混淆过程与开发过程融合在一起,不需要单独的混淆选项配置文件。Jocky的上述特点较适合于java类库的混淆。
Jad反编译混淆后class得到的代码:
public class SimpleBean
implements Serializable
{
public SimpleBean()
{
this;
String as[] = new String[4];
as;
as[0] = "name0";
as;
JVM INSTR swap ;
1;
"name1";
JVM INSTR aastore ;
JVM INSTR p ;
JVM INSTR swap ;
2;
"name2";
JVM INSTR aastore ;
JVM INSTR p ;
JVM INSTR swap ;
3;
"name3";
JVM INSTR aastore ;
_$2;
_$1 = null;
return;
}
public void SimpleBean()
{
this;
JVM INSTR new #9 <Class ArrayList>;
JVM INSTR p ;
JVM INSTR swap ;
4;
ArrayList();
_$1;
}
public void init_public()
{
_$1.add("name");
for(int i = 1; i < 4; i++)
_$1(i);
}
private void _$1(int i)
{
_$1.add(_$2[i]);
}
private void writeObject(ObjectOutputStream objectoutputstream)
throws IOException
{
}
private String _$2[];
private List _$1;
}
优点:
1、除符号混淆外增加了数据混淆(字符数组初始化);
2、有一些语句反编译只能得到字节码指令;
3、在Sun JDK中提供的Java编译器(javac)的基础上完成,编译和混淆一体完成,不需要先生成class文件再混淆;
4、提供了Eclipse的插件,能够直接在Eclipse中使用Jocky。
缺点:
1、混淆选项粒度较粗,使用中可能要在具体代码中添加@preserve指令来实现,工作量大;
2、没有控制流混淆。
三、Allatori 3.1_demo
Allatori属于第二代混淆器,具有全方位保护你的知识产权的能力。Allatori具有以下几种保护方式:命名混淆,流混淆,调试信息混淆,字符串编码,以及水印技术。对于教育和非商业项目来说这个混淆器是免费的。2.1版本支持war和ear文件格式,并且允许对需要混淆代码的应用程序添加有效日期。
Jad反编译混淆后class得到的代码:
public class SimpleBean
implements Serializable
{
public void init_public()
{
d.add(c.k("{u{0"));
int i = 1;
goto _L1
_L3:
H(i);
++i;
_L1:
4;
JVM INSTR icmplt 21;
goto _L2 _L3
_L2:
}
public void SimpleBean()
{
d = new ArrayList(4);
}
private void H(int a)
{
d.add(c[a]);
}
public SimpleBean()
{
d = null;
}
private void H(ObjectOutputStream objectoutputstream)
throws IOException
{
}
private String c[] = {
c.k("\177q\177te"), c.k("\177q\177td"), c.k("\177q\177tg"), c.k("\177q\177tf")
};
private List d;
}
注:c.k是为进行字符串加密额外生成的类c的静态方法。
优点:
1、设计考虑了库文件混淆的使用场景;
2、使用文档详尽,混淆选项配置文件的编写示例多;
3、除符号混淆外,还使用了两种高级的混淆手段:控制混淆(改写了for循环)和字符串加密(String数组初始化);
4、混淆选项粒度较细,支持本地方法的保护等;
5、支持水印技术,允许对需要混淆的代码添加有效日期;
6、支持j2me;
缺点:
1、商业软件(价格附后),对教育和非商业用途免费(网站链接是http://www.allatori.com/price.html)。
附:价格情况
SINGLE DEVELOPER LICENSE
1 license $290
2-5 licenses $260
6-10 licenses $230
11+ licenses $200
SITE LICENSE $3750
BUSINESS LICENSE $4850
ANNUAL SUPPORT UPDATE $45
四、Zelix KlassMaster(ZKM)
Zelix KlassMaster是一个来自Zelix Pty Ltd的商业混淆器。官方文档中关于它的混淆特性的介绍很少。它的保护功能非常强大,可以进行符号混淆和控制混淆,支持字符串的复杂加密保护,堆栈混乱,支持异常重构,支持增量混淆,支持J2ME。Zelix KlassMaster提供试用版本,可以到http://www.zelix.com下载。
五、DashO Pro
DashO Pro 是由Preemptive Solutions开发的商业化的混淆器. 免费的评估版可以到http://www.preemptive.com下载。DashO Pro代码保护能力强大易用,方便灵活(商业软件,非开源)。该Java混淆器是Sun的选择,对于企业级应用,作为其Java开发包的一部分,Sun微系统使用DashO Pro来混淆其加密库。DashO Pro能够对ID进行重新命名,使之成为毫无意义的字符;混淆元数据;改变控制流等,所有这些操作使得java代码被混淆,难于理解。产品特点包括:
领先的Java源码保护机制;
运用专利Overload-Inction技术对包/类/方法/域进行重命名;
高级的流程控制混淆机制;
字符串加密技术;
防止反编译器生成有用的输出;
水印软件;
提高Java源码效率;
不采用类/方法/域,全面移除常数存储库;
类/方法级别的优化,以提高JIT效果;
动态加载检测到的类;
全面高效的Java源码的拓展和部署;
支持所有的JDK版本 (JSE, J2EE, J2ME, etc)包括1.5;
自动堆栈跟踪转换;
在指定路径打包或者java jars;
支持任何打包类型的Java内容——程序、库、applets程序、小服务器程序、EJB等;支持基于J2ME CLDC的架构,包括MIDP和 iAppli;
支持CLDC预检验库中的类;
可以从指定路径、Zip压缩包或者jars中提取;
支持导出100%纯粹的Java,并提供验证;
命令行接口适合集成到构建环境内;
基于XML的配置文件,易于使用;
全面准确的PDF格式用户指南。
㈤ javaweb项目做混淆的详细步骤
混淆的工具很多,最常用的为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、在包中的所有调试信息(源文件名、行号、变量/参数信息等等)应全部删除。
㈥ 请教,谁会用Java代码混淆器ProGuard4.8
混淆器负责把一个软件转成让人看不懂.
前提是原来的软件正确无误.
当它发现软件中含有不正常的写法,
就会要求先改好, 才能进行混淆.
若强制用'-ignorewarnings' 选项, 可以直接进行混淆,
但出来的结果很可能会有错误, 要自求多福.
㈦ android代码混淆以及怎么判断一个apk代码是否被混淆过
1、proguard原理
java代码编译成二进制class文件,这个class文件也可以反编译成源代码,除了注释外,其他的code基本都可以看到。为了防止重要code被泄露,我们往往需要混淆,即把方法名,变量名,类名,包名等这些java元素的名称改成让人意想不到的名称,这样代码结构就没有变化,还可以运行,但是想弄懂代码的架构却很难。proguard就起到了这样的作用:
一、它可以分析一组class的结构,根据用户的配置,然后把这些class文件中可以混淆的java元素进行混淆
二、删除无效的代码
三、对代码进行优化(使用adt插件导出的apk,还进行zipalign优化)
缺省情况下,proguard会混淆所有代码,但是下面几种情况是不能改变java元素的名称,否则就会导致程序出错。
一、用到反射的地方(android中的api常用@hide注释掉,开发者在调用相应的方法时,需要用到反射)
二、当app的代码要依赖于系统的接口时,如被系统代码调用的回调方法,这种方法比较复杂
三、java元素名称是配置文件中配置好的
所以在使用proguard时,我们需要有个配置文件告诉proguard,哪些java元素是不能混淆的。
2、proguard配置
-dontwarn缺省proguard会检查每一个引用是否正确,但是第三方库里往往有些不会用到的类,没有正确引用,如果不配置的话,系统就会报错。
-keep指定的类和类成员被保留作为入口
-keepclassmembes指定的类成员被保留。
-keepclasswithmembers指定的类和类成员被保留,假如指定的类成员存在的话。
㈧ Java娣锋穯缂栬疟鍣
銆銆銆銆链杩戣瘯鐢ㄤ简鍑犱釜Java娣锋穯鍣(Java Obfuscator) 镒熻夋病链変竴涓瀹屽叏鍙︿汉婊℃剰镄 浜庢槸𨱍冲共鑴呜嚜宸卞啓涓涓寰椾简 缈讳简鍑犻〉Java铏氭嫙链鸿勮寖涔嫔悗绐佸彂濂囨兂 鍒镄勬贩娣嗗櫒閮芥槸鍦ㄧ紪璇戝ソ镄刡yte code涓婂仛鏂囩珷 鑳戒笉鑳戒粠婧愮爜鐩存帴缂栬疟鎴愮粡杩囨贩娣嗙殑class鏂囦欢锻锛熷氨杩欐牱鑺变简涓涓澶氭槦链熺殑镞堕棿鍐欎简涓涓狫ava娣锋穯缂栬疟鍣(Java Obfuscator Compiler) 銆銆銆銆 Q: 浠涔堟槸娣锋穯鍣锛 銆銆銆銆A: 鐢变簬Java绋嫔簭杩愯屾椂鏄锷ㄦ佽繛鎺ョ殑 锲犳ょ紪璇戞垚镄勭洰镙囨枃浠朵腑鍖呭惈链夌﹀彿琛 浣垮缑Java绋嫔簭寰埚规槗琚鍙岖紪璇 娣锋穯鍣ㄥ彲浠ユ墦涔眂lass鏂囦欢涓镄勭﹀彿淇℃伅 浣垮弽钖戝伐绋嫔彉寰楅潪甯稿汹闅 銆銆銆銆 Q: 鐜版湁镄勬贩娣嗗櫒链変粈涔堥梾棰桡纻 銆銆銆銆A: 鐜版湁镄勬贩娣嗗櫒閮芥槸瀵圭紪璇戝ソ镄刢lass鏂囦欢杩涜屾贩娣 杩欐牱灏遍渶瑕佺紪璇戝拰娣锋穯涓や釜姝ラ 骞朵笉鏄镓链夌殑绗﹀彿閮介渶瑕佹贩娣 濡傛灉浣犲紑鍙戠殑鏄涓涓绫诲簱 鎴栬呮煇浜涚被闇瑕佸姩镐佽呰浇 闾d簺鍏鍏盇PI灏卞繀椤讳缭鐣欑﹀彿涓嶅彉 杩欐牱鍒浜烘墠鑳戒娇鐢ㄤ綘镄勭被搴 鐜版湁镄勬贩娣嗗櫒鎻愪緵浜咷UI鎴栬剼链镄勬柟寮忔潵瀵归偅浜涢渶瑕佷缭鐣欑殑绗﹀彿钖岖О杩涜岄厤缃 濡傛灉绋嫔簭杈冨ぇ镞堕厤缃宸ヤ綔鍙桦缑寰埚嶆潅 钥岀▼搴忎竴镞︿慨鏀归厤缃宸ヤ綔鍙堣侀吨鏂拌繘琛 镆愪簺娣锋穯鍣ㄨ兘澶熻皟鏁村瓧鑺傜爜镄勯‘搴 浣垮弽缂栬疟镟村姞锲伴毦 浣嗘垜缁忓巻杩囨贩娣嗕箣钖庣殑绋嫔簭杩愯屽嚭阌欑殑𨱍呭喌 銆銆銆銆 Q: Java娣锋穯缂栬疟鍣ㄦ槸濡备綍宸ヤ綔镄勶纻 銆銆銆銆A: Java娣锋穯缂栬疟鍣ㄦ槸鍦⊿un JDK涓鎻愪緵镄凧ava缂栬疟鍣(javac)镄勫熀纭涓婂畬鎴愮殑 淇鏀逛简浠g爜鐢熸垚杩囩▼ 瀵圭紪璇戝櫒鐢熸垚镄勪腑闂翠唬镰佽繘琛屾贩娣 链钖庡啀鐢熸垚class鏂囦欢 杩欐牱缂栬疟鍜屾贩娣嗗彧闇瑕佷竴涓姝ラゅ氨鍙浠ュ畬鎴 鍙﹀栧彲浠ュ湪婧愮▼搴忎腑鎻掑叆绗﹀彿淇濈暀鎸囦护𨱒ユ带鍒跺摢浜涚﹀彿闇瑕佷缭鐣 涓嶉渶瑕佸崟镫镄勯厤缃 銆銆銆銆 Q: 濡备綍瀹夎呭拰杩愯孞OC锛 銆銆銆銆A: 涓嬭浇joc jar () 杩愯宩ava jar joc jar灏卞彲浠ュ惎锷↗ava娣锋穯缂栬疟鍣 joc镄勫懡浠よ屽弬鏁板拰javac瀹屽叏鐩稿悓 浣嗗炲姞浜嗕竴涓鏂扮殑鍙傛暟 Xobfuscate 瀹幂殑鐢ㄦ硶濡备笅 銆銆銆銆 Xobfuscate:<level>銆銆鍏朵腑<level>鎸囧畾娣锋穯绾у埆 鍙浠ユ槸浠ヤ笅鍑犵岖骇鍒 銆銆銆銆 Xobfuscate:none銆銆銆銆涓嶈繘琛屾贩娣嗐銆銆銆 Xobfuscate:private銆銆 瀵规墍链塸rivate璁块梾绾у埆镄勫厓绱犺繘琛屾贩娣嗐銆銆銆 Xobfuscate:package銆銆 瀵规墍链塸rivate鎴杙ackage private鍏幂礌杩涜屾贩娣嗐銆銆銆 Xobfuscate:protected銆 瀵规墍链塸rivate package private protected鍏幂礌杩涜屾贩娣嗐銆銆銆 Xobfuscate:public銆銆銆瀵规墍链夌殑鍏幂礌閮借繘琛屾贩娣嗐銆銆銆 Xobfuscate:all銆銆銆銆 鐩稿綋浜 Xobfuscate:public銆銆濡傛灉浣跨敤 Xobfuscate涓嶅甫绾у埆鍙傛暟 鍒欑浉褰扑簬 Xobfuscate:package銆銆銆銆 Q: 濡备綍浣跨敤绗﹀彿淇濈暀鎸囦护锛 銆銆銆銆A: 闄や简鍦ㄥ懡浠よ岀敤 Xobfuscate鍙傛暟鎺у埗绗﹀彿娣锋穯绾у埆澶 杩桦彲浠ュ湪婧愪唬镰佷腑浣跨敤绗﹀彿淇濈暀鎸囦护𨱒ユ带鍒堕偅浜涚﹀彿闇瑕佷缭鐣 绗﹀彿淇濈暀鎸囦护鏄涓涓狫ava鏂囨。娉ㄩ喷鎸囦护 鍙浠ユ彃鍏ュ湪绫诲拰绫绘垚锻樼殑鏂囨。娉ㄩ喷涓 渚嫔 銆銆銆銆 /**銆銆銆銆銆* This class should preserve 銆銆銆銆銆* @preserve銆銆銆銆銆*/銆銆銆銆 public class Foo {銆銆銆銆銆銆 /**銆銆銆銆銆銆銆* You can specify which field should be preserved 銆銆銆銆銆銆銆* @preserve銆銆銆銆銆銆銆*/銆銆銆銆銆銆 private int x;銆銆銆銆銆銆銆銆 /**銆銆銆銆銆銆銆* This field is not preserved 銆銆銆銆銆銆銆*/銆銆銆銆銆銆 private int y;銆銆銆銆銆銆銆銆 /**銆銆銆銆銆銆銆* You can also preserve methods 銆銆銆銆銆銆銆* @preserve銆銆銆銆銆銆銆*/銆銆銆銆銆銆 public void hello() {}銆銆銆銆銆銆銆銆 /**銆銆銆銆銆銆銆* This method is not preserved 銆銆銆銆銆銆銆*/銆銆銆銆銆銆 private void collect() {}銆銆銆銆 }銆銆濡傛灉娌℃湁@preserve鎸囦护 鍒欐牴鎹娣锋穯绾у埆鍙婃垚锻樼殑璁块梾绾у埆𨱒ョ‘瀹氱﹀彿鏄钖︿缭鐣 銆銆銆銆瀵逛簬绫荤殑绗﹀彿淇濈暀鎸囦护鍙浠ラ梼甯︿竴涓淇?鐣欑骇鍒鍙傛暟 𨱒ユ带鍒剁被鎴愬憳镄勭﹀彿淇濈暀 鍖呮嫭 銆銆銆銆 @preserve銆銆銆銆銆銆浠呭圭被钖嶈繘琛屼缭鐣 绫绘垚锻樼殑淇濈暀镙规嵁 Xobfuscate锻戒护琛屽弬鏁板喅瀹氥銆銆銆 @preserve public銆銆 淇濈暀镓链塸ublic鎴愬憳銆銆銆銆 @preserve protected銆淇濈暀镓链塸ublic鍜宲rotected鎴愬憳銆銆銆銆 @preserve package銆銆淇濈暀镓链塸ublic protected package private鎴愬憳銆銆銆銆 @preserve private銆銆淇濈暀镓链夋垚锻樸銆銆銆 @preserve all銆銆銆銆鐩稿綋浜嶡preserve private銆銆銆銆 Q: JOC链夊摢浜涢檺鍒讹纻 銆銆銆銆A: 涓嶆敮鎸佸垎鍒缂栬疟 蹇呴’瀵规墍链夌殑婧愭枃浠惰繘琛屾贩娣嗙紪璇 銆銆銆銆銆銆链钖庣粰鍑轰竴涓狫OC娣锋穯镄勬晥鏋 銆銆銆銆婧愭枃浠 銆銆銆銆import java awt event *;銆銆import javax swing *;銆銆銆銆public class AboutBox extends JDialog銆銆{銆銆 public AboutBox()銆銆 {銆銆銆銆 initform();銆銆 }銆銆銆銆 JPanel panel = new JPanel();銆銆 JButton button = new JButton();銆銆 JLabel jLabel = new JLabel();銆銆 JTextArea jTextArea = new JTextArea();銆銆銆銆 /**銆銆銆* NOTE: The following code is required by the form designer 銆銆銆* It can be modified using the form editor 銆Do not銆銆銆* modify it using the code editor 銆銆銆*/銆銆銆銆 private void initform()銆銆 {銆銆銆銆 this setDefaultCloseOperation( WindowConstants DISPOSE_ON_CLOSE );銆銆銆銆 this getContentPane() setLayout( new java awt CardLayout());銆銆銆銆 this setModal( true );銆銆銆銆 this setResizable( false );銆銆銆銆 this setTitle( About );銆銆銆銆 panel setLayout( null );銆銆銆銆 button setText( OK );銆銆銆銆 button setBounds( );銆銆銆銆 panel add( button );銆銆銆銆 jLabel setText( File System Viewer for Swing );銆銆銆銆 jLabel setVerticalAlignment( SwingConstants TOP );銆銆銆銆 jLabel setBounds( );銆銆銆銆 panel add( jLabel );銆銆銆銆 jTextArea setFont( new java awt Font( Dialog ));銆銆銆銆 jTextArea setLineWrap( true );銆銆銆銆 jTextArea setOpaque( false );銆銆銆銆 jTextArea setText( This puter program is protected by right law );銆銆銆銆 jTextArea setWrapstyleWord( true );銆銆銆銆 jTextArea setBounds( );銆銆銆銆 panel add( jTextArea );銆銆銆銆 this getContentPane() add( panel Card );銆銆銆銆 this setSize( );銆銆銆銆 button addActionListener( new java awt event ActionListener(){銆銆銆銆銆銆銆銆 public void actionPerformed( java awt event ActionEvent ev ){銆銆銆銆銆銆銆銆銆 ?銆button _actionPerformed( ev );銆銆銆銆銆銆銆銆 }});銆銆 }銆銆銆銆 private void button _actionPerformed(ActionEvent ev)銆銆 {銆銆銆銆 this dispose();銆銆 }銆銆}銆銆銆銆缁廕avac缂栬疟钖庣敤JAD鍙岖紪璇戠殑缁撴灉 銆銆銆銆import java awt *;銆銆import java awt event ActionEvent;銆銆import java awt event ActionListener;銆銆import javax swing *;銆銆import javax swing text JTextComponent;銆銆銆銆public class AboutBox extends JDialog銆銆{銆銆銆銆 JPanel panel ;銆銆 JButton button ;銆銆 JLabel jLabel ;銆銆 JTextArea jTextArea ;銆銆銆銆 public AboutBox()銆銆 {銆銆銆銆 panel = new JPanel();銆銆銆銆 button = new JButton();銆銆銆銆 jLabel = new JLabel();銆銆銆銆 jTextArea = new JTextArea();銆銆銆銆 initform();銆銆 }銆銆銆銆 private void initform()銆銆 {銆銆銆銆 setDefaultCloseOperation( );銆銆銆銆 getContentPane() setLayout(new CardLayout());銆銆銆銆 setModal(true);銆銆銆銆 setResizable(false);銆銆銆銆 setTitle( About );銆銆銆銆 panel setLayout(null);銆銆銆銆 button setText( OK );銆銆銆銆 button setBounds( );銆銆銆銆 panel add(button );銆銆銆銆 jLabel setText( File System Viewer for Swing );銆銆銆銆 jLabel setVerticalAlignment( );銆銆銆銆 jLabel setBounds( );銆銆銆銆 panel add(jLabel );銆銆銆銆 jTextArea setFont(new Font( Dialog ));銆銆銆銆 jTextArea setLineWrap(true);銆銆銆銆 jTextArea setOpaque(false);銆銆銆銆 jTextArea setText( This puter program is protected by right law );銆銆銆銆 jTextArea setWrapstyleWord(true);銆銆銆銆 jTextArea setBounds( );銆銆銆銆 panel add(jTextArea );銆銆銆銆 getContentPane() add(panel Card );銆銆銆銆 setSize( );銆銆銆銆 button addActionListener(new ActionListener() {銆銆銆銆銆銆銆銆 public void actionPerformed(ActionEvent actionevent)銆銆銆銆銆銆 {銆銆銆銆銆銆銆銆 button _actionPerformed(actio lishixin/Article/program/Java/JSP/201311/19213
㈨ 求教Java web项目一般怎样做代码混淆或加密
一、java web项目混淆
proguard4.8工具,说是支持war的,可混淆过后少了classes目录了,自然成功不了。网上搜的过程不详说了,最后找着--“J2EE-web工程ProGuard代码混淆07_28”,网址:http://wenku..com/link?url=CxToEqg5QWbz2_--cVqaImGKnLLLTO45u6uD_
根据提示一步步完成。
把web项目打成jar包后用proguard进行混淆,然后把混淆过后的class目录替换发布包war中的对应目录,启动运行是正常的。
主要注意利用proguard生成xxx.pro文件,然后手动加工-keep class WebRoot.WEB-INFO.lib.* 等项目中不需要混淆的包和类。
二、java web项目打成.exe
没找到免费的,这搜到个收费的--Jinstall,试了下功能挺好,
可以加密、集成jdk、tomcat,如果数据库是mysql也集成,其他数据库的话要设置数据库的url.