现在有一个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类呢?这个类是验证注册码的,肯定受到了很好的保护,请各位指点!可以继续追加分数
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类呢?这个类是验证注册码的,肯定受到了很好的保护,请各位指点!可以继续追加分数
这是一种典型的类隐藏技术
楼上正解,太强大了,的确是这样的,通过艰难的寻找,终于明白了,作者为了版权保护,真是煞费苦心。
将验证类进行编译,将class文件二进制读取之后再64位加密成为字符串,然后写到java文件中,将该字符串解密然后再翻译成class文件,使用自定义的类加载器进行加载........
真是煞费苦心,找到这个机制纯粹是偶然。
学习了
楼上正解,太强大了,的确是这样的,通过艰难的寻找,终于明白了,作者为了版权保护,真是煞费苦心。
将验证类进行编译,将class文件二进制读取之后再64位加密成为字符串,然后写到java文件中,将该字符串解密然后再翻译成class文件,使用自定义的类加载器进行加载........
真是煞费苦心,找到这个机制纯粹是偶然。
学习了