一种基于复用分析的EVM字节码控制流图构建方法
未命名
10-08
阅读:112
评论:0

一种基于复用分析的evm字节码控制流图构建方法
技术领域
1.本发明涉及静态分析和区块链安全领域,尤其涉及一种基于复用分析的evm字节码控制流图构建方法。
背景技术:
2.随着区块链的高速发展,去中心化金融市场逐渐壮大。相比较传统的中心化金融,去中心化金融具有更透明,更公开的特点。链上的交易行为都通过执行部署的智能合约代码完成,不可被暗中篡改。
3.智能合约为去中心化金融提供了丰富的功能,并随着高速发展变得更复杂,规模更大,更易存在漏洞。而去中心化金融应用的智能合约中存在的任何潜在漏洞,都会造成用户的直接经济损失。另一方面,由于部署合约的公开透明,任何具备漏洞的代码都很容易被攻击者发现,进而部署合约进行攻击。
4.因此,对智能合约进行分析审计有其必要性。evm字节码是现在使用最广,涉及市值最大的可执行汇编语言。然而evm字节码具有高复用性的特点,严重阻碍了对部署合约进行自动化静态分析。现有技术中对evm字节码构建的控制流图并不经过复用分析,因此对复用不敏感,导致构建的控制流图与语义不相符,严重影响后续静态分析的精确性。
技术实现要素:
5.针对现有技术的不足,本发明提出一种基于复用分析的evm字节码控制流图构建方法,能够为后续静态分析提供有效的控制流图。
6.具体技术方案如下:一种基于复用分析的evm字节码控制流图构建方法,包括以下步骤:s1:将待分析字节码从十六进制形式反汇编成操作码和操作数;s2:根据所述操作码划分基本块;s3:使用递归迭代的策略对所述基本块进行复用分析,并在基本块之间构造控制流,具体通过如下子步骤实现:(3.1)选择一个基本块进行栈模拟,并记录其栈模拟前的初始栈状态快照和栈模拟后的结束栈状态快照;(3.2)标记快照中存在的特征数值;(3.3)根据所述特征数值进行复用分析选择后继基本块,即比较当前基本块在历史迭代记录的快照中是否存在标记的特征数值完全一样的基本块,若有,则将该基本块作为当前基本块的后继基本块;若否,则生成一份复用当前基本块的克隆副本作为后继基本块;(3.4)将所述后继基本块与当前基本块相连,得到一条控制流;(3.5)将所述后继基本块作为新一轮迭代选择的基本块,重复步骤(3.1)-(3.4),直到没有新的控制流产生;
s4:输出s3得到的构建完成的控制流图。
7.进一步地,所述s1中反汇编的具体实现方式如下:根据以太坊黄皮书中对evm操作码的定义,进行逐字节反汇编:采用一个计数器来记录当前反汇编字节相对于智能合约起始0x0的偏移量,该计数器从0x0开始,表示从第一个字节开始进行反汇编;在evm字节码中,所有的操作指令都是定长的,长度都为一个字节;根据以太坊黄皮书中对evm操作码的定义,将该字节反汇编成具体的操作码,并将计数器增加1;而当该字节落在0x60到0x7f之间时,表明其对应的操作码为push操作,是将一个具体数值压入栈中,反汇编模块将把后续对应长度的字节标记为数据,不进行反汇编,直接将计数器增加对应字节数。
8.进一步地,所述s2的具体实现方式如下:根据控制流相关指令进行基本块划分:采用一个计数器来记录当前指令相对于智能合约起始0x0的偏移量,所述计数器从0x0开始,表示从第一条指令开始进行基本块划分;按照偏移量从小到大,顺序读取所有指令,第一条指令默认为第一个基本块的起始指令,接下来的指令都属于第一个基本块,直到遇到基本块结束指令,每个基本块的偏移量为相对起始指令的偏移量;当指令为跳转指令或交易结束指令时,认为当前指令为当前基本块的结束指令,并将把下一条指令作为下一个基本块的起始指令;当指令为标记跳转目标指令时,认为当前指令为一个新基本块的起始指令,并将当前基本块结束,以上一条指令为当前基本块的结束指令。
9.进一步地,所述步骤(3.1)的具体实现方式如下:对所述基本块进行栈的初始化:基本块的初始栈继承了前驱基本块,即前一次迭代的基本块的结束栈状态快照;对于第一次迭代,选择偏移量为0的基本块进行栈模拟,并以一个空栈作为初始栈状态;记录所述基本块的初始栈状态快照;完成后对该基本块进行栈模拟;经过栈模拟,所有指令被转化成具有返回值和操作数的三地址码指令,其中返回值与操作数均为静态单赋值形式符号或具体数值;记录所述基本块的结束栈状态快照;其中,所述栈模拟具体为:根据以太坊黄皮书中对evm操作码定义的每个操作所需操作数数量和返回值数量,对每句指令进行操作数分配和返回值生成操作;对于push系列指令,根据其语义,将操作码后携带的数据作为操作数与返回值,即不从栈顶取出任何元素,并将数据作为具体数值存入栈顶;所述操作数分配,即为从栈顶取出该指令需要数量的元素,并将以太坊黄皮书中的定义顺序作为操作数;所述返回值生成,即为根据以太坊黄皮书中的定义生成对应数量的静态单赋值形式符号值,作为指令的返回值,存入栈顶。
10.进一步地,所述步骤(3.2)的具体实现方式如下:完成栈模拟后,获取所述基本块使用的跳转指令操作数作为特征源;基于此特征源,分别进行顺着程序执行方向和从当前迭代处理基本块回溯到程序开头两个方向的污点分析;将所有与此特征源相关的数值或者符号均放入特征集合后,遍历所有已存储的快照,包括之前迭代轮数中记录的基本块的初始栈状态快照和结束栈状态快照,所有快照中,如
果存在特征集合中的特征,则在此快照中标记该特征。
11.进一步地,所述步骤(3.3)的具体实现方式如下:根据所述基本块使用的跳转指令操作数,寻找所有偏移量和此操作数相同的基本块作为候选后继基本块;对于每一个候选后继基本块,通过比较候选后继基本块的初始栈状态快照与当前基本块的结束栈状态快照进行复用分析,即比较两个栈状态快照中所有在当次与此前迭代轮次中,执行步骤(3.2)时被标记的特征,如果存在任一特征不同,则认为该候选后继基本块存在复用行为,舍弃该候选后继基本块;遍历所有候选后继基本块,直到找到一个候选后继基本块,其初始栈状态快照与当前基本块的结束栈状态快照中所有被标记特征都相同,将该候选后继基本块作为当前基本块的后继基本块;若遍历所有候选后继基本块,仍未找到不存在复用行为的后继基本块,则生成一份克隆副本作为当前基本块的后继基本块。
12.一种基于复用分析的evm字节码控制流图构建系统,用于实现所述的基于复用分析的evm字节码控制流图构建方法,包括:输入模块、反汇编模块、基本块划分模块、控制流构建模块、输出模块;所述输入模块用于接收用户输入的待分析的字节码,并将所述字节码传递给反汇编模块;所述反汇编模块用于对字节码进行反汇编,得到操作码和操作数,并将操作码和操作数传递给基本块划分模块;所述基本块划分模块用于划分基本块,并将基本块传递给控制流构建模块;所述控制流构建模块用于构造控制流;所述输出模块用于输出构建完成的控制流。
13.一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现所述的基于复用分析的evm字节码控制流图构建方法。
14.本发明的有益效果是:(1)本发明提出了基于复用分析的evm字节码控制流图构建方法,实现了对evm字节码的复用分析,使构建的控制流图与语义相符。
15.(2)本发明基于复用分析,通过生成复用基本块的克隆副本,本发明在低开销的情况下能够为各种规模的evm字节码构造精准的控制流图,为进一步进行静态分析提供有效的原语。
附图说明
16.图1是本发明基于复用分析的evm字节码控制流图构建系统的架构图。
17.图2是本发明基于复用分析的evm字节码控制流图构建方法的流程图。
18.图3是未经复用分析生成本发明实施例中的示例代码片段的控制流图。
19.图4是基于含复用行为的控制流图所进行的数据流分析。
20.图5是基于复用分析生成本发明实施例中的示例代码片段的控制流图。
21.图6是基于不含有复用行为的控制流图所进行的数据流分析。
具体实施方式
22.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本技术的一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本技术保护的范围。
23.在以下的描述中,涉及到“一个具体实施例”,其描述了所有可能实施例的子集,但是可以理解,“一个具体实施例”,其描述了所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
24.除非另有定义,本文所使用的所有的技术的科学技术与属于本发明的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本发明实施例的目的,不是旨在限制本发明。
25.如图1所示,一种基于复用分析的evm字节码控制流图构建系统,包括:输入模块、反汇编模块、基本块划分模块、控制流构建模块、输出模块。
26.输入模块用于接收用户输入的待分析智能合约字节码,并将这些字节码传递给反汇编模块。
27.反汇编模块用于对字节码进行反汇编,得到操作码和操作数,并将操作码和操作数传递给基本块划分模块。
28.基本块划分模块用于根据操作码划分得到基本块,并将基本块传递给控制流构建模块。
29.控制流构建模块用于使用递归迭代的策略对基本块进行复用分析,并在基本块之间构造控制流。
30.输出模块用于输出构建完成的控制流。
31.如图2所示,一种基于复用分析的evm字节码控制流图构建方法,包括以下步骤:s1:将用户输入的待分析字节码从十六进制形式反汇编成操作码和操作数。具体通过如下子步骤实现:(1.1)用户向系统的输入模块中输入待分析字节码,输入模块将字节码传递给反汇编模块。
32.(1.2)反汇编模块将字节码从十六进制形式反汇编成操作码和操作数。
33.作为一个具体实施例,可以根据以太坊黄皮书中对evm操作码的定义,进行逐字节反汇编。具体来说,反汇编模块内部维护了一个计数器来记录当前反汇编字节相对于智能合约起始(0x0)的偏移量。该计数器从0x0开始,表示从第一个字节开始进行反汇编。在evm字节码中,所有的操作指令都是定长的,长度都为一个字节。反汇编模块根据以太坊黄皮书中对evm操作码的定义,将该字节反汇编成具体的操作码,并将计数器增加1;而当该字节落在0x60到0x7f之间时,表明其对应的操作码为push操作,是将一个具体数值压入栈中,反汇编模块将把后续对应长度的字节标记为数据,不进行反汇编,直接将计数器增加对应字节数。比如,如果在偏移量为0x0时,反汇编模块遇到字节码0x60、0x61,反汇编模块会先将第一个0x60翻译为push1,并将计数器增加到0x1,该操作码表示后一个字节为数值,将被压入栈顶,因此反汇编模块将把后面紧接的0x61标记为数据,而不是翻译为push2,并将计数器直接增到0x2;作为结果,0x60、0x61将被反汇编成push1、0x61。这样做的好处是,当数据中
包含0x5b(对应指令jumpdest)这种影响基本块划分的数值时,不会因为对数据进行无意义的反汇编,从而导致划分出额外的基本块,影响语义。
34.s2:根据操作码划分基本块。基本块是由一句或多句指令组成的可以顺序执行的指令序列,一个基本块的指令序列中不存在控制流结构,即不存在跳转指令。
35.作为其中一种实施方式,可以根据控制流相关指令,如jump、jumpi、revert等和标志基本块开始的指令jumpdest进行基本块划分。需要注意的是,操作码和指令在一些情况下可以替换,本专利中的指令包含操作码与操作数,而evm字节码中有一些操作并不需要操作数,因此对于这些操作,操作码就是指令。
36.具体来说,基本块划分模块内部维护了一个计数器来记录当前指令相对于智能合约起始(0x0)的偏移量。该计数器从0x0开始,表示从第一条指令开始进行基本块划分;基本块划分模块按照偏移量从小到大,顺序读取所有指令,第一条指令默认为第一个基本块的起始指令,接下来的指令都属于第一个基本块,直到遇到基本块结束指令,每个基本块的偏移量为其起始指令(所包含的所有指令中的第一条指令)的偏移量。当指令为跳转指令(如jump、jumpi等)或交易结束指令(如return、stop、revert等)时,基本块划分模块认为当前指令为当前基本块的结束指令,并将把下一条指令作为下一个基本块的起始指令。当指令为标记跳转目标指令(如jumpdest)时,基本块划分模块认为当前指令为一个新基本块的起始指令,并将当前基本块结束,以上一条指令为当前基本块的结束指令。
37.s3:使用递归迭代的策略对基本块进行复用分析,并在基本块之间构造控制流。具体通过如下子步骤实现:(3.1)选择一个基本块进行栈模拟并记录栈模拟前后的快照,具体实现方式如下:控制流构建模块首先对该基本块进行栈的初始化,具体来说,基本块的初始栈继承了前驱基本块(即前一次迭代的基本块)的结束栈状态快照。第一次迭代时选择偏移量为0的基本块进行栈模拟,并以一个空栈作为初始栈状态。
38.栈初始化结束后、栈模拟开始前,控制流构建模块对该基本块记录一次基本块的初始栈状态快照。
39.完成基本块的初始栈状态快照记录后,控制流构建模块对该基本块进行栈模拟。栈模拟结束后,控制流构建模块对该基本块记录一次基本块的结束栈状态快照。
40.其中,栈模拟具体为:根据以太坊黄皮书中对evm操作码定义的每个操作所需操作数数量和返回值数量,控制流构建模块对每句指令进行操作数分配和返回值生成操作。对于push系列指令(从push1到push32,操作码为0x60到0x7f),根据其语义,控制流构建模块将操作码后携带的数据作为操作数与返回值,即不从栈顶取出任何元素,并将数据作为具体数值存入栈顶。经过栈模拟,所有指令被转化成具有返回值和操作数的三地址码指令,其中返回值与操作数均为静态单赋值形式(static single assignment form,以下简称ssa)符号或具体数值。
41.其中,操作数分配,即从栈顶取出该指令需要数量的元素,将以太坊黄皮书中的定义顺序作为操作数。返回值生成,即根据以太坊黄皮书中的定义生成对应数量的ssa符号值,作为指令的返回值,存入栈顶。
42.控制流构建模块对每个基本块都维护了初始与结束两个栈状态快照,均用于后续步骤,即步骤(3.3)、(3.4)中进行复用分析与控制流构建。
43.(3.2)标记快照中存在的特征数值:栈模拟完成后,控制流构建模块获取该基本块使用的跳转指令操作数,以此作为特征源。基于此特征源,控制流构建模块分别进行朝前(顺着程序执行方向)和朝后(从当前迭代处理基本块回溯到程序开头)两个方向的污点分析。将所有与此特征源相关的数值或者符号均放入特征集合,收集完所有可能特征后,控制流构建模块遍历所有已存储的快照,包括之前迭代轮数中记录的基本块的初始栈状态快照和结束栈状态快照,所有快照中,如果存在特征集合中的特征,则在此快照中标记该特征。快照中所有被标记了的元素将成为后续步骤,即步骤(3.3)中复用分析的比较对象。
44.(3.3)根据快照中标记的特征数值进行复用分析选择后继基本块,即比较当前基本块在之前迭代的栈模拟记录的快照中是否存在标记的特征数值完全一样的基本块,若有,则将该基本块作为当前基本块的后继基本块;若否,则说明控制流存在复用情况,生成一份复用当前基本块的克隆副本作为当前基本块的后继基本块。具体操作如下:控制流构建模块根据该基本块使用的跳转指令操作数,寻找所有偏移量和此操作数相同的基本块作为候选后继基本块,由于在之前的迭代中可能已经存在过克隆行为,因此候选后继基本块通常不止一个。对于每一个候选后继基本块,控制流构建模块通过比较候选后继基本块的初始栈状态快照与当前基本块的结束栈状态快照进行复用分析,即比较两个栈状态快照中所有在当次与此前迭代轮次中,执行步骤(3.2)时被标记的特征,如果存在任一特征不同,则表明该候选后继基本块不能作为当前基本块的后继,因为若该候选后继基本块作为当前基本块的后继,此控制流与之前迭代中生成的控制流之间存在复用关系。直到找到一个候选后继基本块,其初始栈状态快照与当前基本块的结束栈状态快照中所有被标记特征都相同,将该候选后继基本块作为当前基本块的后继基本块。
45.如果遍历完所有候选后继基本块后,控制流构建模块都没有找到不存在复用行为的后继基本块,则生成一份克隆副本作为当前基本块的后继基本块,该副本拥有和所有候选后继基本块一样的偏移量和指令,但不存在栈快照。
46.(3.4)构建基本块之间的控制流。控制流构建模块将步骤(3.3)中选定的后继基本块与当前基本块相连,得到一条控制流。
47.(3.5)将所述后继基本块作为新一轮迭代选择的基本块,重复步骤(3.1)-(3.4),直到再也没有新的控制流产生,此时说明控制流图的构造已经完成。
48.s4:输出模块向用户输出s3得到的、构建完成的控制流图。
49.本发明能输出对复用敏感、语义更为精准的控制流图。下面通过一个实施例具体说明复用与复用分析带来的影响。提供一段示例代码具体如下:if x《1:x += 2if x《2:x *= 2x += 2示例代码包括两个if-else判断,其中第二行和第五行都进行了操作x += 2,solidity编译器为了缩小生成的字节码长度,会将这两句话用同样一段字节码进行实现。为了方便理解,此处仍然使用源代码进行示意。现存工具基于原始字节码直接生成的控制流图如图3所示,语义从两个if-else判断,变成了一个死循环,与原始语义有了很大的背
离;而基于此种控制流图所进行的数据流分析如图4所示,造成了大量的数据流假阳性,比如,x1原本只应依赖x0,而分析出x0依赖于所有变量。不进行复用分析,包含复用行为的控制流图会因此造成静态分析效率和准确性大打折扣,因此,对于evm字节码这种存在大量复用行为的汇编语言,需要进行单独的复用分析来构建精准的控制流图。使用本发明方法经过复用分析后生成的控制流图如图5所示,基于此做的数据流分析如图6所示,由图可知,本发明生成的控制流图符合源代码语义。
50.综上所述,本发明提出了一种基于复用分析的evm字节码控制流图构建方法,该方法通过分析栈中关键特征数值,判断evm字节码是否被复用,从而还原出符合真实语义的控制流图。本发明的分析面向完全公开、任何人皆可获取的区块链部署合约字节码,实现方法简便,轻量级开销低,能在短时间内为各种规模的evm字节码完成复用分析并生成控制流图,生成的对复用敏感的控制流图有助于更精准的静态分析。
51.本领域普通技术人员可以理解,以上所述仅为发明的优选实例而已,并不用于限制发明,尽管参照前述实例对发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实例记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在发明的精神和原则之内,所做的修改、等同替换等均应包含在发明的保护范围之内。
技术特征:
1.一种基于复用分析的evm字节码控制流图构建方法,其特征在于,包括以下步骤:s1:将待分析字节码从十六进制形式反汇编成操作码和操作数;s2:根据所述操作码划分基本块;s3:使用递归迭代的策略对所述基本块进行复用分析,并在基本块之间构造控制流,具体通过如下子步骤实现:(3.1)选择一个基本块进行栈模拟,并记录其栈模拟前的初始栈状态快照和栈模拟后的结束栈状态快照;(3.2)标记快照中存在的特征数值;(3.3)根据所述特征数值进行复用分析选择后继基本块,即比较当前基本块在历史迭代记录的快照中是否存在标记的特征数值完全一样的基本块,若有,则将该基本块作为当前基本块的后继基本块;若否,则生成一份复用当前基本块的克隆副本作为后继基本块;(3.4)将所述后继基本块与当前基本块相连,得到一条控制流;(3.5)将所述后继基本块作为新一轮迭代选择的基本块,重复步骤(3.1)-(3.4),直到没有新的控制流产生;s4:输出s3得到的构建完成的控制流图。2.根据权利要求1所述的基于复用分析的evm字节码控制流图构建方法,其特征在于,所述s1中反汇编的具体实现方式如下:根据以太坊黄皮书中对evm操作码的定义,进行逐字节反汇编:采用一个计数器来记录当前反汇编字节相对于智能合约起始0x0的偏移量,该计数器从0x0开始,表示从第一个字节开始进行反汇编;在evm字节码中,所有的操作指令都是定长的,长度都为一个字节;根据以太坊黄皮书中对evm操作码的定义,将该字节反汇编成具体的操作码,并将计数器增加1;而当该字节落在0x60到0x7f之间时,表明其对应的操作码为push操作,是将一个具体数值压入栈中,反汇编模块将把后续对应长度的字节标记为数据,不进行反汇编,直接将计数器增加对应字节数。3.根据权利要求1所述的基于复用分析的evm字节码控制流图构建方法,其特征在于,所述s2的具体实现方式如下:根据控制流相关指令进行基本块划分:采用一个计数器来记录当前指令相对于智能合约起始0x0的偏移量,所述计数器从0x0开始,表示从第一条指令开始进行基本块划分;按照偏移量从小到大,顺序读取所有指令,第一条指令默认为第一个基本块的起始指令,接下来的指令都属于第一个基本块,直到遇到基本块结束指令,每个基本块的偏移量为相对起始指令的偏移量;当指令为跳转指令或交易结束指令时,认为当前指令为当前基本块的结束指令,并将把下一条指令作为下一个基本块的起始指令;当指令为标记跳转目标指令时,认为当前指令为一个新基本块的起始指令,并将当前基本块结束,以上一条指令为当前基本块的结束指令。4.根据权利要求1所述的基于复用分析的evm字节码控制流图构建方法,其特征在于,所述步骤(3.1)的具体实现方式如下:对所述基本块进行栈的初始化:基本块的初始栈继承了前驱基本块,即前一次迭代的基本块的结束栈状态快照;对于第一次迭代,选择偏移量为0的基本块进行栈模拟,并以一个空栈作为初始栈状态;
记录所述基本块的初始栈状态快照;完成后对该基本块进行栈模拟;经过栈模拟,所有指令被转化成具有返回值和操作数的三地址码指令,其中返回值与操作数均为静态单赋值形式符号或具体数值;记录所述基本块的结束栈状态快照;其中,所述栈模拟具体为:根据以太坊黄皮书中对evm操作码定义的每个操作所需操作数数量和返回值数量,对每句指令进行操作数分配和返回值生成操作;对于push系列指令,根据其语义,将操作码后携带的数据作为操作数与返回值,即不从栈顶取出任何元素,并将数据作为具体数值存入栈顶;所述操作数分配,即为从栈顶取出该指令需要数量的元素,并将以太坊黄皮书中的定义顺序作为操作数;所述返回值生成,即为根据以太坊黄皮书中的定义生成对应数量的静态单赋值形式符号值,作为指令的返回值,存入栈顶。5.根据权利要求1所述的基于复用分析的evm字节码控制流图构建方法,其特征在于,所述步骤(3.2)的具体实现方式如下:完成栈模拟后,获取所述基本块使用的跳转指令操作数作为特征源;基于此特征源,分别进行顺着程序执行方向和从当前迭代处理基本块回溯到程序开头两个方向的污点分析;将所有与此特征源相关的数值或者符号均放入特征集合后,遍历所有已存储的快照,包括之前迭代轮数中记录的基本块的初始栈状态快照和结束栈状态快照,所有快照中,如果存在特征集合中的特征,则在此快照中标记该特征。6.根据权利要求1所述的基于复用分析的evm字节码控制流图构建方法,其特征在于,所述步骤(3.3)的具体实现方式如下:根据所述基本块使用的跳转指令操作数,寻找所有偏移量和此操作数相同的基本块作为候选后继基本块;对于每一个候选后继基本块,通过比较候选后继基本块的初始栈状态快照与当前基本块的结束栈状态快照进行复用分析,即比较两个栈状态快照中所有在当次与此前迭代轮次中,执行步骤(3.2)时被标记的特征,如果存在任一特征不同,则认为该候选后继基本块存在复用行为,舍弃该候选后继基本块;遍历所有候选后继基本块,直到找到一个候选后继基本块,其初始栈状态快照与当前基本块的结束栈状态快照中所有被标记特征都相同,将该候选后继基本块作为当前基本块的后继基本块;若遍历所有候选后继基本块,仍未找到不存在复用行为的后继基本块,则生成一份克隆副本作为当前基本块的后继基本块。7.一种基于复用分析的evm字节码控制流图构建系统,用于实现权利要求1-6任意一项所述的基于复用分析的evm字节码控制流图构建方法,其特征在于,包括:输入模块、反汇编模块、基本块划分模块、控制流构建模块、输出模块;所述输入模块用于接收用户输入的待分析的字节码,并将所述字节码传递给反汇编模块;所述反汇编模块用于对字节码进行反汇编,得到操作码和操作数,并将操作码和操作数传递给基本块划分模块;所述基本块划分模块用于划分基本块,并将基本块传递给控制流构建模块;所述控制流构建模块用于构造控制流;
所述输出模块用于输出构建完成的控制流。8.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-6任意一项所述的基于复用分析的evm字节码控制流图构建方法。
技术总结
本发明公开了一种基于复用分析的EVM字节码控制流图构建方法,包括:将输入的待分析字节码从十六进制形式反汇编成操作码和操作数;根据所述操作码划分基本块;使用递归迭代的策略,通过分析栈中关键特征数值,判断EVM字节码是否被复用,并构造控制流,重复判断直到没有新的控制流产生;输出构建完成的控制流图。本发明实现方法简便,轻量级开销低,能在短时间内为各种规模的EVM字节码完成复用分析并生成控制流图,生成的对复用敏感的控制流图有助于更精准的静态分析。更精准的静态分析。更精准的静态分析。
技术研发人员:王丁玎 周亚金
受保护的技术使用者:浙江大学嘉兴研究院
技术研发日:2023.08.31
技术公布日:2023/10/5
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/