资讯详情

一种恢复Java序列化文件数据的方法与流程

本发明涉及信息安全技术,特别是一种恢复Java序列化文件数据的方法。

背景技术:

序列化文件的分析经常出现在数据分析和恢复领域。Java序列化是Java 它允许开发人员以流的形式存储一个或一系列基于类别的结构化数据。该机制极大地促进了开发人员对复杂数据结构的流式传输需求。

原有的Java序列化恢复方法有如下明显缺陷和不便:

1.序列化数据原数据结构丢失时,无法通过Java原来的反序列化机制将序列化数据恢复到原来的结构。

2.当无法了解原始数据结构时,通常可以手动分析,但当数据复杂时,手动分析更加困难和耗时。

3、可以通过编写指定结构的脚本来分析结构相同的数据,但该方法不能保证脚本的通用性。无法处理许多未知结构的序列化数据。

4.人工分析和脚本分析不能将任何序列化文件中的数据恢复为系统直接调用的结构化内存对象。

技术实现要素:

本发明为现有技术的缺陷提供了恢复Java序列化文件数据的方法可以有效地解决上述现有技术的问题。

一种恢复Java序列化文件数据的方法包括以下步骤:

S1.分析记录Java数据类型和结构在序列化文件数据中的标识符;

S2:定义存储和分析过程中生成的中间结构的数据类型名称、域名和值;

S三、根据规则对序列化文件中的节点进行分析,获得最上层的中间结果, 在分析过程中维护一个类定义ID列表;

S4:展开中间结果,利用中间结果android自带的json工具转换为json 字符串。

S5:内存数据恢复提取类结构并生成类模板;

S6:将完整的序列数据恢复到内存中。

作为首选,所述S1.用于识别其修改的数据类型的数据类型有10个,分别对应java8种基本数据类型,java类和数组;

具体含义为:0x42表示byte;0x43表示char;0x44表示double;0x46表示float;0x49表示int;0x50表示long;Ox4c表示对象;0x53表示short;0x5a 表示boolean;0x5b表示数组。

作为首选,所述S1.结构控制标识主要有以下几种:

0x71.标识类已被描述,参考描述列表的记录;

0x用于标识属性描述的开始;

0x73,用于标识对象描述的开始;

0x74用于识别结构String;

0x用于识别数组描述的开始;

0x77.用于识别下一个数据为块数据;

0x用于标识结构描述的结束;

0x70用于标识类是否超类。

作为首选,所述S2的详细步骤如下:

S设计分析算法,分析数据存储模式,获取数据结构;

分析结构存储方法:通过描述类结构S1.完成数据类型标识符、结构控制标识符、数据长度和数据四个部分byte流动,结构如下: 0x72、类名长度、类名、指纹和标识符、域数、域列表x78、引用标志;

数据含义与数据存储结构分析:数据与类结构描述的结束符是一系列数据描述的开始和结束byte串,结构为:数据类型描述符,数据;

S中间结构的定义;

中间结构需要存储类型描述编号、类型名称、类型名称、类型数据。

作为首选,所述S详细步骤如下:

S301:通过递归分析整个文件,分级构建中间结果,最终获得总中间结果;

S302:对于第一次完成描述的类结构,将转换后的中间结构存储在列表中,并从0开始编号。当遇到描述的标志0时x71时,根据表后的数字ID描述并加载检索类;

作为首选,所述S5的详细步骤如下:

S501:深度遍历中间结果生成的节点并进行分析;如果最外层节点是类描述,则执行S502;

S503:创建临时.java源文件;

S504:以类描述中的类名为原文件中的类名;

S505:读取获得中间结果的节点名称,获取节点名称;

S506:在获得的中间结果中读取节点存储的数据类型,动态建立变量;

S507:统计节点数量;

S508:根据数据类型和名称临时.Java文件写入域的信息;

S509:源文件写入get和set方法;

S5010:存储源文件为自身类名;

S5011:动态编译生成源文件.class文件。

作为首选,所述S6的详细步骤如下:

S601:对于已生成的模板数据,取最外层节点;

S60202:当需要直接恢复所有序列化数据时S603,只需恢复序列化数据中的部分数据并执行S604-S606;

S603:利用java自带序列化数据读取接口直接生成类对象并使用java 访问类别对象的访问方式,结束;

S604:反射生成对象;

S605:遍历生成的中间对象中的数据域;

S606:分析每个数据域的项目,反射调用参数set该方法赋值或调用类参数get方法获取参数值,结束。

本发明的优点是:

独立分析二进制储存形式Java序列化文件的数据存储结构和数据存储模式,定义了数据类型名称、域名等信息,称为中间数据结构。

在分析数据存储结构和模式的基础上,设计中间数据结构和算法转换序列数据,忽略数据类型,直接将数据转换为中间数据结构JSON格式。

将生成设计算法JSON数据结构转换为Java类,动态编译。

实现动态编译对象的生成和访问接口,并设计算法JSON在动态生成的内存对象中填充数据也可以结合Java原来的反序列化方法,将 Java直接将序列化数据转换为内存对象。

在不知道原始数据结构的情况下,可以使用任何标准Java对序列化文件进行分析JSON或XML跨平台通用数据格式。

对于Java平台本身正在将序列化文件分析成JSON或XML在此基础上,为目标平台生成原实体类,并以对象的形式调用分析数据。

Java平台分析时恢复的实体类可以动态编译成.class目标平台在后续数据处理中使用文件。

具体实施方法

为了使本发明的目的、技术方案和优点更加清晰,以下实施例将进一步详细说明本发明。

一种恢复Java序列化文件数据的方法包括以下步骤:

S1:分析并记录Java数据类型和结构在序列化文件数据中的标识符;

S2:定义存储和分析过程中生成的中间结构的数据类型名称、域名和值;

S三、根据规则对序列化文件中的节点进行分析,获得最上层的中间结果, 在分析过程中维护一个类定义ID列表;

S4:将中间结果转化为json格式;(此时数据已恢复,可使用)

S5:为内存数据恢复提取类结构并生成类模板;(下一步是实现android或java恢复数据在系统中的动态调用)。

S6:将完整的序列数据恢复到内存中。

详细描述上述关键步骤:

S1:分析记录Java数据类型和结构控制在序列化文件数据中的标识符;

用于识别其修改的数据类型的数据类型有十种,分别对应 java中的8个基本数据类型、java类和数组。

具体含义为:0x42表示byte;0x43表示char;0x44表示double;0x46表示float;0x49表示int;0x50表示long;Ox4c表示对象;0x53表示short;0x5a 表示boolean;0x5b表示数组。

结构控制标识主要有以下几种:

0x71.标识类已被描述,参考描述列表的记录;

0x用于标识属性描述的开始;

0x用于标识对象描述的开始;

0x74,用于标识该结构为String;

0x用于识别数组描述的开始;

0x77.用于识别下一个数据为块数据;

0x用于标识结构描述的结束;

0x70用于标识类是否超类。

S2:定义存储和分析过程中生成的中间结构的数据类型名称、域名和值;

S设计分析算法,分析数据存储模式,获取数据结构;

分析结构存储方式:

通过描述类结构S1中数据类型标识符、结构控制标识符、数据长度以及数据四部分来完成,该描述是一串byte流动结构如下:

0x72、类名长度、类名、指纹和标识符、域数、域列表(其结构为:数据类型标识、域名长度、域名)x78、引用标志(0x70/0x76)。

其中0x70表示无超类无引用,0x76说明接下来要描述父类。

分析数据含义和数据存储结构:

数据类结构描述的数据和结束符是一系列数据描述的开始和结束byte 串。结构如下:

数据类型描述符,数据;

当数据类型描述为0x71时,根据后两个字节存储的数据,直接从记录的类型描述列表中获取类型描述。

S202:定义中间结构;

中间结构需要存储类描述编号、类型名称、类型名称、类型数据;

Java该结构需要存储在序列化文件中的类、类域或数据对象中。

S3.根据递归深度遍历的规则,在分析过程中维护一个类别ID列表;

S301:以递归的方式分析整个文件分级构建中间结果,最终获得一个总的中间结果。

S302:对于首次完成描述的类结构,将该类转换得到的中间结构存放在列表中,从0开始编号。当遇到已描述标志0x71时,根据该表之后的数字ID检索类描述并加载。

S4:展开中间结果,将中间结果利用android自带的json工具转换为json 字符串。

S5:提取类的结构并生成类模版用于内存数据恢复(该步骤针对最外层节点为自定义类的,系统内置类或基本类型跳过);

S501:深度遍历中间结果生成的节点并解析;若最外层节点为类描述则执行S502;

S503:创建临时.java源文件;

S504:以类描述中类名为原文件中类名;

S505:读取已获取到的中间结果的节点名称获取节点名称;

S506:读取已获取到的中间结果中节点存放的数据类型,动态建立变量;

S507:统计节点数量;

S508:根据数据类型与名称向临时.Java文件写入域的信息;

S509:源文件中写入get和set方法;

S5010:存储源文件为其本身类名;

S5011:动态编译生成源文件为.class文件。

S6:恢复完整的序列化数据至内存中;

S601:针对已生成类模版的数据,取最外层节点;

S602:当需要直接恢复全部序列化数据时执行S603,当仅需要恢复序列化数据中的部分数据,执行S604-S606;

S603:利用java自带的序列化类数据读取接口直接生成类对象并使用java 对对象的访问方式对类对象进行访问,结束;

S604:利用反射生成类对象;

S605:遍历生成的中间对象中的数据域部分;

S606:解析每个数据域的项,反射调用参数的set方法为类参数赋值或调用get方法获取参数值,结束。

本领域的普通技术人员将会意识到,这里所述的实施例是为了帮助读者理解本发明的实施方法,应被理解为本发明的保护范围并不局限于这样的特别陈述和实施例。本领域的普通技术人员可以根据本发明公开的这些技术启示做出各种不脱离本发明实质的其它各种具体变形和组合,这些变形和组合仍然在本发明的保护范围内。

标签: s503热继电器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台