关于使用jad对class反编译的几个问题

炀大人 2016-08-30 11:41:07
我使用jad来对class进行反编译,发现几个问题:
1,中文编程unicode(这个已经解决了);
2,注释消失(这个应该在生成class的时候就丢弃了);
3,注解消失,这个就真不知道怎么整了,因为有时候看一个controller或其它含注解的,想看看url就变得困难,哪位大神有这种特技,求解
...全文
487 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
securitit 2016-09-01
  • 打赏
  • 举报
回复
那得看消失注解的作用范围了 注解分为源码级、编译级和运行时,楼主应该知道吧。 得看你所谓的消失的注解是哪个级别的
炀大人 2016-09-01
  • 打赏
  • 举报
回复
只要能真正的解决问题,分都是没问题的,契约精神还是要遵守的
炀大人 2016-09-01
  • 打赏
  • 举报
回复
比如说java本身的注解,或者SSH框架的注解等,这些java代码编译后既然能tomcat里运行,应该还是有保留到class里的,但通过jad反编译后就不见了,我需要的就是@开头的这些注解,请问你知道如何设置吗?
3. 将jadnt158.zip 解压,拷贝jad.exe 到%JAVA_HOME%\bin\ 目录下。 4. 安装插件net.sf.jadclipse_3.3.jar (将此文件拷到eclipse 的plugins目录(%eclipse_home%\plugins)下,例如C:\MyEclipse Enterprise Workbench 6.5GA\eclipse\plugins下)。 5. 设定路径:进入Window -> Preferences -> Java -> JadClipse,Path to decomiler设置为jad.exe的绝对路径,例如C:\j2sdk1.4.2\bin\jad.exe,Directory for temporary files设置为存放临时文件的决对路径这里我把它设置为C:\Documents and Settins\桌面\.net.sf.jadclipse 。 6. 在Eclipse 的Windows—> Perferences—>General->Editors->File Associations 中修改“*.class”默认关联的编辑器为“JadClipse Class File Viewer”。如果没有*.class,则点击“add"增加,如果没有jadclipse Class File Viewer,可以点击“Add-Internal Editors”,查找是否有jadclipse,若还是没有,则说明net.sf.jadclipse没有复制到正确的位置. 安装设置完毕,可以双击class文件,测试一下,正确的情况是:反编译成功,可以显示class文件(无需增加src源文件)为普通的java源代码样式,另外,在Myeclipse菜单栏上多出了一个JadClipse菜单. 现在可以通过myeclipse直接查看class文件,阅读代码效率高了许多~~~~~~ 安装时应注意: jadclipse的版本一定要和eclipse的版本一致! 比如,我用的Myeclipse版本为6.5,其包含的eclipse版本为3.3, 一开始我使用的是net.sf.jadclipse_3.2.4.jar,都不能正确浏览无源码的*.jar文件,后来我重新下载了net.sf.jadclipse_3.3.0.jar,才可以正确浏览!!! 总共需要下载两个文件: 1. 反编译工具jad 2. eclipse的插件JadClipse jad是命令行式的反编译程序,将class文件反编译java操作的工具,如下说明几个简单的反编译操作: 将当前文件夹下的abc.class文件反编译成abc.jad文件 D:\jad>jad abc.class 将当前文件夹下的abc.class文件反编译成abc.java文件 D:\jad>jad -sjava abc.class jad可以单独使用Jadclipse是eclipse中的一个插件,是用于在eclipse中双击*.class文件时直接查它的*.java代码,相当于一个查看器,但不可以单独使用
Jocky混淆JAVA代码(保护你的JAVA项目) 一、前言 1.1 什么是Jocky? 我们知道,Java是一种跨平台的编程语言,其源码(.java文件)被编译成与平台无关的字节码(.class文件),然后在运行期动态链接。这样,编译后的类文件中将包含有符号表,从而使得Java程序很容易被反编译。相信每一个Java开发人员,都曾经用过诸如Jad之类的反编译器,对Java的class 文件进行反编译,从而观察程序的结构与实现细节。如此一来,对于那些需要严格进行知识产权保护的Java应用,如何有效的保护客户的商业投资,是开发人员经常需要面对的问题。 于是就出现了Java混淆编译器,它的作用是打乱class文件中的符号信息,从而使反向工程变得非常困难。 Jocky就是这样一款优秀的Java混淆编译器。 1.2 为什么需要Jocky? 目前业界有不少商业的甚或是开源的混淆编译器,但它们普遍存在一些这样或者那样的问题。一般而言,现有的混淆器都是对编译好的 class文件进行混淆,这样就需要编译和混淆两个步骤。而事实上,并不是所有的符号都需要混淆。如果你开发的是一个类库,或者某些类需要动态装载,那些公共API(或者说:那些被publish出来的API)就必须保留符号不变,只有这样,别人才能使用你的类库。现有的混淆器提供了GUI或脚本的方式来对那些需要保留的符号名称进行配置,但如果程序较大时,配置工作将变得很复杂,而程序一旦修改,配置工作又要重新进行。某些混淆器能够调整字节码的顺序,使反编译更加困难,但笔者经历过混淆之后的程序运行出错的情况。 而Jocky与其它混淆编译器最大的不同之处在于:它是直接从源码上做文章,也就是说编译过程本身就是一个混淆过程。 1.3 Jocky是如何工作的? Jocky混淆编译器是在Sun JDK中提供的Java编译器(javac)的基础上完成的,修改了其中的代码生成过程,对编译器生成的中间代码进行混淆,最后再生成class文件,这样编译和混淆只需要一个步骤就可以完成。另外可以在源程序中插入 符号保留指令 来控制哪些符号需要保留,将混淆过程与开发过程融合在一起,不需要单独的配置。 1.4 Jocky的作用 1.4.1代码混淆 如前文所述,混淆编译是Jocky的首要用途。我们举一个最简单的例子,下面的SimpleBean是未经混淆的class文件通过Jad反编译以后获得的源文件: 1 public class SimpleBean implements Serializable { 2 3 private String name = "myname"; 4 5 private List myList = null; 6 7 public void SimpleBean() { 8 myList = new ArrayList(10); 9 } 10 11 public void foo1() { 12 myList.add("name"); 13 } 14 15 private void foo2() { 16 } 17 18 private void writeObject(java.io.ObjectOutputStream out) 19 throws IOException { 20 21 } 22 23 } 下面是经Jocky混淆过的类文件,通过Jad反编译后产生的源文件: 1 public class SimpleBean implements Serializable { 2 3 private String _$2; 4 5 private List _$1; 6 7 public SimpleBean() { 8 _$2 = "myname"; 9 this; 10 JVM INSTR new #4 ; 11 JVM INSTR dup ; 12 JVM INSTR swap ; 13 10; 14 ArrayList(); 15 _$1; 16 } 17 public void foo1() { 18 _$1.add("name"); 19 } 20 21 private void _$1() { 22

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