当前位置: 首页 > 专利查询>暨南大学专利>正文

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

技术编号:36708980 阅读:24 留言:0更新日期:2023-03-01 09:34
本发明专利技术公开了一种高可用的智能合约字节码重写方法、介质及装置;该方法首先基于内存拷贝指令构建内嵌数据定位算法,解析并反编译智能合约字节码结构;接着基于蹦床机制对智能合约字节码进行重写并修正内嵌数据地址偏移;最终实现对智能合约字节码的重写;本发明专利技术提出的技术方案与现有的字节码重写方案,有着更高的可用性,能够提升智能合约字节码重写成功率,并能有效对复杂智能合约字节码进行重写。并能有效对复杂智能合约字节码进行重写。并能有效对复杂智能合约字节码进行重写。

【技术实现步骤摘要】
一种高可用的智能合约字节码重写方法、介质及装置


[0001]本专利技术涉及智能合约漏洞防治领域,特别涉及一种高可用智能合约字节码重写方法、介质及装置。

技术介绍

[0002]智能合约(Smart Contract)是部署在区块链上的程序,通过一系列的规则决定交易如何发生,为自动化、分布式交易提供了可能。然而,由于智能合约携带金融属性,且具有部署后不可改变的特性,使其成为黑客攻击的目标。因此需要漏洞防治方法保证智能合约的安全性。
[0003]现有的漏洞防治方案有三种思路,即链下漏洞防治、链上漏洞防治与漏洞修复。链下漏洞防治采用符号执行、模糊测试与模式匹配等技术构建漏洞检测方法,旨在保证合约部署至区块链前的安全性;链上漏洞防治关注合约部署后的安全性,通过向智能合约或以太坊虚拟机(Ethereum Virtual Machine,EVM)嵌入特定漏洞检测程序,在检测到特定漏洞时回溯该交易,以此保证部署后的合约安全性;漏洞修复采用字节码重写技术(Bytecode Rewriting)修复链上存在漏洞的智能合约。如SMARTSHIELD[ZHANG Y,MA S,LI J,et al.Smartshield:Automatic Smart Contract Protection Made Easy[C]//2020IEEE 27th International Conference on Software Analysis,Evolution and Reengineering(SANER).London:IEEE,2020:23

34]基于精确控制流图(Control

Flow Graph)构建字节码重写方法,重写包含漏洞的智能合约字节码以修复智能合约。然而,由于精确控制流图构建困难,因此该方法难以处理复杂合约。EVMPatch[RODLER M,LI W,KARAME G O,et al.EVMPatch:Timely andAutomated Patching ofEthereum Smart Contracts[C]//30th USENIX Security Symposium(USENIX Security 21).2021:1289

1306.]基于蹦床(Trampoline)构建字节码重写方法,该方法不依赖于精确控制流图,因此能够处理复杂合约。然而,该方法未提供有效的内嵌数据处理机制,因而无法处理含有内嵌数据的智能合约,大大降低了可用性。

技术实现思路

[0004]本专利技术的目的在于克服现有技术的缺点与不足,提供一种支持内嵌数据处理、复杂合约处理的高可用智能合约字节码重写方法、介质及装置。
[0005]为实现上述目的,本专利技术的技术方案是:
[0006]第一方面,本专利技术提供一种高可用的智能合约字节码重写方法,包括:
[0007]对于被重写的智能合约字节码,采用基于内存拷贝指令的定位方法区分智能合约字节码的代码与内嵌数据部分,并反编译智能合约字节码代码部分,得到智能合约字节码的反编译结果;
[0008]根据智能合约字节码的反编译结果,采用基于蹦床机制的指令重写方法以完成字节码的重写。
[0009]进一步地,所述对于被重写的智能合约字节码,采用基于内存拷贝指令的定位方法区分智能合约字节码的代码与内嵌数据部分,并反编译智能合约字节码代码部分,得到智能合约字节码的反编译结果包括:
[0010]解析智能合约字节码,找到所有内存拷贝指令,并得到相应的参数区间,以此得到疑似内嵌数据区间P;
[0011]通过疑似内嵌数据区间序列P定位智能合约内嵌数据d;
[0012]通过内嵌数据区间d反编译智能合约字节码代码部分。
[0013]进一步地,所述解析智能合约字节码,找到所有内存拷贝指令,并得到相应的参数区间,以此得到疑似内嵌数据区间P包括:
[0014]假定不考虑内嵌数据的存在,强制将智能合约字节码反编译得到指令集I
force

