日期:2014-05-20  浏览次数:20603 次

请教一个关于j2ee应用license的问题
现在有一个j2ee的web应用,在启动的时候会有个验证类读取本地磁盘存放的一个license并判断使用该应用是否合法,类似于注册码一样的机制,为了弄清楚他的原理,我反编译了核心jar包的class文件获取到了代码,通过分析我知道它将license信息读取到一个名为License类的list变量中,License类的职责很单一:

class License{
 public static List info=new ArrayList();//某验证类调用License时,类加载器加载该类并实例化info变量供某验证类调用}

原理初步为当验证类准备验证license时,通过License.info方式取得该list,然后读取本地的license,将验证信息存放到list中作为一个静态变量一直存在。如果注册码不对或者其他原因,则直接system,exit
于是我开始调试,准备将该验证类找到。
在License类中设置断点并启动应用,发现的确经过了该处,但是让我不理解的是在调试的时候发现调用License类的验证类名为ClassAuth,该类完整的路径为com.comp.auth.ClassAuth,我找遍了整个工程以及所有的代码都没有发现该类的踪影?我确定它不在我我应用下面,在myeclipse的debug窗口中显示的调用栈信息,的确是名为ClassAuth的类调用的,但是就是没有该类的踪影,在com.comp.auth路径下也没有该类。

请问各位牛人,这是怎么回事?java有隐藏类的技术吗?我该去哪里找到ClassAuth类呢?这个类是验证注册码的,肯定受到了很好的保护,请各位指点!可以继续追加分数

------解决方案--------------------
猜测是采用了动态的类加载技术,比如将java文件编译成class文件,然后将class文件读到byte[]中进行加密,生成加密的字符串,要使用该类的时候,逆向翻译改字符串,将class文件加载,然后revoke相关方法。。。
这是一种典型的类隐藏技术