关于java反序列化的学习
0x01前言
因为前面学习了java的一些基础知识,java反序列化也算是搁置了很久的知识点,所以就来学习一下关于这个java反序列化的知识点
参考文章和视频:
Java反序列化漏洞专题-基础篇(21/09/05更新类加载部分)
0x02正文
什么是java反序列化
Java 序列化是指把 Java 对象转换为字节序列的过程便于保存在内存或文件中,实现跨平台通讯和持久化存储,而反序列化则指把字节序列恢复为 Java 对象的过程。(这个的话在之前学ctfshow里头的反序列化篇也有详细的介绍过)
为什么需要序列化
我们知道,当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本、图片、音频、视频等, 而这些数据都会以二进制序列的形式在网络上传送。那么当两个Java进程进行通信时,能否实现进程间的对象传送呢?答案是可以的。如何做到呢?这就需要Java序列化与反序列化了。发送方需要把这个Java对象转换为字节序列,然后在网络上传送;另一方面,接收方需要从字节序列中恢复出Java对象。
那么由此可以看出java序列化和反序列化的好处就是一是实现数据的存储二是实现数据的传输
序列化和反序列化的实现
ObjectOutputStream类的 writeObject() 方法可以实现序列化。
ObjectInputStream 类的 readObject() 方法用于反序列化。
只有实现了Serializable或者Externalizable接口的类的对象才能被序列化为字节序列。(不是则会抛出异常)
我们先来写个demo
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 root@wanth3f1ag!