以下是技术问题,对java没兴趣的可以跳过了……
最近装了一个软件,用来画UML图,并且可以对Java代码做反向工程。但是,Java 1.5的代码免费版本不支持,非要什么Professional版本不可。搞得我很郁闷,研究了一晚上,搞定了它。
其中最重要的是代码的反编译。现在这些java软件一般都用混淆器做obfuscation,比如RetroGuard和Proguard等等。混淆了之后的代码反编译起来就很难看,有些变量被起名叫for, while之类的关键字,类名都叫a,aa,b,之类的,完全没有了意义。而且,有的文件名还是重复的(比如hh.class和HH.class在jar里面是两个class,但是解压到windows平台上就是重名的……)。有意思的是,我们可以用混淆器的这个特点,把被混淆过的jar再弄得稍微有意义一点,好读一点点。这也不是我的原创,网上有个人写了很好的说明。基本原理是,替换掉混淆器里面的NameMaker,这也他就可以产生有意义一点的名字。然后这个人写了一个Noun的NameMaker,把classname,变量的名字都换成名词。还有一个动词的name maker,把所有的方法都搞成动词。接下来就用jad反编译就好了。
反编译出来的java class很有意思,比如:
public class koreanRedFox
{
public koreanRedFox(blueGrayGnatcatcher bluegraygnatcatcher)
{
bison = new HashMap();
deinonychus = “”;
purpleCappedLory = new HashMap();
misknow(bluegraygnatcatcher);
}