数据解析方法以及装置、存储介质、电子装置与流程

文档序号:22737398发布日期:2020-10-31 09:17阅读:90来源:国知局
数据解析方法以及装置、存储介质、电子装置与流程

本申请涉及计算机软件领域,具体而言,涉及一种数据解析方法以及装置、存储介质、电子装置。



背景技术:

在以太坊区块链的交易中,可以在输入字段存入具有意义的字符串信息,用于表达交易内容或者其他信息。

如果含有用solidity语言编写的智能合约的交易,由于输入字段保存了完整的编译后的智能合约字节码,无法将其中具有意义的字符串信息提取出来。

针对相关技术中对于太坊字节码中包含的字节码时,解析过程复杂、灵活性较低的问题,目前尚未提出有效的解决方案。



技术实现要素:

本申请的主要目的在于提供一种数据解析方法以及装置、存储介质、电子装置,以解决对于太坊字节码中包含的字节码时,解析过程复杂、灵活性较低的问题。

为了实现上述目的,根据本申请的一个方面,提供了一种数据解析方法。

根据本申请的数据解析方法包括:输入第一编码,其中,所述第一编码包括以太坊智能合约的字节码;根据所述以太坊智能合约的字节码确定第二编码,其中,所述第二编码包括对所述字节码的操作码;根据所述操作码的参数表确定所述操作码中的参数信息,其中,所述参数信息包括所述操作码的字面值字符串;通过将所述字面值字符串转义得到所述智能合约中携带的目标字符串的解析结果。

可选地,所述根据所述智能合约的字节码确定第二编码,其中,所述第二编码包括对所述字节码的操作码,包括:根据所述智能合约的字节码所述字节码的操作码以及操作码列表,其中,所述操作码列表包括:内存操作码和硬盘操作码;遍历所述操作码列表确定所述内存操作码和所述硬盘操作码;根据所述内存操作码得到所述操作码的value以及key值;根据所述硬盘操作码得到所述操作码的offset以及key值。

可选地,所述通过将所述字面值字符串转义得到所述智能合约中携带的目标字符串的解析结果包括:在判断所述智能合约中携带的目标字符串中的中文字符数量大于第一阈值的情况下,匹配得到可读的字符串解析结果;和/或,在判断所述智能合约中携带的目标字符串中的非中文字符数量大于第二阈值的情况下,匹配得到可读的字符串解析结果。

可选地,所述通过将所述字面值字符串转义得到所述智能合约中携带的目标字符串的解析结果包括:根据所述字面值字符串解析得到字面值列表;根据所述字面值列表按照可变长度字符编码后得到转义字符串列表;在所述转义字符串列表中得到所述智能合约中携带的目标字符串的解析结果。

可选地,所述根据所述操作码的参数表确定所述操作码中的参数信息,其中,所述参数信息包括所述操作码的字面值字符串,包括:根据所述操作码的参数表的value值列表,提取出所述操作码的字面值字符串。

可选地,所述输入第一编码之后,还包括:对所述第一编码进行反汇编。

为了实现上述目的,根据本申请的另一方面,提供了一种数据解析装置。

根据本申请的数据解析装置包括:输入模块,用于输入第一编码,其中,所述第一编码包括智能合约的字节码;第一确定模块,用于根据所述智能合约的字节码确定第二编码,其中所述第二编码包括对所述字节码的操作码;第二确定模块,用于根据所述操作码的参数表确定所述操作码中的参数信息,其中,所述参数信息包括:所述操作码的字面值字符串;输出模块,用于将所述字面值字符串转义得到所述智能合约中携带的目标字符串的解析结果。

可选地,所述第一确定模块,还用于根据所述智能合约的字节码所述字节码的操作码以及操作码列表,其中,所述操作码列表包括:内存操作码和硬盘操作码;遍历所述操作码列表确定所述内存操作码和所述硬盘操作码;根据所述内存操作码得到所述操作码的value以及key值;根据所述硬盘操作码得到所述操作码的offset以及key值。

在本申请实施例中,采用输入第一编码并根据所述以太坊智能合约的字节码确定第二编码的方式,通过所述操作码的参数表确定所述操作码中的参数信息,达到了通过将所述字面值字符串转义得到所述智能合约中携带的目标字符串的解析结果的目的,从而实现了提高数据解析灵活性的技术效果,进而解决了对于太坊字节码中包含的字节码时,解析过程复杂、灵活性较低的技术问题。

附图说明

构成本申请的一部分的附图用来提供对本申请的进一步理解,使得本申请的其它特征、目的和优点变得更明显。本申请的示意性实施例附图及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1是根据本申请实施例的数据解析方法流程示意图;

图2是根据本申请实施例的数据解析装置结构示意图;

图3是根据本申请实施例的数据解析方法流程示意图。

具体实施方式

为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。

需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。

本申请针对提取二进制字节码中存在的字符串等数据,健壮性好且效率高。此外,由于只针对二进制字节码中的数据不反编译函数结构等部分,因此不需要引入abi以及函数字典等外部数据,灵活性高。

