2025-02-10

在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應用就這樣簡單破解瞭!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *