第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 智能合约获取方法 装置 电子设备及存储介质与流程

智能合约获取方法 装置 电子设备及存储介质与流程

时间:2022-12-09 15:01:36

相关推荐

智能合约获取方法 装置 电子设备及存储介质与流程

本申请涉及数字协议技术领域,具体而言,涉及一种智能合约获取方法、装置、电子设备及存储介质。

背景技术:

随着区块链等技术的迅速发展,各类网站,例如以太坊等上已经运行了数十万的智能合约。智能合约是一种特殊协议,旨在提供、验证及执行合约。具体来说,智能合约是区块链被称之为“去中心化的”重要原因,它允许我们在不需要第三方的情况下,执行可追溯、不可逆转和安全的交易。智能合约包含了有关交易的所有信息,只有在满足要求后才会执行结果操作。智能合约和传统纸质合约的区别在于智能合约是由计算机生成的。因此,代码本身解释了参与方的相关义务。

在进行智能合约使用时,了解其关键功能等有利于更好地利用智能合约。但大部分智能合约都未公开源码,在某些需求下可能需要我们对这类智能合约进行逆向,分析其中的功能和相关信息,现有技术通常通过手工逆向,依赖于逆向工程师的专业知识和经验,将字节码反汇编为合约汇编,再将合约汇编反编译为源码,获取智能合约的效率较低。

技术实现要素:

有鉴于此,本申请实施例的目的在于提供一种智能合约获取方法、装置、电子设备及存储介质,以改善现有技术中存在的获取智能合约的效率较低的问题。

本申请实施例提供了一种智能合约获取方法,所述方法包括:获取智能合约的字节码;以函数为单位将所述智能合约的字节码分割为多个字节码片段;基于每个字节码片段的对照值,在对比数据库中查询获得每个字节码片段对应的源码片段,所述对比数据库中存储有每个字节码片段和每个源码片段的对应关系;根据所述每个字节码片段对应的源码片段生成所述智能合约的源码。

在上述实现方式中,先对未公开源码的智能合约进行字节码分析,然后通过查询对比数据库,基于对比数据库中的字节码与源码的对应关系确定已获取字节码的对应源码,从而实现逆向获取智能合约源码,不需要通过专业人员通过人工方式对字节码进行汇编、反编译等繁琐步骤,从而提高了逆向获取智能合约源码的效率。

可选地,所述以函数为单位将所述智能合约的字节码分割为多个字节码片段,包括:基于函数界限特征和流程跳转特征,以函数为单位将所述智能合约的字节码分割为所述多个字节码片段。

在上述实现方式中,以函数界限或流程跳转进行以函数为单位的字节码分割,能够将智能合约的字节码准确划分为多个字节码片段,符合从智能合约发布平台获取的开源智能合约源码的特征。

可选地,所述方法还包括:获取一个或多个开源智能合约的源码和字节码;通过正则表达式,以函数为单位将所述开源智能合约的源码分割为多个源码片段;基于函数界限特征和流程跳转特征,以函数为单位将所述开源智能合约的字节码分割为多个字节码片段;确定所述开源智能合约的每个字节码片段的对照值;基于所述开源智能合约的每个字节码片段的对照值与所述开源智能合约的每个源码片段的一一对应关系创建所述对比数据库。

在上述实现方式中,以函数为单位基于开源智能合约的字节码和源码进行对比数据库的建立,在对比数据库中所有开源智能合约的字节码和源码一一对应,以提高通过对比数据库进行智能合约源码获取的效率。

可选地,所述获取一个或多个开源智能合约的源码和字节码,包括:基于每个开源智能合约中的地址,分别创建字节码文件夹和源码文件夹,每个开源智能合约对应一个字节码文件夹和一个源码文件夹;将所述每个开源智能合约的字节码录入对应的字节码文件夹,将所述每个开源智能合约的源码录入对应的源码文件夹。

在上述实现方式中,基于每个开源智能合约中的地址将字节码和源码分别存入字节码文件夹和源码文件夹中,在进行字节码及源码获取时对应文件夹批量处理,进一步提高了智能合约获取效率。

可选地,所述对照值为哈希值,所述确定所述开源智能合约的每个字节码片段的对照值,包括:确定所述开源智能合约的每个字节码片段的哈希值。

在上述实现方式中,以哈希值作为对照值,通过哈希值进行相应源码的确定和获取,避免通过人工识别方式对字节码进行汇编和反编译来逆向获取开源智能合约的源码,从而提高了源码确定效率。

可选地,所述将所述开源智能合约的每个字节码片段的对照值与所述开源智能合约的每个源码片段一一对应关系创建所述对比数据库,包括:确定同一函数对应的所述开源智能合约的字节码片段和所述开源智能合约的源码片段之间的映射;基于所述映射,以所述开源智能合约的所述每个字节码片段的对照值为主键,以所述开源智能合约的所述每个源码片段为值,创建所述对比数据库。

在上述实现方式中,以开源智能合约的字节码片段的对照值为主键、源码片段位置,将其一一对应存储并创建对比数据库,从而实现了字节码片段和源码片段的一一对应。

本申请实施例还提供了一种智能合约获取装置,所述装置包括:获取模块,用于获取智能合约的字节码;分割模块,用于以函数为单位将所述智能合约的字节码分割为多个字节码片段;对照模块,用于基于每个字节码片段的对照值,在对比数据库中查询获得每个字节码片段对应的源码片段,所述对比数据库中存储有每个字节码片段和每个源码片段的对应关系;组装模块,用于根据所述每个字节码片段对应的源码片段生成所述智能合约的源码。

在上述实现方式中,先对未公开源码的智能合约进行字节码分析,然后通过查询对比数据库,基于对比数据库中的字节码与源码的对应关系确定已获取字节码的对应源码,从而实现逆向获取智能合约源码,不需要通过专业人员通过人工方式对字节码进行汇编、反编译等繁琐步骤,从而提高了逆向获取智能合约源码的效率。

可选地,所述分割模块具体用于:基于函数界限特征和流程跳转特征,以函数为单位将所述智能合约的字节码分割为所述多个字节码片段。

在上述实现方式中,以函数界限或流程跳转进行以函数为单位的字节码分割,能够将智能合约的字节码准确划分为多个字节码片段,符合从智能合约发布平台获取的开源智能合约源码的特征。

可选地,所述装置还包括数据库创建模块,所述获取模块还用于:获取一个或多个开源智能合约的源码和字节码;所述分割模块还用于:通过正则表达式,以函数为单位将所述开源智能合约的源码分割为多个源码片段;所述分割模块还用于:基于函数界限特征和流程跳转特征,以函数为单位将所述开源智能合约的字节码分割为多个字节码片段;所述对照模块还用于:确定所述开源智能合约的每个字节码片段的对照值;所述数据库创建模块用于:基于所述开源智能合约的每个字节码片段的对照值与所述开源智能合约的每个源码片段的一一对应关系创建所述对比数据库。

在上述实现方式中,以函数为单位基于开源智能合约的字节码和源码进行对比数据库的建立,在对比数据库中所有开源智能合约的字节码和源码一一对应,以提高通过对比数据库进行智能合约源码获取的效率。

可选地,所述获取模块具体还用于:基于每个开源智能合约中的地址,分别创建字节码文件夹和源码文件夹,每个开源智能合约对应一个字节码文件夹和一个源码文件夹;将所述每个开源智能合约的字节码录入对应的字节码文件夹,将所述每个开源智能合约的源码录入对应的源码文件夹。

在上述实现方式中,基于每个开源智能合约中的地址将字节码和源码分别存入字节码文件夹和源码文件夹中,在进行字节码及源码获取时对应文件夹批量处理,进一步提高了智能合约获取效率。

可选地,所述对照值为哈希值,所述对照模块具体还用于:确定所述开源智能合约的每个字节码片段的哈希值。

在上述实现方式中,以哈希值作为对照值,通过哈希值进行相应源码的确定和获取,避免通过人工识别方式对字节码进行汇编和反编译来逆向获取开源智能合约的源码,从而提高了源码确定效率。

可选地,所述对比数据库创建模块具体用于:确定同一函数对应的所述开源智能合约的字节码片段和所述开源智能合约的源码片段之间的映射;基于所述映射,以所述开源智能合约的所述每个字节码片段的对照值为主键,以所述开源智能合约的所述每个源码片段为值,创建所述对比数据库。

在上述实现方式中,以开源智能合约的字节码片段的对照值为主键、源码片段位置,将其一一对应存储并创建对比数据库,从而实现了字节码片段和源码片段的一一对应。

本申请实施例还提供了一种电子设备,所述电子设备包括存储器和处理器,所述存储器中存储有程序指令,所述处理器读取并运行所述程序指令时,执行上述任一实现方式中的步骤。

本申请实施例还提供了一种可读取存储介质,所述可读取存储介质中存储有计算机程序指令,所述计算机程序指令被一处理器读取并运行时,执行上述任一实现方式中的步骤。

附图说明

为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本申请实施例提供的一种智能合约获取方法的流程示意图;

图2为本申请实施例提供的一种对比数据库创建步骤的流程示意图;

图3为本实施例提供的一种公共智能合约发布平台发布的智能合约信息的示意图;

图4为本申请实施例提供的一种字节码分割步骤的示意图;

图5为本申请实施例提供的一种智能合约获取装置的模块示意图。

图标:30-智能合约获取装置;31-获取模块;32-分割模块;33-对照模块;34-组装模块。

具体实施方式

下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行描述。

经本申请人研究发现,现有的对未开源的智能合约进行逆向获取源码的方式一般是通过人工逆向,依赖于逆向工程师的专业知识和经验,将字节码反汇编为合约汇编,再将合约汇编反编译为源码。由于依赖于人工方式,所以对逆向工程师要求很高,同时逆向一份智能合约,也需要花费大量的精力和时间,效率较低。

为了解决上述问题,本申请实施例提供了一种智能合约获取方法,利用已公开的智能合约的源码和字节码,对未公开的智能合约进行逆向还原。请参考图1,图1为本申请实施例提供的一种智能合约获取方法的流程示意图。该智能合约获取方法的具体步骤可以如下:

步骤s11:获取智能合约的字节码。

应当理解的是,本实施例通过solidity语言为例,在其他示例中,还可以是lll、serpent等编程语言。

字节码(byte-code)是一种包含执行程序、由一序列op代码或数据对组成的二进制文件。字节码是一种中间码,它比机器码更抽象,经常被看作是包含一个执行程序的二进制文件,更像一个对象模型。字节码被这样叫是因为通常每个字节码是一字节长,但是指令码的长度是变化的。

可选地,智能合约的字节码可以通过相应的编译器获得,通常可以确定每个函数调用的具体字节码。

步骤s12:以函数为单位将智能合约的字节码分割为多个字节码片段。

具体地,本实施例可以以函数为单位,基于函数界限特征和流程跳转特征将智能合约的字节码分割为多个字节码片段。

字节码指令流是单字节对齐,它们的操作数比较特殊,以4字节为界限划分的,需要预留出相应的空位来实现对齐,因此可以根据字节码的函数界限特征进行函数划分。

字节码中流程跳转指令通常是从一个函数跳转到下一函数的分界,因此本实施例可以通过流程跳转特征实现字节码的分割,例如无条件跳转指令goto,goto_w、条件跳转指令ifeq,iflt,ifle,ifne,ifgt,ifge,ifnull,ifnonnull等。

步骤s13:基于每个字节码片段的对照值,在对比数据库中查询获得每个字节码片段对应的源码片段。

上述对比数据库中存储有每个字节码片段和每个源码片段的对应关系,能够通过字段匹配或其他匹配机制实现字节码片段的对应源码片段的查询功能。

应当理解的是,本实施例中的对照值可以是哈希值,也可以是指定字符串或其他能够与字节码片段一一对应的标识码。

步骤s14:根据每个字节码片段对应的源码片段生成智能合约的源码。

将基于字节码获得的所有源码片段进行组合,就能够获得该未开源智能合约的完整源码。

在上述步骤s11-s14中,先对未公开源码的智能合约进行字节码分析,获得拆分后的以单个函数为单位的字节码片段,然后通过查询对比数据库,基于对比数据库中的字节码片段与源码片段的对应关系确定已获取字节码的对应源码,从而实现逆向获取未公开智能合约的完整源码,不需要通过专业人员通过人工方式对字节码进行汇编、反编译等繁琐步骤,从而提高了逆向获取智能合约源码的效率。

