社区
Web 开发
帖子详情
Java 的反编译问题
JE8000TO
2010-06-26 11:23:59
一个Java代码,编译后会生成 A.class B.class C.class等文件(举例子)。但是使用jad命令进行反编译,还原到以前的那个Java代码。好像就有点乱了!只给你.class文件,你如何能完整的写出原代码?对反编译感兴趣的可以发表下看法。
...全文
250
15
打赏
收藏
Java 的反编译问题
一个Java代码,编译后会生成 A.class B.class C.class等文件(举例子)。但是使用jad命令进行反编译,还原到以前的那个Java代码。好像就有点乱了!只给你.class文件,你如何能完整的写出原代码?对反编译感兴趣的可以发表下看法。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wqkjj
2010-06-27
打赏
举报
回复
[Quote=引用 5 楼 je8000to 的回复:]
我的意思是这样的 你先写一个稍微有点复杂的Java代码。里面包含有3个以上的方法,以及相关的子类。但只有一个main()方法。然后你将其编译,编译之后,删除原来的 a.java文件。接下来,你使用仅有的.class文件将程序的结果运行出来,就可以了(不管你使用什么方法)。动手操作下…… 谢了!
[/Quote]
如果这也是问题的话,不知道LZ想问什么问题。
ZangXT
2010-06-27
打赏
举报
回复
如果没有混淆过,反编译还是很容易的。我有一次写了一个一千多行代码的类,不小心把源码丢了,反编译后继续编
水中影子
2010-06-27
打赏
举报
回复
JAVA反编译工具 如:XJad
当然不可能和源代码一模一样,有点差异的
wzju64676266
2010-06-27
打赏
举报
回复
[Quote=引用 7 楼 bao110908 的回复:]
甭想跟源代码一模一样,这是不可能的!
[/Quote]
但jvm如果没有对文件进行优化处理呢?反编译处理的属性一般是在方法之前
JE8000TO
2010-06-27
打赏
举报
回复
[Quote=引用 7 楼 bao110908 的回复:]
甭想跟源代码一模一样,这是不可能的!
[/Quote] 是这样的。
sl514
2010-06-27
打赏
举报
回复
jd-gui Java反编译器
直接把class拖到界面上就行了
chainhou
2010-06-27
打赏
举报
回复
用个工具试下,jd-gui
duben4814
2010-06-27
打赏
举报
回复
[Quote=引用 6 楼 wqkjj 的回复:]
引用 5 楼 je8000to 的回复:
我的意思是这样的 你先写一个稍微有点复杂的Java代码。里面包含有3个以上的方法,以及相关的子类。但只有一个main()方法。然后你将其编译,编译之后,删除原来的 a.java文件。接下来,你使用仅有的.class文件将程序的结果运行出来,就可以了(不管你使用什么方法)。动手操作下…… 谢了!
如果这也是问题的话,不知道LZ想问什么问题。
[/Quote]
用jad这样做了,可以正常运行,和在编译器中运行结果一样,有什么问题想说?
waitdream
2010-06-27
打赏
举报
回复
[Quote=引用 7 楼 bao110908 的回复:]
甭想跟源代码一模一样,这是不可能的!
[/Quote]
在TC没什么不可能的~
火龙果被占用了
2010-06-27
打赏
举报
回复
甭想跟源代码一模一样,这是不可能的!
JE8000TO
2010-06-26
打赏
举报
回复
我的意思是这样的 你先写一个稍微有点复杂的Java代码。里面包含有3个以上的方法,以及相关的子类。但只有一个main()方法。然后你将其编译,编译之后,删除原来的 a.java文件。接下来,你使用仅有的.class文件将程序的结果运行出来,就可以了(不管你使用什么方法)。动手操作下…… 谢了!
JE8000TO
2010-06-26
打赏
举报
回复
你用 HelloWorld.java 程序编译,HelloWorld.class 然后再用你的方法试下
qiheia
2010-06-26
打赏
举报
回复
那直接用java命令来运行你的.class文件就可以啊
java a.class
JE8000TO
2010-06-26
打赏
举报
回复
嗯 这个我知道的 如果只给你3个.class文件(这3个文件是一个applet程序编译的二进制文件),在没有原Java的代码的情况下,你采取方法将其运行出来就可以了……
qiheia
2010-06-26
打赏
举报
回复
直接用反编译工具不就可以吗?
下面是jad命令的解释。。。
JAD命令
首先,看一下jad的帮助提示
-a - 用JVM字节格式来注解输出
-af - 同 -a,但是注解的时候用全名称
-clear - 清除所有的前缀
-b - 输出多于的括号 (e.g., if(a) { b(); }, default: no)
-d <dir> - 指定输出文件的文件目录
-dead -试图反编译代码的dead 部分(default: no)
-disass - 不用用字节码的方式反编译 (no JAVA source generated)
-f - 输出整个的名字,无论是类还是方法
-ff -输出类的成员在方法之前 (default: after methods)
-i - 输出所有的变量的缺省的最初值
-l<num> - 将strings分割成指定数目的块的字符 (default: no)
-lnc - 将输出文件用行号来注解 (default: no)
-nl - 分割strings用新行字符 newline character (default: no)
-nodos -不要去检查class文件是否以dos方式写 (CR before NL, default: check)
-nocast - 不要生成辅助文件
-nocode -不要生成方法的源代码
-noconv - 不要转换java的定义符 (default: do)
-noctor - 不允许空的构造器存在
-noinner -关掉对内部类的支持 (default: turn on)
-nolvt - 忽略局部变量的表信息
-nonlb - 不要输出一个新行在打开一个括号之前 (default: do)
-o - 无需确认直接覆盖输出 (default: no)
-p - 发送反编译代码到标准输出 STDOUT (e.g., for piping)
其次.常用命令
jad -o -r -sjava -dsrc test.class
tree目录下的所有*.class文件
jad -o -r -sjava -dsrc tree/**/*.class
unix可以表示为:jad -o -r -sjava -dsrc 'tree/**/*.class'
指定输出文件的名字的话,用以下的转移命令
jad -p example1.class > myexm1.java
java
反编译
工具
选择
java
编译好的class文件,反向生成
java
文件,有需要的希望能帮助到
java
反编译
工具for mac版
该软件用于
java
的class文件
反编译
,实测好用,欢迎大家下载,有
问题
可以留言。。。。。
java
反编译
(将class文件反向编译成
java
源文件)
java
反编译
(将class文件反向编译成
java
源文件)
java
反编译
工具
反编译
.class文件
java
反编译
工具
反编译
.class文件
java
反编译
工具
反编译
.class文件
java
反编译
工具
反编译
.class文件
java
反编译
工具
反编译
.class文件
java
反编译
工具
反编译
.class文件
java
反编译
工具eclipse插件jad
java
反编译
工具eclipse插件jad
Web 开发
81,092
社区成员
341,717
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章