社区
Web 开发
帖子详情
Java 的反编译问题
JE8000TO
2010-06-26 11:23:59
一个Java代码,编译后会生成 A.class B.class C.class等文件(举例子)。但是使用jad命令进行反编译,还原到以前的那个Java代码。好像就有点乱了!只给你.class文件,你如何能完整的写出原代码?对反编译感兴趣的可以发表下看法。
...全文
300
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
反编译
揭开一些
问题
的真相
本文通过
反编译
Java
代码,揭示了`i++`和`++i`在
Java
中的运行规则,以及如何通过
反编译
理解复杂表达式的计算过程。作者通过示例和
反编译
结果,解释了
Java
中自增运算符的执行顺序,并指出
反编译
在
问题
排查和深入理解
Java
机制上的重要性。
Java
反编译
常见
问题
本文系统剖析
Java
反编译
中七大典型
问题
:编译期常量与死变量、控制流结构化恢复失败、异常处理结构还原失真、Phi节点翻译失效、语法糖脱糖导致版本降级、方法内联引发代码膨胀,以及标识符退化、注释丢失、内部类拆解和编译器优化副作用等表层异常。
问题
根源均指向
java
c编译不可逆性、JVM字节码无结构特性及编译器优化机制,对逆向工程与遗留系统重构具有关键指导意义。
《
Java
实时
反编译
工具》常见
问题
解决方案
本文介绍
Java
实时
反编译
工具“friday”,用于查看修改后的字节码,使用
Java
Agent方式,支持多系统。还给出新手常见
问题
及解决步骤,如项目启动失败、无法找到类文件、界面显示异常等,可通过检查JDK版本、类全名、库版本等解决,也可在GitHub求助。
java
反编译
遇到
问题
在测试谷歌GTS时,GtsNmgiarcTestCases包遇到错误,期间进行apk
反编译
。使用dex2jar
反编译
时出现错误,搜索相关解决方法,下载dex2jar 2.x版本并自行用gradle编译,虽编译成功但仍无法查看部分class,怀疑与
Java
版本有关,后续待解决。
13、
Java
字节码
反编译
:
问题
、陷阱与误区
本文深入探讨
Java
字节码
反编译
面临的
问题
,如类型转换、代码优化、控制流重构等。介绍了Dava
反编译
器,它基于Soot框架和SET重构方法,能较好处理异常和对象锁定等
问题
。还提及
反编译
性能优化、应用场景及未来支持新特性、智能化等发展趋势。
Web 开发
81,111
社区成员
341,723
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章