作为一种可选地实施方式,针对对比数据库,在执行步骤s13进行字节码片段和源码片段的对照查询之前,应当创建对比数据库。请参考图2,图2为本申请实施例提供的一种对比数据库创建步骤的流程示意图。该对比数据库创建步骤的具体子步骤可以如下:

步骤s21:获取一个或多个开源智能合约的源码和字节码。

可选地,本实施例中开源智能合约的源码和字节码可以是通过公共智能合约发布平台获取,例如以太坊等。请参考图3,图3为本实施例提供的一种公共智能合约发布平台发布的智能合约信息的示意图。其中,“functiondiv(uint256a,uint256b)”至“returnc;”部分为智能合约的源码,“contractcreationcode”后续部分为智能合约的字节码。

具体地,可以基于每个开源智能合约中的地址,分别创建字节码文件夹和源码文件夹,每个开源智能合约对应一个字节码文件夹和一个源码文件夹;将每个开源智能合约的字节码录入对应的字节码文件夹,将每个开源智能合约的源码录入对应的源码文件夹。

例如某一智能合约的地址为0x00a0b00aebeb2f3be5aa5dcb6301b61ab4001e42,则该地址下的字节码文件夹可以为0x00a0b00aebeb2f3be5aa5bc6301b61ab4001e42.byte,源码文件夹可以为0x00a0b00aebeb2f3be5aa5bc6301b61ab4001e42.sol。

步骤s22:通过正则表达式,以函数为单位将开源智能合约的源码分割为多个源码片段。

本实施例可以将每个源码文件夹看作一个整体进行处理,从而提高源码的分割效率。

请参看如下函数:

上述源码可以通过正则表达式分割为两个函数,即:

functiontest()public{

c=100;

}

以及

functionadd()public{

c=a+b;

}

步骤s23:基于函数界限特征和流程跳转特征,以函数为单位将开源智能合约的字节码分割为多个字节码片段。

本实施例可以将每个字节码文件夹看作一个整体进行处理,从而提高字节码的分割效率。

具体地,请参考图4,图4为本申请实施例提供的一种字节码分割步骤的示意图,其中,左侧的“6080604052348015600f5760080……c634300050b0032”为未分割前的字节码文件,右侧的“5b603d604756……5b00”和“5b6045605656……5b00”为分割后获得的两个以函数为单位的字节码。

步骤s24:确定开源智能合约的每个字节码片段的对照值。

本实施例以哈希值作为对照值,需要对每个字节码片段执行哈希加密算法,从而获得对应的哈希值。可选地,该哈希加密算法可以是md5、sha-1、sha-2、sha-3、sha-256等。

在基于sha-3哈希加密算法进行字节码片段加密时,“5b603d604756……5b00”和“5b6045605656……5b00”的哈希值分别可以为“76273e86f80a83733b244cd46da140ca”和“8add1e3bfa3153f39d81b50b40d0af98”。

在上述步骤中,以哈希值作为对照值,通过哈希值进行相应源码的确定和获取,避免通过人工识别方式对字节码进行汇编和反编译来逆向获取开源智能合约的源码,从而提高了源码确定效率。

步骤s25:基于开源智能合约的每个字节码片段的对照值与开源智能合约的每个源码片段的一一对应关系创建对比数据库。

具体地,步骤s25可以包括如下子步骤:确定同一函数对应的开源智能合约的字节码片段和开源智能合约的源码片段之间的映射;基于映射,以开源智能合约的每个字节码片段的对照值为主键,以开源智能合约的每个源码片段为值,创建对比数据库。

可选地,对比数据库可以是mysql、oracle或其他类型的数据库,可以通过表格等方式对字节码片段、源码片段及其对应关系进行存储。

请参考表1,表1为本申请实施例提供的一种对比数据库的示意表格。

表1

在上述实现方式中,以开源智能合约的字节码片段的对照值为主键、源码片段位置,将其一一对应存储并创建对比数据库,从而实现了字节码片段和源码片段的一一对应,提高了源码和字节码的对应查询效率。

为了更好地执行本实施例提供的智能合约获取方法,本申请实施例还提供了一种智能合约获取装置30。请参考图5,图5为本申请实施例提供的一种智能合约获取装置的模块示意图。

智能合约获取装置30包括:

获取模块31,用于获取智能合约的字节码;

分割模块32,用于以函数为单位将智能合约的字节码分割为多个字节码片段;

对照模块33,用于基于每个字节码片段的对照值,在对比数据库中查询获得每个字节码片段对应的源码片段,对比数据库中存储有每个字节码片段和每个源码片段的对应关系;

组装模块34,用于根据每个字节码片段对应的源码片段生成智能合约的源码。

可选地,分割模块32具体用于:基于函数界限特征和流程跳转特征,以函数为单位将智能合约的字节码分割为多个字节码片段。

可选地,智能合约获取装置30还包括数据库创建模块,则获取模块31还用于获取一个或多个开源智能合约的源码和字节码;分割模块32还用于通过正则表达式,以函数为单位将开源智能合约的源码分割为多个源码片段;分割模块32还用于基于函数界限特征和流程跳转特征,以函数为单位将开源智能合约的字节码分割为多个字节码片段;对照模块33还用于确定开源智能合约的每个字节码片段的对照值;数据库创建模块用于基于开源智能合约的每个字节码片段的对照值与开源智能合约的每个源码片段的一一对应关系创建对比数据库。

可选地,获取模块31具体用于基于每个开源智能合约中的地址,分别创建字节码文件夹和源码文件夹,每个开源智能合约对应一个字节码文件夹和一个源码文件夹;将每个开源智能合约的字节码录入对应的字节码文件夹,将每个开源智能合约的源码录入对应的源码文件夹。

可选地,对照模块33具体还用于:确定开源智能合约的每个字节码片段的哈希值。

可选地,对比数据库创建模块具体用于:确定同一函数对应的开源智能合约的字节码片段和开源智能合约的源码片段之间的映射;基于映射,以开源智能合约的每个字节码片段的对照值为主键,以开源智能合约的每个源码片段为值,创建对比数据库。

本申请实施例还提供了一种电子设备,该电子设备包括存储器和处理器,所述存储器中存储有程序指令,所述处理器读取并运行所述程序指令时,执行本实施例提供的智能合约获取方法中任一项所述方法中的步骤。

应当理解是,该电子设备可以是个人电脑(personalcomputer,pc)、平板电脑、智能手机、个人数字助理(personaldigitalassistant,pda)等具有逻辑计算功能的电子设备。

本申请实施例还提供了一种可读取存储介质,所述可读取存储介质中存储有计算机程序指令,所述计算机程序指令被一处理器读取并运行时,执行智能合约获取方法中的步骤。

综上所述,本申请实施例提供了一种智能合约获取方法、装置、电子设备及存储介质,所述方法包括:获取智能合约的字节码;以函数为单位将智能合约的字节码分割为多个字节码片段;基于每个字节码片段的对照值,在对比数据库中查询获得每个字节码片段对应的源码片段,对比数据库中存储有每个字节码片段和每个源码片段的对应关系;根据每个字节码片段对应的源码片段生成智能合约的源码。

在上述实现方式中,先对未公开源码的智能合约进行字节码分析,然后通过查询对比数据库,基于对比数据库中的字节码与源码的对应关系确定已获取字节码的对应源码,从而实现逆向获取智能合约源码,不需要通过专业人员通过人工方式对字节码进行汇编、反编译等繁琐步骤,从而提高了逆向获取智能合约源码的效率。

在本申请所提供的几个实施例中,应该理解到,所揭露的设备,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的框图显示了根据本申请的多个实施例的设备的可能实现的体系架构、功能和操作。在这点上,框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图中的每个方框、以及框图的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。因此本实施例还提供了一种可读取存储介质中存储有计算机程序指令,所述计算机程序指令被一处理器读取并运行时,执行区块数据存储方法中任一项所述方法中的步骤。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

技术特征:

1.一种智能合约获取方法,其特征在于,所述方法包括:

获取智能合约的字节码;

以函数为单位将所述智能合约的字节码分割为多个字节码片段;

基于每个字节码片段的对照值,在对比数据库中查询获得每个字节码片段对应的源码片段,所述对比数据库中存储有每个字节码片段和每个源码片段的对应关系;

根据所述每个字节码片段对应的源码片段生成所述智能合约的源码。

2.根据权利要求1所述的方法,其特征在于,所述以函数为单位将所述智能合约的字节码分割为多个字节码片段,包括:

基于函数界限特征和流程跳转特征,以函数为单位将所述智能合约的字节码分割为所述多个字节码片段。

3.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:

获取一个或多个开源智能合约的源码和字节码;

通过正则表达式,以函数为单位将所述开源智能合约的源码分割为多个源码片段;

基于函数界限特征和流程跳转特征,以函数为单位将所述开源智能合约的字节码分割为多个字节码片段;

确定所述开源智能合约的每个字节码片段的对照值;

基于所述开源智能合约的每个字节码片段的对照值与所述开源智能合约的每个源码片段的一一对应关系创建所述对比数据库。

4.根据权利要求3所述的方法,其特征在于,所述获取一个或多个开源智能合约的源码和字节码,包括:

基于每个开源智能合约中的地址,分别创建字节码文件夹和源码文件夹,每个开源智能合约对应一个字节码文件夹和一个源码文件夹;

将所述每个开源智能合约的字节码录入对应的字节码文件夹,将所述每个开源智能合约的源码录入对应的源码文件夹。

5.根据权利要求3所述的方法,其特征在于,所述对照值为哈希值,所述确定所述开源智能合约的每个字节码片段的对照值,包括:

确定所述开源智能合约的每个字节码片段的哈希值。

6.根据权利要求3所述的方法,其特征在于,所述将所述开源智能合约的每个字节码片段的对照值与所述开源智能合约的每个源码片段一一对应关系创建所述对比数据库,包括:

确定同一函数对应的所述开源智能合约的字节码片段和所述开源智能合约的源码片段之间的映射;

基于所述映射,以所述开源智能合约的所述每个字节码片段的对照值为主键,以所述开源智能合约的所述每个源码片段为值,创建所述对比数据库。

7.一种智能合约获取装置,其特征在于,所述装置包括:

获取模块,用于获取智能合约的字节码;

分割模块,用于以函数为单位将所述智能合约的字节码分割为多个字节码片段;

对照模块,用于基于每个字节码片段的对照值,在对比数据库中查询获得每个字节码片段对应的源码片段,所述对比数据库中存储有每个字节码片段和每个源码片段的对应关系;

组装模块,用于根据所述每个字节码片段对应的源码片段生成所述智能合约的源码。

8.根据权利要求7所述的装置,其特征在于,所述装置还包括数据库创建模块;

所述获取模块,还用于获取一个或多个开源智能合约的源码和字节码;

所述分割模块,还用于通过正则表达式,以函数为单位将所述开源智能合约的源码分割为多个源码片段;

所述分割模块,还用于基于函数界限特征和流程跳转特征,以函数为单位将所述开源智能合约的字节码分割为多个字节码片段;

所述对照模块,还用于确定所述开源智能合约的每个字节码片段的对照值;

数据库创建模块,用于基于所述开源智能合约的每个字节码片段的对照值与所述开源智能合约的每个源码片段的一一对应关系创建所述对比数据库。

9.一种电子设备,其特征在于,所述电子设备包括存储器和处理器,所述存储器中存储有程序指令,所述处理器读取并运行所述程序指令时,执行权利要求1-6任一项所述方法中的步骤。

10.一种存储介质,其特征在于,所述存储介质中存储有计算机程序指令,所述计算机程序指令被一处理器运行时,执行权利要求1-6任一项所述方法中的步骤。

技术总结

本申请提供一种智能合约获取方法、装置、电子设备及存储介质,涉及数字协议技术领域。所述方法包括:获取智能合约的字节码;以函数为单位将所述智能合约的字节码分割为多个字节码片段;基于每个字节码片段的对照值,在对比数据库中查询获得每个字节码片段对应的源码片段,所述对比数据库中存储有每个字节码片段和每个源码片段的对应关系;根据所述每个字节码片段对应的源码片段生成所述智能合约的源码。所述方法先确定智能合约的字节码,然后通过已知的字节码和源码的对应关系确定未公开源码的智能合约的源码,避免手工逆向获取智能合约源码的繁琐,提高了智能合约逆向获取的效率。

技术研发人员:刘兴文

受保护的技术使用者:北京知道创宇信息技术股份有限公司

技术研发日:.11.01

技术公布日:.02.21

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。