如图1所示,该方法包括如下的步骤s101至步骤s104:

步骤s101,输入第一编码,其中,所述第一编码包括以太坊智能合约的字节码;

步骤s102,根据所述以太坊智能合约的字节码确定第二编码,其中,所述第二编码包括对所述字节码的操作码;

步骤s103,根据所述操作码的参数表确定所述操作码中的参数信息,其中,所述参数信息包括所述操作码的字面值字符串;

步骤s104,通过将所述字面值字符串转义得到所述智能合约中携带的目标字符串的解析结果。

从以上的描述中,可以看出,本申请实现了如下技术效果:

采用输入第一编码并根据所述以太坊智能合约的字节码确定第二编码的方式,通过所述操作码的参数表确定所述操作码中的参数信息,达到了通过将所述字面值字符串转义得到所述智能合约中携带的目标字符串的解析结果的目的,从而实现了提高数据解析灵活性的技术效果,进而解决了对于太坊字节码中包含的字节码时,解析过程复杂、灵活性较低的技术问题。

在上述步骤s101中通过输入以太坊智能合约的字节码作为第一编码。

在上述步骤s102中根据所述以太坊智能合约的字节码确定出第二编码,在所述第二编码中包括了对所述字节码的操作码。比如,可以对对字节码进行反汇编操作,得出相应的操作码及其参数列表。

在上述步骤s103中根据得到的所述操作码的参数表提取出所述操作码中的参数信息,比如,参数信息中包括了操作码的字面值字符串。

在上述步骤s104中根据提取得到的所述字面值字符串进行转义后得到所述智能合约中携带的目标字符串的解析结果,即得到二进制字节码中可读字符串。

作为本申请可选的实施例,所述根据所述智能合约的字节码确定第二编码,其中,所述第二编码包括对所述字节码的操作码,包括:根据所述智能合约的字节码所述字节码的操作码以及操作码列表,其中,所述操作码列表包括:内存操作码和硬盘操作码;遍历所述操作码列表确定所述内存操作码和所述硬盘操作码;根据所述内存操作码得到所述操作码的value以及key值;根据所述硬盘操作码得到所述操作码的offset以及key值。

具体实施时,遍历操作码列表,查找其中的mload,mstore,sload,sstore操作码,根据其加载的参数进行解析,获取相应的offset、value或key的值。

比如,sload操作,堆栈输入key、堆栈输出value,其中,value=storage[key],从内存中读取。

sstore操作,堆栈输入key和value,堆栈输出无,其中,storage[key]=value,在内存中写入。

mload操作,堆栈输入offset、堆栈输出value,其中,value=memory[offset:offset+32],从内存中读取。

mstore操作,堆栈输入offset和value、堆栈输出无,其中,memory[offset:offset+32]=value,在内存中写入。

作为本申请可选的实施例,所述通过将所述字面值字符串转义得到所述智能合约中携带的目标字符串的解析结果包括:在判断所述智能合约中携带的目标字符串中的中文字符数量大于第一阈值的情况下,匹配得到可读的字符串解析结果;和/或,在判断所述智能合约中携带的目标字符串中的非中文字符数量大于第二阈值的情况下,匹配得到可读的字符串解析结果。

具体实施时,在判断所述智能合约中携带的目标字符串中的中文字符数量大于第一阈值的情况下,匹配出可读的字符串解析结果。还可以包括在判断所述智能合约中携带的目标字符串中的非中文字符数量大于第二阈值的情况下匹配出可读的字符串解析结果。比如,当中文字符数量>k1,或者其他(英文、日文、韩文等)字符数量>k2,其中k1、k2本领域技术人员可以根据实际使用场景进行选择。

作为本申请可选的实施例,所述通过将所述字面值字符串转义得到所述智能合约中携带的目标字符串的解析结果包括:根据所述字面值字符串解析得到字面值列表;根据所述字面值列表按照可变长度字符编码后得到转义字符串列表;在所述转义字符串列表中得到所述智能合约中携带的目标字符串的解析结果。

具体实施时,根据所述字面值字符串解析得到字面值列表,然后,根据所述字面值列表按照可变长度字符编码后得到转义字符串列表;最后在所述转义字符串列表中得到所述智能合约中携带的目标字符串的解析结果。

作为本申请可选的实施例,所述根据所述操作码的参数表确定所述操作码中的参数信息,其中,所述参数信息包括所述操作码的字面值字符串,包括:根据所述操作码的参数表的value值列表,提取出所述操作码的字面值字符串。

具体实施时,从value值列表中,提取出所有的字面值字符串,并尝试使用utf8对所有的字面值字节串进行转义,如果转义成功,将得到可读的字符串,如果失败,则跳过。

作为本申请可选的实施例,所述输入第一编码之后,还包括:对所述第一编码进行反汇编。

具体实施时,输入智能合约的字节码bytecode,对字节码bytecode进行反汇编操作,得出相应的操作码opcode及其参数列表。

