1. 程式人生 > >Java 反序列化時物件包名改變

Java 反序列化時物件包名改變

開發中經常會使用到ObjectInputStream進行物件的反序列化,這時如果物件的包名發生改變,程式就會報java.lang.ClassNotFoundException。在包名不能改變的情況下,我們只能在反序列化時把序列化前的物件強制轉換成當前專案下的物件。

這時我們可以自己實現一個ObjectInputStream,然後重寫resolveClass方法,具體程式碼如下

public class MyObjectInputStream extends ObjectInputStream {
    
    
	protected MyObjectInputStream() throws IOException, SecurityException {
		super();
	}

	public MyObjectInputStream(InputStream arg0) throws IOException {
		super(arg0);
	}

	protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException{
            String name = desc.getName();
            try {
            
                if(name.startsWith("com.aaa.Test"))
                    name = name.replace("com.aaa", "com.bbb");
            
                return Class.forName(name);
            
            } catch (ClassNotFoundException ex) {
                ex.printStackTrace();
            }
        
            return super.resolveClass(desc);
        }
}

另外在使用共享快取,如Redis時。多個專案使用一個快取,我們不能保證物件在每個專案中的包名都是一樣的。這時只能在需要的專案中這樣單獨處理

相關推薦

Java 序列物件改變

開發中經常會使用到ObjectInputStream進行物件的反序列化,這時如果物件的包名發生改變,程式就會報java.lang.ClassNotFoundException。在包名不能改變的情況下,我們只能在反序列化時把序列化前的物件強制轉換成當前專案下的物件。這時我們可以

java序列序列(5)------序列物件的建立方式

可以執行如下的程式碼進行測試:/** * * @author yujie.wang * */ public class CreateObjectTest { public static void main(String[] args) { // TODO Auto-generated met

Java IO詳解(六)------序列序列物件流)

1、什麼是序列化與反序列化? 序列化:指把堆記憶體中的 Java 物件資料,通過某種方式把物件儲存到磁碟檔案中或者傳遞給其他網路節點(在網路上傳輸)。這個過程稱為序列化。通俗來說就是將資料結構或物件轉換成二進位制串的過程   反序列化:把磁碟檔案中

java io詳解六:序列序列物件流)

1、什麼是序列化與反序列化?   序列化:指把堆記憶體中的 Java 物件資料,通過某種方式把物件儲存到磁碟檔案中或者傳遞給其他網路節點(在網路上傳輸)。這個過程稱為序列化。通俗來說就是將資料結構或物件轉換成二進位制串的過程   反序列化:把磁碟檔案中的物件資料或者把網路節點上的物件資料,恢

JDK序列修改類的全限定性

應用場景 Spring Security OAuth2有一個奇葩的設計,那就是它將與access_token相關的所有屬於都封裝到OAuth2AccessToken中,然後儲存時會直接將該物件序列化成

java序列漏洞的檢測

spa div ria comm span Coding python odin ima 1、首先下載常用的工具ysoserial 這邊提供下載地址:https://jitpack.io/com/github/frohoff/ysoserial/master-v0.0.5-

java序列漏洞原理研習

java程序 out import 修改 sed 判斷 pub 發現 commons 零、Java反序列化漏洞   java的安全問題首屈一指的就是反序列化漏洞,可以執行命令啊,甚至直接getshell,所以趁著這個假期好好研究一下java的反序列化漏洞。另外呢,組裏多位大

Java序列漏洞的挖掘、攻擊與防禦

body per 所有 http 操作 www except ride 方法 一、Java反序列化漏洞的挖掘 1、黑盒流量分析: 在Java反序列化傳送的包中,一般有兩種傳送方式,在TCP報文中,一般二進制流方式傳輸,在HTTP報文中,則大多以base64傳輸。因而在流量中

關於metaspolit中進行JAVA序列滲透RMI的原理分析

resp format shel git led 技術 文件 error: return 一、背景: 這裏需要對java反序列化有點了解,在這裏得推廣下自己的博客嘛,雖然寫的不好,廣告還是要做的。原諒我: 1、java反序列化漏洞原理研習 2、java反序列化漏洞的檢測 二

使用 JSON JavaScriptSerializer 進行序列序列出錯

ali rac service ons trac 字符 max sta spa 如題 報錯提示: 使用 JSON JavaScriptSerializer 進行序列化或反序列化時出錯。字符串的長度超過了為 maxJsonLength 屬性設置的值。","StackTra

java序列原理-Demo(一)

51cto n) www. fault clas ack 保存 發現 auto java反序列化原理-Demo(一) 0x00 什麽是java序列化和反序列? Java 序列化是指把 Java 對象轉換為字節序列的過程便於保存在內存、文件、數據庫中,ObjectOutput

java序列原理-Demo(二)

mage ins bytearray stream utc 繼承 etc input exceptio java反序列化原理-Demo(二) 0x00 測試代碼以及運行結果 測試代碼: package test; import java.io.ByteArrayInput

java序列 - Transformer類可以執行惡意代碼的原理

write bject calc == return cal leg invoke stack java反序列化 - Transformer類可以執行惡意代碼的原理 0x00 代碼 Transformer[] transformers = new Transformer[]

java序列 - transformedMap類可以執行惡意代碼的原理

clas invoke 序列化 pri [] nag roc map.entry 什麽 java反序列化 - transformedMap類可以執行惡意代碼的原理 0x00 代碼 Map map=new HashMap(); map.put("key","

第九屆極客大挑戰——怎麼又是江師傅的祕密(java序列

引言:因為太想加入三葉草了,所以極客大挑戰這段時間一直在努力的學習,原來還真沒想到能在比賽中拿到排行榜第一的成績,不過現在看來努力始終都是有回報的。但我依然還是比較菜啊-.-,最近卻有很多夥伴加我好友,一來就叫我大佬,讓我深感有愧-.-,既然都想看我wp,那我就挑幾道題寫寫好了,口拙詞劣還望見諒。

Fastjson 序列序列Map物件排序問題(字串轉map,map轉字串)

背景 記錄專案中遇到的 關於fastjson jsonobject轉string亂序,string轉jsonObject亂序問題的解決方案 fastJson issues 問題來源描述參見: https://github.com/alibaba/fastjson/issues/359

Java序列漏洞:在受限環境中從漏洞發現到獲取反向Shell

前言 Java反序列化漏洞可以說是Java安全的一塊心病,近年來更是在安全界“出盡風頭”。其實說到Java反序列化的問題,早在2015年年初的在AppSecCali大會上,兩名安全研究人員Chris Frohoff 和 Gabriel Lawrence發表了一篇題為《Marshallin

MVC JSON JavaScriptSerializer 進行序列序列出錯

MVC control中返回json格式資料一般都是如下格式 [HttpPost] public ActionResult CaseAudit(string name) { var data ="dasda";

Java序列漏洞分析

https://xz.aliyun.com/t/136  寫的挺詳細的,大致瞭解了,整個流程,有點事,之後在細跟 目錄 1. 背景 2. 認識java序列化與反序列化 3. 理解漏洞的產生 4. POC構造 5. 實際漏洞環境測試 6. 總結 背景   2015年11月

使用JSON JavaScriptSerializer 進行序列序列出錯。字串的長度超過了為 maxJsonLength屬性

“/”應用程式中的伺服器錯誤。 使用 JSON JavaScriptSerializer 進行序列化或反序列化時出錯。字串的長度超過了為 maxJsonLength 屬性設定的值。 說明: 執行當前 Web 請求期間,出現未經處理的異常。請檢查堆疊跟蹤資訊,以瞭解有關該錯