JAVA应用简单破解--类库提前加载

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