大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
混淆的工具很多,最常用的为retroguard.
专注于为中小企业提供成都网站设计、成都网站制作服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业香格里拉免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上1000家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
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、在包中的所有调试信息(源文件名、行号、变量/参数信息等等)应全部删除。
我们在上面的程序中看到了一句没有用的代码,就是在MM类里的System.out.println("xxx");。没有人关心基类MM是怎么看帅哥,因为它只是一个模版,所以我们干脆就不要这句代码,而且我们连{}也不要了,直接改写这个方法为public abstract void toSeeGG();,那么这个方法称做抽象方法(abstract method)。基类MM对我们来说没有实现的必要,于是我们把class MM{...}改写为abstract class MM{...},那么这个类叫做抽象类(abstract class)。我们不禁要问,那么抽象类能不能含有非抽象的函数呢。答曰:可以。但是这在实际中没有什么用处,唯一用到的地方是:1,main()函数,用来测试你的类;2,考试中。那么我们还要问,子类可以不覆写父类中抽象方法行不行?答曰:如果子类也是abstract,那么可以,否则不行。
比抽象类做的更彻底的是接口(注意,这里的接口是JAVA中真正意义的接口,非上文一开始的接口,也既行为)。接口被设计出来的目的就是要让你继承的。等………,这是第一章,只让大家知道一些概念就行了,上面我们说的太多了。
BRUCE是个彻底的NN大师,我们接下来看到他把JAVA的低效率问题说的是那么的理所当然,以至于我们看完后情不自禁也要说:
恩,JAVA就应该这样做,让C++见鬼去吧。面向对象,于是所有东东都是对象,有对象便有对象的产生和毁灭。程序运行的时候,对象产生在内存中。内存分配有三种策略,分别是静态的,栈式的(stack),和堆式的(heap)。C++使用前两种策略,JAVA仅使用后者。两者有什么区别呢?喜欢寻根究底的朋友请参考本站JSP/JAVA分坛的“栈存储(stack)和堆存储(heap)的区别 ”,我们只要记住,后者在内存中的寻址要花更长的时间,因此JAVA的效率低。但是JAVA提供了根据heap特点产生的垃圾回收机制。垃圾回收机制完成这样的任务,当你的对象不在使用的时候它会自动察觉并消灭。你不用再担心发生内存泄露了。而这是每个C++程序员最头疼的事情。所以,你选择吧,是要安全还是要效率。
其实第一章接下来讲的东西对于初学者来说已经并不重要了,以上你的知识你明白了之后,在接下来的学习上你会轻松很多。我建议你不要看的那么清晰了。我想我们应该开始,马上进入第二章了。
以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有 的相关内容,欢迎继续使用右上角搜索按钮进行搜索java , 对象 , class , 方法 , 抽象 , mm , 一个 , java覆写 易混淆 抓关键词理解课文、抓关键词理解句子、阅读理解关键词、论文关键词一般几个、关键词一般有几个,以便于您获取更多的相关知识。
不需要对源代码混淆。class有这种功能的,在J2ME中混淆是必须的,结果跟你说的一样,不过原理不是你那么走的,混淆以后的class反编译也会让人看不懂,全部变成了a,b,c,d这样的名字。
混淆代码 是为了防止class文件被反编译用的 但是程序的功能还是正常的 和你正常运行一样
如果连变量名都混淆了,就是说所有有具体意义的英文变量名都用a,b,c,x,y等等来表示,那这是不可能还原的,因为电脑也不可能知道你这个a实际上代表了你的年龄而那个c代表了你老婆的胸围!
但如果只是个事混淆,那网上倒有不少工具可以格式化源代码!自己搜一搜吧!推荐一款编辑器,IntelliJ,很不错,值得一提的是,我用过的众多编辑器中,这款编辑器的代码格式化功能最强大!
一、java web项目混淆
proguard4.8工具,说是支持war的,可混淆过后少了classes目录了,自然成功不了。网上搜的过程不详说了,最后找着--“J2EE-web工程ProGuard代码混淆07_28”,网址:
根据提示一步步完成。
把web项目打成jar包后用proguard进行混淆,然后把混淆过后的class目录替换发布包war中的对应目录,启动运行是正常的。
主要注意利用proguard生成xxx.pro文件,然后手动加工-keep class WebRoot.WEB-INFO.lib.* 等项目中不需要混淆的包和类。
二、java web项目打成.exe
没找到免费的,这搜到个收费的--Jinstall,试了下功能挺好,
可以加密、集成jdk、tomcat,如果数据库是mysql也集成,其他数据库的话要设置数据库的url.