[Java基础知识] [Java高级编程] [Java网络编程] [J2EE]
 [开发工具] [中间件] [Web开发] [J2ME] [JSP] [Web开发]
 [Java与数据库] [Java开源] [设计模式] [在线文档]
下载中心
[Java教程] [开发工具] [代码源码]
[Oracle数据库] [视频教程]

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

发布时间:2007-10-15 9:52:59     来源:赛迪网    作者:赛迪网

 

在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应用就这样简单破解了!

(责任编辑:龚勋)


发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
  相关文章
   
  • 上一个JAVA文章:

  •  
  • 下一个JAVA文章:
  •        
      网友评论
      精彩友情推荐  

  • 关于我们 | 版权申明 | 网站地图 | 广告指南 | 友情链接 | 联系我们
  • Copyright (C) 2003-2008 Javafan.net, All Rights Reserved 版权所有 Java爱好者 京ICP备05010995号