[0015]遍历指令集I
force
,找出所有内存拷贝指令,并提取内存拷贝指令相应参数对<offset,length>。以offset为键从大到小进行排序得到疑似内嵌数据区间序列P=<offset1,length1>,...,<offset
n
,,length
n
>。
[0016]进一步地,所述通过疑似内嵌数据区间序列P定位智能合约内嵌数据d包括:
[0017]首先,判断疑似内嵌数据P中第一个区间结尾P[0].end是否为字节码结尾,即isEnd(P[0].end);如果为否,则返回empty,否则继续;
[0018]接着,找到疑似区间序列P的尾部连续区间序列L;初始化当前连续区间π为P[0],初始化连续区间序列L为空;遍历疑似内嵌数据区间序列P,如果该区间与当前连续区间存在交集,即其中i∈{1,2,...,P
·
length},则更新连续区间π为π∪P[i]并将π添加至连续区间序列L中;
[0019]最后,遍历逆序连续区间序列L;判断该区间前一条指令是否为终止指令,即isEndIns(getPreIns(L[i])),其中i∈{L
·
length,...,0};如果为是,则返回该区间L[i],此时该区间即为内嵌数据区间d;如无法找到为满足上述条件的区间,则返回empty。
[0020]进一步地,所述通过内嵌数据区间d反编译智能合约字节码代码部分包括:
[0021]取智能合约字节码的内嵌数据区间补集,即得到智能合约字节码代码的区间c;
[0022]依据字节码与机器码的对应关系,将智能合约字节码代码的区间c反编译。
[0023]进一步地,所述根据智能合约字节码的反编译结果,采用基于蹦床机制的指令重写方法以完成字节码的重写包括:
[0024]根据智能合约字节码的反编译结果,基于蹦床机制对智能合约字节码进行指令重写;
[0025]修正因指令重写而产生的内嵌数据偏移。
[0026]进一步地,所述根据智能合约字节码的反编译结果,基于蹦床机制对智能合约字节码进行指令重写包括:
[0027]拷贝与更改:重写点为P
rew
,所在基本块为重写基本块B
rew
;将B
rew
拷贝并进行更改,更改结果记为R(B
rew
,P
rew
),并在尾部添加跳转代码J
back
,最终得到重写后的基本块B

rew
,其中B

rew
=R(B
rew
,P
rew
)+J
back

[0028]替换:将重写后的本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种高可用的智能合约字节码重写方法,其特征在于,包括:对于被重写的智能合约字节码,采用基于内存拷贝指令的定位方法区分智能合约字节码的代码与内嵌数据部分,并反编译智能合约字节码代码部分,得到智能合约字节码的反编译结果;根据智能合约字节码的反编译结果,采用基于蹦床机制的指令重写方法以完成字节码的重写。2.如权利要求1所述的高可用的智能合约字节码重写方法,其特征在于,所述对于被重写的智能合约字节码,采用基于内存拷贝指令的定位方法区分智能合约字节码的代码与内嵌数据部分,并反编译智能合约字节码代码部分,得到智能合约字节码的反编译结果包括:解析智能合约字节码,找到所有内存拷贝指令,并得到相应的参数区间,以此得到疑似内嵌数据区间P;通过疑似内嵌数据区间序列P定位智能合约内嵌数据d;通过内嵌数据区间d反编译智能合约字节码代码部分。3.如权利要求2所述的高可用的智能合约字节码重写方法,其特征在于,所述解析智能合约字节码,找到所有内存拷贝指令,并得到相应的参数区间,以此得到疑似内嵌数据区间P包括:假定不考虑内嵌数据的存在,强制将智能合约字节码反编译得到指令集I
force
;遍历指令集I
force
,找出所有内存拷贝指令,并提取内存拷贝指令相应参数对<offset,length>;以offset为键从大到小进行排序得到疑似内嵌数据区间序列P=<offset1,length1>,...,<offset
n
,,length
n
>。4.如权利要求2所述的高可用的智能合约字节码重写方法,其特征在于,所述通过疑似内嵌数据区间序列P定位智能合约内嵌数据d包括:首先,判断疑似内嵌数据P中第一个区间结尾P[0].end是否为字节码结尾,即isEnd(P[0].end);如果为否,则返回empty,否则继续;接着,找到疑似区间序列P的尾部连续区间序列L;初始化当前连续区间π为P[0],初始化连续区间序列L为空;遍历疑似内嵌数据区间序列P,如果该区间与当前连续区间存在交集,即其中i∈{1,2,...,P.length},则更新连续区间π为π∪P[i]并将π添加至连续区间序列L中;最后,遍历逆序连续区间序列L,判断该区间前一条指令是否为终止指令,即isEndIns(getPreIns(L[i])),其中i∈{L.length,...,0};如果为是,则返回该区间L[i],此时该区间即为内嵌数据区间d;如无法找到为满足上述条件的区间,则返回empty。5.如权利要求2所述的高可用的智能合约字节码重写方法,其特征在于,所述通过内嵌数据区间d反编译智能合约字节码代码部分包括:取智能合约字节码的内嵌数据区间补集,即得到智能合约字节码代码的区间c;依据字节码与机器码的对应关系,将智能合约字节码代码的区间c反编译。6.如权利要求1所述的高可用的智能合约字节码重写方法,其特征在于,所述根据智能合约字节码的反编译结果,采用基于蹦床机...

【专利技术属性】
技术研发人员:王立波彭泳翔刘志全郭穗鸣宋凌丁振杨许诺范文杰
申请(专利权)人:暨南大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1