社区
Web 开发
帖子详情
Java 的反编译问题
JE8000TO
2010-06-26 11:23:59
一个Java代码,编译后会生成 A.class B.class C.class等文件(举例子)。但是使用jad命令进行反编译,还原到以前的那个Java代码。好像就有点乱了!只给你.class文件,你如何能完整的写出原代码?对反编译感兴趣的可以发表下看法。
...全文
265
15
打赏
收藏
Java 的反编译问题
一个Java代码,编译后会生成 A.class B.class C.class等文件(举例子)。但是使用jad命令进行反编译,还原到以前的那个Java代码。好像就有点乱了!只给你.class文件,你如何能完整的写出原代码?对反编译感兴趣的可以发表下看法。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
反编译
工具(XJad) 2.2 中文绿色版
java
反编译
工具(XJad) 2.2 中文绿色版 一个可以将.class文件
反编译
回.
java
的工具,
java
反编译
工具:XJad2.2,可打开.class 电脑端用,
java
jar模拟器:KEmulator 功能特点: ======== 1、XJad是基于Jad核心的
Java
源程序
反编译
软件,内置Jad1.5.8e2; 2、可处理多个*.class文件,可以处理文件夹内的所有文件,甚至可以处理*.jar文件; 3、带有多页面文本编辑器,也可集成在资源管理器中,随时点击右键都可进行操作; 4、支持
java
语法的高亮显示; 使用说明: ======== 1、打开一个或者多个*.class文件,XJad
反编译
后,重命名为*.
java
文件, 保存至当前文件夹,并在编辑器中打开查看; 2、打开一个文件夹,XJad将该文件夹下所有*.class文件进行
反编译
,并保存至该文件夹下, 依据包路径信息生成文件夹路径,如com.spring.framework.*, 将建立com\spring\framework的文件夹结构; 3、打开一个*.jar文件,XJad将该Jar文件中的所有*.class文件解压缩到临时目录并进行
反编译
, 并将源文件带包路径信息保存至当前文件夹下名称为“~” + *.jar 的文件夹中; 功能改进: ======== 1、发现Jad1.5.8g在
反编译
部分文件时异常中断,还原为Jad1.5.8e2;
经典的
java
反编译
工具 jad
JAD本身是一个命令行工具,没有图形界面,我之前上传的Cavaj
Java
Decompiler就是以jad为内核,加了一个图形界面……
反编译
工具jad简单用法 以下假设jad.exe在c:\
java
目录下 一、基本用法 Usage: jad [option(s)] 直接输入类文件名,且支持通配符,如下所示。 c:\
java
\>jad example1.class c:\
java
\>jad *.class 结果是将example1.class
反编译
为example1.jad。将example1.jad改为example1.
java
即得源文件。 二、Option -o 不提示,覆盖源文件 三、Option -s c:\
java
\>jad -s
java
example1.class
反编译
结果以.
java
为扩展名。 四、Option -p 将
反编译
结果输出到屏幕 c:\
java
\>jad -p example1.class 将
反编译
结果重定向到文件 c:\
java
\>jad -p example1.class>example1.
java
五、Option -d 指定
反编译
的输出文件目录 c:\
java
\>jad -o -dtest -s
java
*.class 命令行选择的列表 -a - 用JVM字节格式来注解输出 -af - 同 -a,但是注解的时候用全名称 -clear - 清除所有的前缀 -b - 输出多于的括号 (e.g., if(a) { b(); }, default: no) -d - 指定输出文件的文件目录 -dead -试图
反编译
代码的dead 部分(default: no) -disass - 不用用字节码的方式
反编译
(no
JAVA
source generated) -f - 输出整个的名字,无论是类还是方法 -ff -输出类的成员在方法之前 (default: after methods) -i - 输出所有的变量的缺省的最初值 -l - 将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) 很多人困扰,
反编译
之后中文显示乱码
问题
,其实显示的不是乱码,是unicode字符。 -8 - 将Unicode字符转换为ANSI字符串,如果输出字符串是中文的话一定要加上这个参数才能正确显示。 最常用的
反编译
指令如下所示: Jad –d D:\
java
source –s .
java
-8
java
test.class 这条指令将当前目录下的
java
test.class
反编译
为
java
test.
java
并保存在D:\
java
source目录里,其中的提示输出为中文,而不是Unicode代码。
java
反编译
工具
反编译
.class文件
java
反编译
工具
反编译
.class文件
java
反编译
工具
反编译
.class文件
java
反编译
工具
反编译
.class文件
java
反编译
工具
反编译
.class文件
java
反编译
工具
反编译
.class文件
Java
反编译
工具大全
java
反编译
工具.rar
java
反编译
核jad.rar
jadclips.rar
DJ
Java
Decompiler 3.10.10.93.rar
Cava
Java
.rar
jd-gui 0.2.9 -
java
反编译
小工具
一款小巧的
java
反编译
工具,功能很强大,
反编译
出来的代码跟源码基本一样
Web 开发
81,117
社区成员
341,739
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章