jad反编译class文件还原成java源码的错码校正求助
分析jad反编译实例错码问题,希望能与大家讨论总结并得到指导.
具体实例反编译后出现错码的地方有:
1.类中的变量与方法错码:部分变量名与方法名使用了java程序中的保留关键字,语法上应该是错误的,部分代码如下
public String new;
private String case;
private boolean goto;
private boolean g;
private long try;
private boolean else;
public boolean ka()
{
return h.y();
}
public boolean if()
{
return h.void();
}
public int for()
{
return h.l();
}
问题分析:关于此类是一个软件的jar包中的class文件,该软件的运行使用此类文件,证明此类在该软件的运行环境中正常加载,故可断点此类无语法错误。但将此类引用到jdk的classpath环境或ide工具的工作环境,利用集成工具生成此类的实例,在实例中用“.”自动提示实例方法与变量中也与上拷贝代码一样,出现java保留关键字的变量与方法,此类应该在编译生成class文件时报错。如何生成了如前分析的正确jar包。个人分析源代码作者使用的jdk不可能从根本上改写了jdk的关键字,故此问题是否也因jad反编译的问题,加密?请各位兄弟姐妹,帮忙分析分析,谢谢!
用jad.exe反编译命令的某些参数反编译得到的结果稍有不同,命令参数(参考:http://cnnt.blog.ccidnet.com/blog-htm-do-showone-type-blog-itemid-119813-uid-42851.html)
-pf <pfx>- 用数字名字给所有的成员变量加前缀 (default: _fld)
-pe <pfx>-给没有用到的异常的名字加前缀
-pl <pfx>- 给局部变量用数字名字加前缀 (default: _lcl)
-pm <pfx>-给方法用数字名字加前缀 (default: _mth)
得到java代码如下,将下java代码编译成class文件却不可以在原软件运行环境中使用,故代码的解析还原应该有问题,具体反编码得到的部分java源码如下:(截取部分,与上代码进行对照)
public String _fldnew;
public int _mthfor()
{
return h.l();
}
2.类中第二类错误代码,粘贴一方法反编码的代码
private String c()
throws FioranoException
{
RandomAccessFile raf = null;
String s;
raf = new RandomAccessFile(new, "r");
if (raf.length() <= 0L)
break MISSING_BLOCK_LABEL_35; s = raf.readLine();
return s;
String s1;
try
{
s1 = null;
}
catch (IOException e)
{
throw new FioranoException(e.getMessage());
}
return s1;
local;
try
{
if (raf != null)
raf.close();
}
catch (IOException e) { }
JVM INSTR ret 5;
}
出现了break MISSING_BLOCK_LABEL_35;与JVM INSTR ret 5;代码,此部分代码作怎样的还原。关于JVM代码查找相关资料好像由于此部分代码由于jad无法反编译而不确定的部分,可能因为源程序加密。若是如此只能根据相关逻辑,推测改写还原代码了。
java是强制性检验编译的,若仅有上问题一中java代码可否编码生成正常使用的class文件,请大家帮忙分析一下,若能正常编码通过,个人分析在上文中提到的软件环境中应能正常使用,因为根据上面分析此软件的其它相关类中引用的方法与该类中定义的一致。