需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

根据本申请实施例,还提供了一种用于实施上述方法的数据解析装置,如图2所示,该装置包括:

输入模块20,用于输入第一编码,其中,所述第一编码包括智能合约的字节码;

第一确定模块21,用于根据所述智能合约的字节码确定第二编码,其中所述第二编码包括对所述字节码的操作码;

第二确定模块22,用于根据所述操作码的参数表确定所述操作码中的参数信息,其中,所述参数信息包括:所述操作码的字面值字符串;

输出模块23,用于将所述字面值字符串转义得到所述智能合约中携带的目标字符串的解析结果。

在所述输入模块20中通过输入以太坊智能合约的字节码作为第一编码。

在所述第一确定模块21中根据所述以太坊智能合约的字节码确定出第二编码,在所述第二编码中包括了对所述字节码的操作码。比如,可以对对字节码进行反汇编操作,得出相应的操作码及其参数列表。

在所述第二确定模块22中根据得到的所述操作码的参数表提取出所述操作码中的参数信息,比如,参数信息中包括了操作码的字面值字符串。

在所述输出模块23中根据提取得到的所述字面值字符串进行转义后得到所述智能合约中携带的目标字符串的解析结果,即得到二进制字节码中可读字符串。

作为本实施例中的优选,所述第一确定模块21,还用于根据所述智能合约的字节码所述字节码的操作码以及操作码列表,其中,所述操作码列表包括:内存操作码和硬盘操作码;遍历所述操作码列表确定所述内存操作码和所述硬盘操作码;根据所述内存操作码得到所述操作码的value以及key值;根据所述硬盘操作码得到所述操作码的offset以及key值。

具体实施时,遍历操作码列表,查找其中的mload,mstore,sload,sstore操作码,根据其加载的参数进行解析,获取相应的offset、value或key的值。

比如,sload操作,堆栈输入key、堆栈输出value,其中,value=storage[key],从内存中读取。

sstore操作,堆栈输入key和value,堆栈输出无,其中,storage[key]=value,在内存中写入。

mload操作,堆栈输入offset、堆栈输出value,其中,value=memory[offset:offset+32],从内存中读取。

mstore操作,堆栈输入offset和value、堆栈输出无,其中,memory[offset:offset+32]=value,在内存中写入。

显然,本领域的技术人员应该明白,上述的本申请的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请不限制于任何特定的硬件和软件结合。

为了更好的理解上述数据接口的配置方法流程,以下结合优选实施例对上述技术方案进行解释说明,但不用于限定本发明实施例的技术方案。

如图3所示,是本申请数据解析方法的流程示意图,具体包括如下步骤:

步骤s301,二进制代码。

步骤s302,反汇编。

输入智能合约的字节码(bytecode),对字节码进行反汇编操作,得出相应的操作码(opcode)及其参数列表。

步骤s303,操作码和参数列表。

步骤s304,mload、mstore、sload、sstore操作码参数提取。

遍历操作码列表,查找其中的mload,mstore,sload,sstore操作码,根据其加载的参数进行解析,获取相应的offset、value或key的值。

步骤s305,参数信息。

步骤s306,字面值解析。

步骤s307,字面值列表。

步骤s308,utf8转义。

步骤s309,转义字符串列表。

从value值列表中,提取出所有的字面值字符串,尝试使用utf8对所有的字面值字节串进行转义。如果转义成功,将得到人类可读的字符串。如果失败,则跳过。

步骤s310,中文等字符阈值匹配。

根据下列规则对转义出的字符串进行可读性判断,满足其一即可

中文字符数量>k1;

其他(英文、日文、韩文等)字符数量>k2。

步骤s311,可读字符串列表。

输出智能合约中包含的满足规则的所有转义字符串得到可读字符串列表。

本发明的实施例还提供了一种存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。

可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的计算机程序:

s1,输入第一编码,其中,所述第一编码包括以太坊智能合约的字节码;

s2,根据所述以太坊智能合约的字节码确定第二编码,其中,所述第二编码包括对所述字节码的操作码;

s3,根据所述操作码的参数表确定所述操作码中的参数信息,其中,所述参数信息包括所述操作码的字面值字符串;

s4,通过将所述字面值字符串转义得到所述智能合约中携带的目标字符串的解析结果。

可选地,在本实施例中,上述存储介质可以包括但不限于:u盘、只读存储器(read-onlymemory,简称为rom)、随机存取存储器(randomaccessmemory,简称为ram)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。

本发明的实施例还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。

可选地,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。

可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:

s1,输入第一编码,其中,所述第一编码包括以太坊智能合约的字节码;

s2,根据所述以太坊智能合约的字节码确定第二编码,其中,所述第二编码包括对所述字节码的操作码;

s3,根据所述操作码的参数表确定所述操作码中的参数信息,其中,所述参数信息包括所述操作码的字面值字符串;

s4,通过将所述字面值字符串转义得到所述智能合约中携带的目标字符串的解析结果。

可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。

以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1