Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 921|回复: 0

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

[复制链接]

该用户从未签到

发表于 2011-9-14 20:16:03 | 显示全部楼层 |阅读模式
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应用就这样简单破解了!
回复

使用道具 举报

该用户从未签到

发表于 2011-9-24 10:14:52 | 显示全部楼层
谢谢楼主!!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2024-5-4 11:52 , Processed in 0.364697 second(s), 47 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表