掌桥专利:专业的专利平台
掌桥专利
首页

一种高可用的智能合约字节码重写方法、介质及装置

文献发布时间:2023-06-19 18:37:28


一种高可用的智能合约字节码重写方法、介质及装置

技术领域

本发明涉及智能合约漏洞防治领域,特别涉及一种高可用智能合约字节码重写方法、介质及装置。

背景技术

智能合约(Smart Contract)是部署在区块链上的程序,通过一系列的规则决定交易如何发生,为自动化、分布式交易提供了可能。然而,由于智能合约携带金融属性,且具有部署后不可改变的特性,使其成为黑客攻击的目标。因此需要漏洞防治方法保证智能合约的安全性。

现有的漏洞防治方案有三种思路,即链下漏洞防治、链上漏洞防治与漏洞修复。链下漏洞防治采用符号执行、模糊测试与模式匹配等技术构建漏洞检测方法,旨在保证合约部署至区块链前的安全性;链上漏洞防治关注合约部署后的安全性,通过向智能合约或以太坊虚拟机(Ethereum Virtual Machine,EVM)嵌入特定漏洞检测程序,在检测到特定漏洞时回溯该交易,以此保证部署后的合约安全性;漏洞修复采用字节码重写技术(BytecodeRewriting)修复链上存在漏洞的智能合约。如SMARTSHIELD[ZHANG Y,MA S,LI J,etal.Smartshield:Automatic Smart Contract Protection Made Easy[C]//2020IEEE27th International Conference on Software Analysis,Evolution andReengineering(SANER).London:IEEE,2020:23-34]基于精确控制流图(Control-FlowGraph)构建字节码重写方法,重写包含漏洞的智能合约字节码以修复智能合约。然而,由于精确控制流图构建困难,因此该方法难以处理复杂合约。EVMPatch[RODLER M,LI W,KARAMEG O,et al.EVMPatch:Timely andAutomated Patching ofEthereum Smart Contracts[C]//30th USENIX Security Symposium(USENIX Security 21).2021:1289-1306.]基于蹦床(Trampoline)构建字节码重写方法,该方法不依赖于精确控制流图,因此能够处理复杂合约。然而,该方法未提供有效的内嵌数据处理机制,因而无法处理含有内嵌数据的智能合约,大大降低了可用性。

发明内容

本发明的目的在于克服现有技术的缺点与不足,提供一种支持内嵌数据处理、复杂合约处理的高可用智能合约字节码重写方法、介质及装置。

为实现上述目的,本发明的技术方案是:

第一方面,本发明提供一种高可用的智能合约字节码重写方法,包括:

对于被重写的智能合约字节码,采用基于内存拷贝指令的定位方法区分智能合约字节码的代码与内嵌数据部分,并反编译智能合约字节码代码部分,得到智能合约字节码的反编译结果;

根据智能合约字节码的反编译结果,采用基于蹦床机制的指令重写方法以完成字节码的重写。

进一步地,所述对于被重写的智能合约字节码,采用基于内存拷贝指令的定位方法区分智能合约字节码的代码与内嵌数据部分,并反编译智能合约字节码代码部分,得到智能合约字节码的反编译结果包括:

解析智能合约字节码,找到所有内存拷贝指令,并得到相应的参数区间,以此得到疑似内嵌数据区间P;

通过疑似内嵌数据区间序列P定位智能合约内嵌数据d;

通过内嵌数据区间d反编译智能合约字节码代码部分。

进一步地,所述解析智能合约字节码,找到所有内存拷贝指令,并得到相应的参数区间,以此得到疑似内嵌数据区间P包括:

假定不考虑内嵌数据的存在,强制将智能合约字节码反编译得到指令集I

遍历指令集I

进一步地,所述通过疑似内嵌数据区间序列P定位智能合约内嵌数据d包括:

首先,判断疑似内嵌数据P中第一个区间结尾P[0].end是否为字节码结尾,即isEnd(P[0].end);如果为否,则返回empty,否则继续;

接着,找到疑似区间序列P的尾部连续区间序列L;初始化当前连续区间π为P[0],初始化连续区间序列L为空;遍历疑似内嵌数据区间序列P,如果该区间与当前连续区间存在交集,即

最后,遍历逆序连续区间序列L;判断该区间前一条指令是否为终止指令,即isEndIns(getPreIns(L[i])),其中i∈{L·length,...,0};如果为是,则返回该区间L[i],此时该区间即为内嵌数据区间d;如无法找到为满足上述条件的区间,则返回empty。

进一步地,所述通过内嵌数据区间d反编译智能合约字节码代码部分包括:

取智能合约字节码的内嵌数据区间补集,即得到智能合约字节码代码的区间c;

依据字节码与机器码的对应关系,将智能合约字节码代码的区间c反编译。

进一步地,所述根据智能合约字节码的反编译结果,采用基于蹦床机制的指令重写方法以完成字节码的重写包括:

根据智能合约字节码的反编译结果,基于蹦床机制对智能合约字节码进行指令重写;

修正因指令重写而产生的内嵌数据偏移。

进一步地,所述根据智能合约字节码的反编译结果,基于蹦床机制对智能合约字节码进行指令重写包括:

拷贝与更改:重写点为P

替换:将重写后的基本块B′

新增:将B′

进一步地,所述修正因指令重写而产生的内嵌数据偏移包括:

遍历智能合约字节码代码部分,找出所有指向内嵌数据的内存拷贝指令的offset参数,得到offset序列I

遍历offset序列I

第二方面,本发明提供一种高可用智能合约字节码重写装置,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上任一所述方法的步骤。

第三方面,本发明一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如上任一所述方法的步骤。

本发明与现有技术相比,其有益效果在于:

(1)本发明基于内存拷贝指令定位智能合约字节码内嵌数据,能有效区分智能合约字节码代码与内嵌数据边界,从而使在指令重写步骤中能获得完整的智能合约字节码结构信息,进而提高智能合约字节码重写成功率。

(2)本发明基于蹦床机制对智能合约字节码进行指令重写,从而能在非侵入情况下重写智能合约字节码。同时由于不依赖于构建精确控制流图,因此能有效重写复杂智能合约字节码。

附图说明

图1是本发明实施例1提供的高可用智能合约字节码重写方法的架构示意图;

图2是由内存拷贝指令定位的疑似内嵌数据区间;

图3是基于蹦床机制的指令重写过程示意图;

图4为本发明实施例2提供的高可用智能合约字节码重写装置的组成示意图。

具体实施方式

下面结合附图和实施例对本发明的技术方案做进一步的说明。

实施例1:

参阅图1所示,本实施例提供的高可用智能合约字节码重写方法主要包括如下步骤:

S1、针对于被重写的智能合约字节码,采用基于内存拷贝指令的定位方法区分智能合约字节码的代码与内嵌数据部分,并反编译智能合约字节码代码部分,得到智能合约字节码的反编译结果。

在此步骤中,基于内存拷贝指令定位智能合约字节码内嵌数据,能有效区分智能合约字节码代码与内嵌数据边界,从而使在指令重写步骤中能获得完整的智能合约字节码结构信息,进而提高智能合约字节码重写成功率。

S2、根据智能合约字节码的反编译结果,采用基于蹦床机制的指令重写方法以完成字节码的重写。

在此步骤中,基于蹦床机制对智能合约字节码进行指令重写,从而能在非侵入情况下重写智能合约字节码。同时由于不依赖于构建精确控制流图,因此能有效重写复杂智能合约字节码。

在具体实施中,上述的步骤S1包括如下步骤:

S11、解析智能合约字节码,找到所有内存拷贝指令,并得到相应的参数区间,以此得到疑似内嵌数据区间P:

S111、假定不考虑内嵌数据的存在,强制将智能合约字节码反编译得到指令集I

例如,对于智能合约字节码片段0xF40051,其中0xF400属于代码部分,而0x51属于内嵌数据部分,因此应反编译为<,51>。然而,此时无法区分代码与内嵌数据部分,因此在此步骤的反编译结果为

S112、遍历指令集I

例如,假设此时指令集I

S12、通过疑似内嵌数据区间序列P定位智能合约内嵌数据d,过程如下:

S121、首先,判断疑似内嵌数据P中第一个区间结尾P[0].end是否为字节码结尾,即i肀End(肀[0].e肀肀)。如果为否,则返回empty,否则继续。

S122、接着,找到疑似区间序列P的尾部连续区间序列L。初始化当前连续区间π为P[0],初始化连续区间序列L为空。遍历疑似内嵌数据区间序列P。如果该区间与当前连续区间存在交集,即

例如,假设疑似区间序列为P=<0x40F,0x15>,<0x3E1,0x20>,<0x3DF,0x13>,<0x3CA,0x50>,<0x3C1,0x10>。此时,初始化连续区间π为<0x40F,0x15>。首先,连续区间π与<0x3E1,0x20>、<0x3DF,0x13>均无交集,因此连续区间π保持不变。接着,连续区间π与<0x3CA,0x50>存在交集,因此连续区间π更新为<0x3CA,0x5A>,并添加到连续区间序列L中。接下来,连续区间π与<0x3c1,0x10>也有交集,因此连续区间π更新为<0x3C1,0x43>,并添加到连续区间序列L中。最终得到连续区间序列L为<0x3CA,0x5A>,<0x3C1,0x43>。

S123、最后,遍历逆序连续区间序列L。判断该区间前一条指令是否为终止指令,即isEndIns(getPreIns(L[i])),其中i∈{L·length,...,0}。如果为是,则返回该区间L[i],此时该区间即为内嵌数据区间d。如无法找到为满足上述条件的区间,则返回empty。

S13、通过内嵌数据区间d反编译智能合约字节码代码部分:

S131、智能合约字节码的内嵌数据部分位于代码末尾,即智能合约结构为。因此取智能合约字节码的内嵌数据区间补集,即得到智能合约字节码代码的区间c。

例如,假设内嵌数据区间为<0x3CA,0x43>,则智能合约字节码总长度为0x424(其中0x424=0x3CA+0x43),则相应的智能合约字节码代码区间c为<0x0,0x3CA>。

S132、依据字节码与机器码的对应关系,将智能合约字节码代码的区间c反编译。

在具体实施中,上述的步骤S2采用基于蹦床机制的指令重写方法,以智能合约字节码漏洞修复为应用场景,如图3所示,包括如下步骤:

S21、根据智能合约字节码的反编译结果,基于蹦床机制对智能合约字节码进行指令重写:

S211、拷贝与更改:重写点为P

例如图3所示,在CALL指令位置存在未处理异常漏洞。CALL指令所在位置为重写点P

S212、替换:将重写后的基本块B′

例如图3所示,J

S213、新增:将B′

S22、修正因指令重写而产生的内嵌数据偏移:

S221、遍历智能合约字节码代码部分,找出所有指向内嵌数据的内存拷贝指令的offset参数,得到offset序列I

S222、遍历offset序列I

实施例2:

参阅图4所示,本实施例提供的高可用智能合约字节码重写装置包括处理器41、存储器42以及存储在该存储器42中并可在所述处理器41上运行的计算机程序43,例如高可用智能合约字节码重写程序。该处理器41执行所述计算机程序43时实现上述实施例1步骤,例如图1所示的步骤。

示例性的,所述计算机程序43可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器42中,并由所述处理器41执行,以完成本发明。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序43在所述高可用智能合约字节码重写装置中的执行过程。

所述高可用智能合约字节码重写装置可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述高可用智能合约字节码重写装置可包括,但不仅限于,处理器41、存储器42。本领域技术人员可以理解,图4仅仅是高可用智能合约字节码重写装置的示例,并不构成高可用智能合约字节码重写装置的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述高可用智能合约字节码重写装置还可以包括输入输出设备、网络接入设备、总线等。

所称处理器41可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(FieldProgrammable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

所述存储器42可以是所述高可用智能合约字节码重写装置的内部存储元,例如高可用智能合约字节码重写装置的硬盘或内存。所述存储器42也可以是所述高可用智能合约字节码重写装置的外部存储设备,例如所述高可用智能合约字节码重写装置上配备的插接式硬盘,智能存储卡(SmartMedia Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,所述存储器42还可以既包括所述高可用智能合约字节码重写装置的内部存储单元也包括外部存储设备。所述存储器42用于存储所述计算机程序以及所述高可用智能合约字节码重写装置所需的其他程序和数据。所述存储器42还可以用于暂时地存储已经输出或者将要输出的数据。

实施例3:

本实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现实施例1所述方法的步骤。

所示计算机可读介质可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理再以电子方式获得所述程序,然后将其存储在计算机存储器中。

上述实施例只是为了说明本发明的技术构思及特点,其目的是在于让本领域内的普通技术人员能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡是根据本发明内容的实质所做出的等效的变化或修饰,都应涵盖在本发明的保护范围内。

技术分类

06120115635909