复制的class文件为什么不能反编译
① 我用反编译文件将class编译后成了java然后什么都没改结果没法还原成class了
就拿目前最流行的反编译工具jad来说,目前他也无法正常反编译class中
关于try catch finally的部分,同时他的官方网站上也有说明他反编译
的内容仅为java文件的主体流程,其中如果出现参数或方法名错误很正常
因此反编译文件不能正常还原java.class很正常,这就是为什么java有不开源
的程序,如果都可以反编译class文件,那些不开源的岂不都是免费的了,因此该
工具仅能够参考,不能够照抄,希望对你有帮助
② java问题:为什么有些class文件反编译不了
private 的属性 方法不会被反编译出御液来的。
还有就搏模是某些class是作者用自己的编译器编译的.你也反编译不出来
还有就是加密了基拆缓.
③ 如何利用反编译软件打开并修改class文件
没办法完全反编译所以的class文件为java文件的,因为java中编译具有不可逆性。
但是可以将每个文件反编译,之后直接放到相应的包路径下来进行重新编码。
第一步:通过附件的“jd-gui”打开jar文件;
第二步:将每个class文件的内容,粘贴到一个新建的java工程中(包路径必须相同);
第三步:修改需要修改的类,之后如果运行没问题的话,直接导出为jar包即可。
备注:其实此过程中出错的几率还是很大的,如果能够实现百分百编译的话,那么所以的项目也就间接开源了,这肯定是不现实的。
④ 任何程序都可以反编译吗为什么有一些程序不可以反编译
javap是用作反编译的,但是javap只能给出你要反编译的class的结构,比如有什么方法,有什么static或者非static的变量什么,但不可能产生源代码编译后的文件不是原代码文件,所以不能直接拿来编译。希望楼主采纳
⑤ 为什么反编译点class文件不能被编辑啊
由于Java字节码的抽象级别较高,因此它们较容易被反编译。下面介绍了几种常用的方法,用于保护Java字节码不被反编译。
1.隔离Java程序
2.对Class文件进行加密
3.转换成本地代码
4.代码混淆
⑥ 安装jadClipse插件后,还是不能反编译.class:
完整步骤如下:
1.下载jad.exe(Jad v1.5.8g版本)和net.sf.jadclipse_3.3.0.jar;
2.将jad.exe放进\Java\jdk1.7.0\jre\bin目录底 下,如果你的环境变量设置的没有问题,那么在DOS环境下敲入cmd->jad,你会发现jad命令已经可以使用了,但是要与 MyEclipse6.5结合使用,请看下一步;
3.将net.sf.jadclipse_3.3.0.jar放到下面的目录下 D:\MyEclipse 6.5\eclipse\plugins;
4.重新启动MyEclipse6.5,进入 Preferences->Java->JadClipse,设置(1)Path to decompiler路径为Jad.exe的全路径,例如:C:\Program Files (x86)\Java\jdk1.6.0_07\jre\bin\jad.exe设置(2)在Directory for temporary files中指定临时文件的路径 如:C:\Program Files (x86)\MyEclipse 6.5\myeclipse\temp(如果没有temp文件夹,自己创建一个空的取名为temp就行)点击Apply->OK;
5.Window->Preferences->General->Editors->File Associations,将.class文件默认成通过JadClipse Class File Viewer打开。
⑦ 可以反编译.class文件吗
当然可以了。在java软件包的bin文件夹下有一个javap程序,就是用来反编译的。
用法如java一样。就是先用javac变成字节码文件就是.class文件后,用javap 加上文件名就可以反编译了。
举个例子test.class,反编译用javap test就行了。
⑧ 最新我公司在使用部署一公司的java web应用程序发现他们的所有的class无法反编译,怎么做到的
怎么可能不能反编译,除非他的代码不想让机器运行。
java加密无非是模糊化或者是修改classloader加密。前一种直接反编译,只是不容易看而已。
后一种先反编译classloader,研究加密过程,再解密反编译即可。
⑨ 混淆的class文件怎么进行反编译
一般情况下Java应用的开发者为了保护代码不被别人抄袭,在生成class文件的时候都java文件进行了混淆,这种class文件用反编译工具得到的结果很难看懂,并且不能进行编译。
从研究的角度,浅析如何读懂这种反编译过来的文件。
例子一:赋值
反编译过来的代码如下:
Node node;
Node node1 = _$3.getChildNodes().item(0);
node1;
node1;
JVM INSTR swap ;
node;
getChildNodes();
0;
item();
getChildNodes();
0;
item();
getNodeValue();
String s;
s;
原始语句:
Node node;
Node node1 = currDocument.getChildNodes().item(0);
node = node1;
String s = node.getChildNodes().item(0).getChildNodes().item(0).getNodeValue();
注解:
JVM INSTR swap ; //赋值语句
练习:
String s1;
String s8 = node.getChildNodes().item(1).getChildNodes().item(0).getNodeValue();
s8;
s8;
JVM INSTR swap ;
s1;
10;
Integer.parseInt();
int i;
i;
例子二:不带参数创建对象
反编译过来的代码如下:
JVM INSTR new #244 ;
JVM INSTR p ;
JVM INSTR swap ;
CrossTable();
CrossTable crosstable;
crosstable;
原始语句:
CrossTable crosstable = new CrossTable();
注解:
练习:
JVM INSTR new #246 ;
JVM INSTR p ;
JVM INSTR swap ;
Database();
Object obj;
obj;
例子三:带参数创建对象
反编译过来的代码如下:
JVM INSTR new #262 ;
JVM INSTR p ;
JVM INSTR swap ;
String.valueOf(s2);
StringBuffer();
s.substring(j, i);
append();
s6;
append();
toString();
s2;
原始语句:
s2 = (new StringBuffer(String.valueOf(s2))).append(s.substring(j, i)).append(s6).toString();
注解:
此语句实际上是:s2 += s.substring(j, i) + s6;
练习:
例子四:for循环
反编译过来的代码如下:
int k = 0;
goto _L4
_L8:
...
k++;
_L4:
if(k < as.length) goto _L8; else goto _L7
原始语句:
for(int k=0;k < as.length;k++)
{
...
}
注解:
例子五:while循环
反编译过来的代码如下:
String s1 = "";
goto _L1
_L3:
JVM INSTR new #262 ;
JVM INSTR p ;
JVM INSTR swap ;
String.valueOf(s1);
StringBuffer();
_$2(resultset, s, l);
append();
toString();
s1;
_L1:
if(resultset.next()) goto _L3; else goto _L2
原始语句:
String s1 = "";
while(resultset.next())
{
s1 = s1 + resultSetToString(resultset, s, l);
}