网友俱乐部 » » JAVA教程 » JAVA应用简单破解--类库提前加载

2008-1-7 14:37 ljjk5
JAVA应用简单破解--类库提前加载

 在JAVA运行的时加载jar包类库 要是有相同的包路径,相同的类名字出现,那么JVM是否 会报告错误呢?   当然不会! JVM只会加载最早的出现的CLASS
  首先JVM会加载 自己默认的包 然后加载 EXT目录下面的所有JAR 再到 classpath
  那么 现在有2个 JAR 分别是 kj021320.jar summer.jar 里面都有包路径cn.isto
  同样有 类Jcrack.class 那么 JVM就会看哪个 类先加载到VM中就用哪个!后面读进来的 如果路径名字一样 就会丢弃!
  想到以上加载方式大家会想象到什么呢?
  我们首先设计一个类
[font=NSimsun]//这个是专门破解的类
package cn.isto;
public class Jcrack{
public Jcrack(){}
boolean getLogin(String pwd){
 return true;
}
}[/font]
  里面只有一个方法判断 登陆是否成功 直接返回一个true
  把这个类打包为 kj021320.jar
  下面我们再来写2个类
[font=NSimsun]//这个是真正运行时候判断登陆的类
package cn.isto;
public class Jcrack {
  public Jcrack() {
  }
  boolean getLogin(String pwd){
    return "KJ021320".equals(pwd);
  }
}
//调用登陆验证的类
package cn.isto;
public class JMain {
  public JMain() {
  }
  public static void main(String[] args){
    System.out.println(new Jcrack().getLogin("Summer"));
  }
}[/font]
  很明显我们把上面2个类编译OK后 直接运行! 不用看控制台都会打印false
  然而我们再把上面kj021320.jar加载回来再运行 JMain类
  系统就会显示true 简单说因为 JVM把正常用户的Jcrack类抛弃了!而加载了我们自己修改的Jcrack类!
  JAVA应用就这样简单破解了!

页: [1]


Powered by Discuz! Archiver 5.5.0  © 2001-2006 Comsenz Inc.