CN112115472A - 一种面向数据管控的智能合约代码检查方法和系统 - Google Patents

一种面向数据管控的智能合约代码检查方法和系统 Download PDF

Info

Publication number
CN112115472A
CN112115472A CN202010809496.2A CN202010809496A CN112115472A CN 112115472 A CN112115472 A CN 112115472A CN 202010809496 A CN202010809496 A CN 202010809496A CN 112115472 A CN112115472 A CN 112115472A
Authority
CN
China
Prior art keywords
data
analysis
control
flow graph
control flow
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202010809496.2A
Other languages
English (en)
Inventor
蔡华谦
黄家梅
朱晓旻
张舒汇
郭京申
舒俊宜
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Zhirong Yunhe Technology Co ltd
Original Assignee
Beijing Zhirong Yunhe Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Zhirong Yunhe Technology Co ltd filed Critical Beijing Zhirong Yunhe Technology Co ltd
Priority to CN202010809496.2A priority Critical patent/CN112115472A/zh
Publication of CN112115472A publication Critical patent/CN112115472A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • G06F21/563Static detection by source code analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q40/00Finance; Insurance; Tax strategies; Processing of corporate or income taxes
    • G06Q40/04Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange

Landscapes

  • Engineering & Computer Science (AREA)
  • Business, Economics & Management (AREA)
  • Computer Security & Cryptography (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Accounting & Taxation (AREA)
  • Finance (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • Economics (AREA)
  • General Business, Economics & Management (AREA)
  • Health & Medical Sciences (AREA)
  • Technology Law (AREA)
  • Strategic Management (AREA)
  • Marketing (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Development Economics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明实施例提供了一种面向数据管控的智能合约代码检查方法和系统,所述方法和系统预先定义数据依赖类型及其相关计算,设计基于污点分析的多源多汇的静态分析算法;针对目标合约文件中的目标合约函数,确定污点源;基于所述算法,将所述污点源添加到控制流图的起始块执行前的分析结果中,通过遍历程序控制流图,选择相应的数据使用约束,进行数据值传递依赖分析和/或数据控制依赖分析,持续地更新执行后的分析结果,返回最终分析结果;生成并返回分析报告。本发明实施例提供的方法和系统,基于特定数据管控策略来定义数据约束并进行静态分析,以完成智能合约的自动化审计,保证面向数据管控的区块链平台上智能合约的正常运行。

Description

一种面向数据管控的智能合约代码检查方法和系统
技术领域
本发明涉及通信技术领域,特别是涉及一种面向数据管控的智能合约代码检查方法和一种面向数据管控的智能合约代码检查系统。
背景技术
智能合约是部署在区块链上的可执行代码,区块链为智能合约提供了可信执行的环境,除传统的以以太坊为例的智能合约在加密货币领域的应用以外,现如今智能合约还广泛应用于金融、投票、供应链、电子商务等领域。智能合约一旦上链执行是不可逆的,需在其执行前就发现潜在的漏洞。
程序静态分析是在程序执行前发现其漏洞的主要手段。智能合约作为一种特殊的程序,不同领域下的智能合约则需要进行面向领域特定目标的静态分析,以保障智能合约的准确运行。而目前已有的对智能合约进行静态分析的方法仅适用于加密货币领域,如:整型溢出、Fallback检测等等。
随着区块链在不同领域的广泛使用,出现了面向数据全生命周期管控的区块链平台,该平台为了保障数据所有者的权益,原始数据并不是像加密货币的交易数据一样被记录在账本上被所有参与者共享,而是数据使用者通过提供智能合约的方式向数据所有者发起请求,数据所有者需要审计智能合约是否合理合法地使用其数据,然后使用者才能使用数据。目前,面向数据管控的区块链平台中,由于仍然缺乏相应的智能合约的静态分析方法,完全由数据使用者来人工审计智能合约的做法,效率低下、成本高昂。
发明内容
鉴于上述问题,提出了本发明实施例提供一种克服上述问题或者至少部分地解决上述问题的一种面向数据管控的智能合约代码检查方法和一种面向数据管控的智能合约代码检查系统。
为了解决上述问题,本发明实施例提供了一种面向数据管控的智能合约代码检查方法,所述方法包括:预先定义数据依赖类型和所述数据依赖类型的相关计算,设计基于污点分析的多源多汇的静态分析算法,以用于基于特定的数据管控策略来定义数据使用约束并进行静态分析;针对目标合约文件中的目标合约函数,确定污点源,所述污点源包括:程序输入参数和合约调用指令;基于所述静态分析算法,将所述污点源添加到控制流图的起始块执行前的分析结果中,以初始化所述分析结果,通过遍历程序控制流图,选择相应的数据使用约束,进行数据值传递依赖分析和/或数据控制依赖分析,持续地更新执行后的分析结果,最后返回最终分析结果;根据所述最终分析结果,生成并返回分析报告。
可选地,预先定义数据依赖类型和所述数据依赖类型的相关计算,设计基于污点分析的多源多汇的静态分析算法,以用于基于特定的数据管控策略来定义数据使用约束并进行静态分析,包括:面向数据使用的管控需求,通过对智能合约编译之后的字节码指令进行分析,定义变量之间的数据依赖类型,即,变量之间的关联类型,包括数据值传递依赖关联和数据控制依赖关联,同时,基于数据使用约束描述方法,定义关联类型和关联类型的计算。
可选地,所述数据值传递依赖包括:程序变量与数据源之间的包含依赖关系、赋值依赖关系、算数依赖关系和函数依赖关系,表示数据间的显式信息流传播;所述数据控制依赖,包括程序变量与数据源之间的控制依赖关系,表示数据间的隐式信息流传播。
可选地,针对目标合约文件中的目标合约函数,确定污点源,包括:将所述程序输入参数直接标记为所述污点源;遍历控制流图中的所有基本块,找出程序中的合约调用指令,进而将所述合约调用指令标记为所述污点源。
可选地,遍历控制流图中的所有基本块,找出程序中的合约调用指令,包括:遍历所有基本块,对于每一个基本块,遍历所有字节码指令,若某条指令类型为“kInstrInvoke”类型,且指令名称包含“dyn:call:executeContract”,表示为动态函数调用指令,且函数名称为“executeContract”,即为合约调用指令。
可选地,所述数据值传递依赖分析,包括:将所述控制流图的起始块添加到分析的工作集中,以初始化所述工作集;遍历所述控制流图,取出每一个所述控制流图的节点,判断所述节点出边是否为空,即,判断当前基本块有无后续块;若有后续块,则根据所述节点的类型,使用相应的依赖分析传递函数,所述污点源根据每个基本块中所包含的指令的依赖类型进行传播,同时将所述节点加入所述工作集;当控制流图遍历完成后,返回所述工作集,结束所述数据值传递依赖分析。
可选地,所述数据控制传递分析,包括:遍历所述控制流图中所有基本块,找出所述控制流图中所有可跳转的基本块,即,分支块;判断所述控制流图中的各个基本块是否依赖于各个分支块。
可选地,判断所述控制流图中的各个基本块是否依赖于各个分支块,包括:通过三重遍历循环,遍历所述控制流图中所有分支块,并获取每个分支块的所有后续块;遍历所述控制流图中所有基本块,并遍历每个基本块所有的后续块,基于深度优先遍历算法DFS,判断所有的后续块是否可达所述控制流图中的某一基本块,若不可达,则所述某一基本块依赖于当前分支块。
可选地,所述分析报告包括:分析参数、最终分析结果、合约代码和程序控制流图;其中,所述分析参数包括数据源和数据使用约束类型信息,所述最终分析结果包括数据如何依赖于污点源和是否通过静态分析的最终分析结果。
本发明实施例还提供了一种面向数据管控的智能合约代码检查系统,所述系统具体包括:
算法预设模块,用于预先定义数据依赖类型和所述数据依赖类型的相关计算,设计基于污点分析的多源多汇的静态分析算法,以用于基于特定的数据管控策略来定义数据使用约束并进行静态分析;
污点源确定模块,用于针对目标合约文件中的目标合约函数,确定污点源,所述污点源包括:程序输入参数和合约调用指令;
静态分析模块,用于基于所述静态分析算法,将所述污点源添加到控制流图的起始块执行前的分析结果中,以初始化所述分析结果,通过遍历程序控制流图,选择相应的数据使用约束,进行数据值传递依赖分析和/或数据控制依赖分析,持续地更新执行后的分析结果,最后返回最终分析结果;
分析报告导出模块,用于根据所述最终分析结果,生成并返回分析报告。
从上述技术方案可以看出,本发明实施例提供了一种面向数据管控的智能合约代码检查方法和系统,预先定义数据依赖类型及其相关计算,基于特定的数据管控策略来定义数据使用约束并进行静态分析,在静态分析中选择相应的数据使用约束,进而进行相应的数据依赖分析方法,最终返回分析报告,本发明实施例基于特定的数据管控策略来定义数据约束并进行静态分析,可以对数据使用约束定义复杂的智能合约代码进行自动化的检查,进而完成面向数据管控的智能合约的自动化审计,在不需要数据所有者亲自对每一笔交易进行审计的前提下,保证面向数据管控的区块链平台上的智能合约的正常运行。
附图说明
图1是一种面向数据管控的区块链平台的技术架构图;
图2是一种基于智能合约的数据隐私保护策略示例图;
图3是本发明提供的一种面向数据管控的智能合约代码检查方法的步骤流程图;
图4是本发明实施例提供的一种污点分析处理过程示意图;
图5是本发明实施例提供的一种多源多汇的静态分析算法流程图;
图6本发明实施例提供的一种数据值传递依赖分析流程图;
图7是本发明实施例提供的一种数据控制依赖分析流程图;
图8是本发明实施例提供的一种查找控制流图中所有分支块的流程图;
图9是本发明实施例提供的一种基于深度优先遍历算法的有向图的可达性分析算法流程图;
图10是本发明实施例提供的一种BFS遍历流程图;
图11是本发明提供的一种面向数据管控的智能合约代码检查系统的结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1示出了一种面向数据管控的区块链平台的技术架构图,其可信计算层围绕智能合约语言,提供了合约开发环境、运行环境和其他编程语言的第三方库调用模块。实现随机多节点相互校验的可信计算,并支持调用可信存储出层的接口将合约执行的过程信息存储到可信存储层。
图2示出了一种基于智能合约的数据隐私保护策略示例图,参照图2所示,所述示例通过两种合约:由数据使用者编写的算法合约和由所述算法合约调用的数据合约,来统计男女性别数量。如图所示,由于该算法合约具有数据隐私保护的敏感策略,允许返回人员列表根据性别统计后的返回结果,不允许返回包含姓名和性别的数据列表,即该合约只允许返回男女性别比的统计结果,而非包含姓名和性别一一对应的原始数据列表。因此,基于此敏感策略,数据所有者需审核算法合约,判断其是否满足该敏感策略。对于数据所有者来说,完全依赖人工去判断一个智能合约是否合理合法地使用数据(即审核智能合约是否符合数据隐私保护策略)效率低、成本高。
现有的智能合约静态分析工具主要应用于代码风格、语法错误等潜在漏洞的检查,而针对面向数据管控的区块链平台的智能合约,需要静态分析工具基于特定数据管控策略来定义数据约束并进行静态分析。因此,现有的智能合约静态分析工具不可用于面向数据管控的区块链平台的智能合约的静态分析。
实施例一
图3是本发明提供的一种面向数据管控的智能合约代码检查方法的步骤流程图。如图3所示,本发明提供的方法实施例可以应用于面向数据管控的区块链平台,具体包括如下步骤:
步骤S101,预先定义数据依赖类型和所述数据依赖类型的相关计算,设计基于污点分析的多源多汇的静态分析算法,以用于基于特定的数据管控策略来定义数据使用约束并进行静态分析。
在本发明实施例中,设计基于污点分析的多源多汇的静态分析算法,需要预先构建控制流图,在构建控制流图时面向数据使用的管控需求,通过对智能合约编译之后的字节码指令进行分析,定义变量之间的数据依赖类型,即,关联类型,包括数据值传递依赖关联和数据控制依赖关联;同时,基于数据类型及其相关计算,给出数据使用约束描述方法。
在本发明实施例中,所述数据值传递依赖包括:程序变量与数据源之间的包含依赖关系、赋值依赖关系、算数依赖关系和函数依赖关系,表示数据间的显式信息流传播;所述数据控制依赖,包括程序变量与数据源之间的控制依赖关系,表示数据间的隐式信息流传播。
数据使用约束在程序静态分析中体现为数据依赖关系。传统的数据依赖分析只需考虑直接的数据值传递依赖关系,且主要针对单一的数据源进行分析。而面向数据管控的区块链平台上的智能合约数据使用约束定义复杂,且智能合约间的调用使得数据源呈多样性,面向数据管控的区块链平台上的智能合约要保障数据是可管可控的,需根据特定的数据管控策略来定义数据使用约束并进行检查。
因此,基于关联类型和所述关联类型的相关计算,本发明实施例提供了一种数据使用约束描述方法,使用该约束描述方法,数据所有者可以方便地将诸如“原始数据不可返回,统计数据可以返回”等数据使用规范描述为程序可以处理的数据使用约束并进行验证。
根据所述数据使用约束描述方法,本发明实施例提供了一种基于污点分析的数据使用约束检查的静态分析算法,能基于特定的数据管控策略来定义数据约束并进行静态分析,以完成面向数据管控的智能合约的自动化审计。
传统的污点分析技术只需分析程序中由污点源引入的数据是否能够传播到污点汇聚点,污点源和污点汇聚点都是单一的。而在面向数据管控的智能合约中,除了可多次调用其他智能合约的执行结果作为程序的输入(即污点源),也可多次将程序的输出(即污点汇聚点)作为其他智能合约的输入将部分数据输出,即污点源和污点汇聚点都是多样的。因此,本发明实施例所实现的静态分析算法支持多源多汇的数据使用约束分析。
其中,控制流图CFG(Control Flow Graph)也叫程序控制流程图,是一个过程或者程序的抽象表现,代表了一个程序执行过程中会遍历到的所有路径,是编译器优化和程序静态分析的重要工具。控制流图由两个部分组成:基本块和执行流向。其中,基本块是一个程序内可以连续执行的最大单位或对程序控制的最小单位,它的特点是单入口,单出口,中间没有分支;执行流向则代表两个基本块之间的连线。
污点分析是指分析程序中由污点源引入的数据是否能够不经过无害处理直接传播到污点汇聚点,若能到达则说明程序产生了隐私数据泄露或危险数据操作等安全问题;若不能则说明程序是信息流安全的。无害处理是指污点数据经过该模块的处理后,数据本身不再携带敏感信息或者针对该数据的操作不会再对程序产生危害。换言之,带污点标记的数据在经过无害处理模块后,污点标记可以被移除。污点分析常用于代码缺陷的检查。
图4示出了本发明实施例提供的一种污点分析处理过程示意图。参照图4所示,由于污点分析技术是一项分析程序污点源(sources)是否能够不经过无害处理(sanitizers)传播到污点汇聚点(sinks)的静态分析技术,因此,污点分析可抽象成一个三元组<污点源sources,sinks,sanitizers>,具体分为三个阶段:识别污点源和污点汇聚点、无害处理以及污点传播分析。首先是污点源的识别,对普通变量添加污点标记形成污点变量;然后进行污点传播分析,污点变量经过无害处理后和普通变量间进行各种依赖关系传播;最终汇聚到污点汇聚点。其中,污点传播分析又分为显式流分析和隐式流分析。显式流分析即分析污点源如何随程序中变量之间通过数值传递依赖关系传播;而隐式流分析指分析数据间的控制依赖关系传播,即分析污点源如何从条件指令传播到其所控制的语句。传统的污点分析只涉及到显式流分析,且污点源和污点汇聚点都较为单一。
本发明实施例提供的基于污点分析的多源多汇的静态分析算法需要设定多个污点源和多个污点汇聚点,针对不同的数据类型,选择相应的数据使用约束,选择进行显式流分析和/或隐式流分析。
步骤S102,针对目标合约文件中的目标合约函数,确定污点源,所述污点源包括:程序输入参数和合约调用指令。
在本发明提供的一种优选实施例中,将程序输入参数直接标记为所述污点源;遍历控制流图中的所有基本块,找出程序中的合约调用指令,进而将所述合约调用指令标记为所述污点源。
表1示出了本发明实施例提供的一种查找合约调用指令的代码。
表1
Figure BDA0002630410820000081
参照表1所示,本发明实施例输入合约调用列表和基本块列表,遍历所有基本块,对于每一个基本块,遍历所有字节码指令,若某条指令类型为“kInstrInvoke”类型,且指令名称包含“dyn:call:executeContract”,表示为动态函数调用指令,且函数名称为“executeContract”,即为合约调用指令。
步骤S103,基于所述静态分析算法,将所述污点源添加到控制流图的起始块执行前的分析结果中,以初始化所述分析结果,通过遍历程序控制流图,选择相应的数据使用约束,进行数据值传递依赖分析和/或数据控制依赖分析,持续地更新执行后的分析结果,最后返回最终分析结果。
基于污点分析的静态分析算法是分析污点源如何通过依赖关系在程序变量中进行传播。在Java环境中,编译好的Java字节码在Java虚拟机JVM中执行时,JVM会为每个方法创建一个栈帧,每个栈帧存储局部变量表、操作数栈、动态链接、返回地址等信息。因此程序中的局部变量是存储在栈帧的局部变量表中,而对于程序中的全局变量,其中常量和用static修饰的静态成员变量存储在方法区中,实例变量存储在方法区中,实例变量的引用存储在栈帧的局部变量中。
因此,在本发明实施例中,针对所述静态分析,预先定义分析结果的表现形式,包括:针对设计模拟所述字节码在虚拟机中的执行过程,预先定义一个栈帧结构,用于模拟所述污点源随着程序的局部变量在局部变量表中的传递过程;针对全局变量,预先定义一个堆对象,用于表示全局变量中的实例对象,对于被标记的实例对象的引用也可在所述局部变量表中进行传递。
在本发明实施例中,由于需要遍历所述控制流图和持续更新所述控制流图中的基本块的分析结果,同时记录所述控制流图中的控制依赖信息,完成对所述智能合约的静态分析,因此,针对所述静态分析,需要预先定义与所述分析结果相关的基本操作,包括:
预先定义合并多条指令执行的分析结果的操作,用于针对所述控制流图中基本块内部多条指令的执行后,合并所述多条指令执行后的分析结果;
预先定义判断两个分析结果是否存在包含关系的操作,用于针对所述控制流图中基本块执行前后分析结果的变化,判断所述基本块执行前的分析结果是否包含在所述基本块执行后的分析结果中;
预先定义合并基本块的分析结果的操作,用于针对所述控制流图中基本块执行前后分析结果的变化,将执行前的分析结果合并到执行后的分析结果中;
预先定义分析结果的克隆操作,用于实现所述分析结果的合并;
预先定义打印分析结果的操作,用于针对所述栈帧结构模拟程序污点源随着程序变量在程序中的传递过程,打印分析结果,以便于直观地查看污点传播过程。
在本发明实施例中,通过对分析结果的操作抽象类AnalysisResult进行设计,定义所述与所述分析结果相关的基本操作,用于所述控制流图的遍历。
本发明实施例通过定义TaintResult类以及其中的成员变量,定义分析结果在静态分析中的表现形式,用于数据依赖分析过程的实现。
表2示出了所述TaintResult类的成员变量及其含义。
表2
变量名 变量类型 含义
frame Frame<TaintValue> 栈帧
ret TaintValue 被污点源标记后的分析结果
nLocals int 局部变量表的大小
nStack int 栈的大小
printer InsnPrinter 字节码指令访问器
interpreter TaintInterpreter 字节码指令解释器
参照表2所示,成员变量中的frame和ret代表了分析结果在静态分析算法中的表现形式。Frame类由ASM框架的Tree API提供,定义一个栈帧结构,用于模拟被污点源标记的分析结果随程序的局部变量在局部变量表中的传递过程。TaintValue类将分析结果定义为一个长整型的数,将该整数转换为字符串后每个字符用“1/0”表示是否被污点源污染。
本发明实施例通过定义TaintResult类,实现分析结果的操作函数,同时定义了用于数据值传递依赖分析和数据控制依赖分析的成员变量,因此,在本发明实施例中,初始化所述分析结果,即,初始化数据值传递依赖分析和数据控制依赖分析的成员变量。
表3示出了本发明实施例提供的一种分析结果的初始化代码。
表3
Figure BDA0002630410820000111
参照表3所示,本发明实施例首先获取控制流图的起始块,设定程序局部变量表和程序栈的大小,在确定合约调用指令“executeContract”和程序输入参数“arg”的污点源后,将污点源添加到局部变量表并构建栈帧frame,以将所述污点源添加到控制流图的起始块执行前的分析结果中,完成所述分析结果的初始化。
图5示出了本发明实施例提供的一种多源多汇的静态分析算法流程图。参照图5所示,本发明实施例采用基于污点分析的多源多汇算法,将污点汇聚点sink集合替换为两种不同的数据依赖分析算法,即值传递依赖传播分析和控制依赖传播分析,分析污点源是否能传播到最终的返回结果,或者通过何种传播方式传播到最终的返回结果。具体地,第一步,确定污染源;第二步,对控制流图的初始块的分析结果进行初始化;第三步,根据数据依赖类型,选择相应的数据使用约束,进行值传递依赖传播分析和/或控制依赖传播分析;第四步,返回最终的分析结果。
表4示出了本发明实施例提供的一种数据依赖类型定义。
表4数据依赖类型定义
Figure BDA0002630410820000121
参照表4所示,在本发明实施例中,首先定义数据依赖类型,参照表3所示,所述数据依赖类型包括:数据值传递依赖和数据控制依赖;其中,所述数据值传递依赖包括:程序变量与数据源之间的包含依赖关系、赋值依赖关系、算数依赖关系和函数依赖关系,表示数据间的显示信息流传播;如程序语句是Res=source+1,则source可直接通过加法运算直接传递到Res中,因此Res算数依赖于source,依赖表达式为
Figure BDA0002630410820000122
而控制依赖则表示数据间的隐示信息流传播。程序通过分支语句if(source>0)后,可能跳转到分支Res=a,也可能跳到分支Res=b,则最后的返回结果是隐式控制依赖于分支语句里的判断结果的,因此Res控制依赖于source,依赖表达式为
Figure BDA0002630410820000123
所述数据值传递依赖分析是分析污点源如何随程序中变量之间进行直接值传递传播,即,分析程序变量与数据源之间的包含依赖关系、赋值依赖关系、算数依赖关系和函数依赖关系。数据值传递依赖分析属于正向数据流分析,不同的字节码指令会生成不同的变量关系。其数据流方程如下:
Outn=InterpreterExec(Inn)
Figure BDA0002630410820000124
其中,InterpreterExec是基本块中的指令执行操作,Inn代表基本块执行前的分析结果,Outn代表基本块执行后的分析结果,分析结果不断地迭代、更新,最后返回一个最终的分析结果。
图6示出了本发明实施例提供的一种数据值传递依赖分析流程图。
参照图6所示,在本发明实施例中,所述数据值传递依赖分析具体包括:第一步,将所述控制流图的起始块添加到分析的工作集中,以初始化所述工作集;第二步,遍历所述控制流图,取出每一个所述控制流图的节点;第三步,判断所述节点出边是否为空,即,判断当前基本块有无后续块;第四步,若有后续块,则根据所述节点的类型,使用相应的依赖分析传递函数,所述污点源根据每个基本块中所包含的指令的依赖类型进行传播;第五步,将所述节点加入所述工作集;第六步,当控制流图遍历完成后,返回所述工作集;第七步,结束所述数据值传递依赖分析。其中,污点源在基本块之间的值传递过程是一个有向无环图的遍历过程,且图的遍历不仅会在数据值传递依赖分析中使用,也可用于其他数据流分析算法中。
表5示出了本发明实施例提供的一种依赖运算表,用于计算当多个数据使用约束作用于某个数据源时的最终分析结果。
表5依赖运算表
Figure BDA0002630410820000131
Figure BDA0002630410820000141
参照表5所示,依赖运算符合从右往左结合的原则,如
Figure BDA0002630410820000142
是一个二元依赖类型,即在进行依赖分析时,应从右往左先进行算数依赖分析,再进行控制依赖分析。例如,对于程序语句是b=a+1,c=b+1,那么,b与a的关系为
Figure BDA0002630410820000143
b与c的关系为
Figure BDA0002630410820000144
根据依赖运算表,
Figure BDA0002630410820000145
Figure BDA0002630410820000146
即实际上c=a+1,c算数依赖于a。
所述数据控制依赖是分析污点源如何随程序中变量之间进行间接传播,即,通过程序的分支语句进行传播,分析程序变量与数据源之间的控制依赖关系,表示数据间的隐式信息流传播。
在本发明实施例中,对于程序中的任意一个分支语句所在的基本块B1,及其所有的直接后续块B2,B3,...,Bi,对于基本块Bj,若B1的所有后续块都可达Bj,则Bj与B1的分支语句无控制依赖关系,相反则有。令控制流图中的所有分支块的集合为,每个分支块的直接后续块结合为。具体地,控制依赖分析也可抽象为如下的数据流方程:
该数据流方程可使用深度优先遍历进行迭代,迭代完成后,判断分支块bi是否控制某基本块,只需看该基本块的Inn是否不包含{bij|j=0,1,…}的所有元素,若不包含则控制,否则不控制。即判断分支块bi的所有直接后续块是否可达该基本块,若不可达则该分支块控制该基本块,否则不控制。
图7示出了本发明实施例提供的一种数据控制依赖分析流程图。
参照图7所示,在本发明实施例中,所述数据控制传递分析,具体包括:第一步,遍历所述控制流图中所有基本块,找出所述控制流图中所有的分支块,即,当前基本块所有的可跳转的基本块;第二步,判断分支块集合是否为空,否则进入第三步,是则结束所述数据控制传递分析;第三步,遍历所有分支块,并获取每个分支块的所有后续块;第四步,遍历所有的基本块,判断所有的后续块是否均可以到达当前基本块,若否,则当前基本块依赖于当前分支块,若是,则结束遍历,进而结束所述数据控制传递分析。
在本发明实施例中,判断所述控制流图中的各个基本块是否依赖于各个分支块,包括:通过三重遍历循环,遍历所述控制流图中所有分支块,并获取每个分支块的所有后续块;遍历所述控制流图中所有基本块,同时遍历每个基本块所有的后续块,基于深度优先遍历算法DFS,,判断所有的后续块是否可达所述控制流图中的某一基本块,若不可达,则所述某一基本块依赖于当前分支块。
在本发明实施例中,所述分支块的定义为:若某基本块可跳转到两个或两个以上的基本块,则该基本块为分支块。通过打印控制流图能够发现,例如某些包含GOTO指令(跳转指令类JumpInsnNode包含的一种字节码指令)的基本块,其后续块的数量等于1,即该基本块不能满足分支块的定义。因此,在程序中判断某基本块是否为分支块时,不仅要判断该基本块是否包含跳转指令JumpInsnNode,还需判断该基本块的后续块数量是否大于1。
图8示出了本发明实施例提供的一种查找控制流图中所有分支块的流程图。如图8所示,第一步,遍历控制流图,获得每个基本块的后续块的数量;第二步,判断后续块的数量,若后续块的数量大于1,该基本块可能为分支块,是则进入第三步,否则结束遍历,进而结束查找流程;第三步,在所有可能的分支块中,遍历其字节码指令;第四步,通过判断是否包含“JumpInsnNode”指令,判断该字节码指令是否为跳转指令;第五步,若判断该字节码指令为跳转指令,则确定该基本块为分支块,否则回退至第三步,进入下一次字节码指令的遍历。
图9示出了本发明实施例提供的一种基于深度优先遍历算法的有向图的可达性分析算法流程图,用于判断某个基本块是否可达另一个基本块。
有向图的可达性分析主要是基于标记-清除的思想,算法主要思路为:以图的某个基本块s为例,获取s的所有后续块,判断其是否被遍历过,若没有则递归调用DFS来对可达的每个块进行遍历,则可找出从s出发可到达的基本块。
参照图9所示,本发明实施例提供的可达性分析算法流程,具体包括:第一步,输入起始块,创建一个DFS类对象,所述DFS类是一个布尔集合,维护了一个成员变量marked,表示该控制流图中的基本块是否被标记;同时DFS类还定义了一个递归的深度优先遍历成员方法dfs,输入参数为起始块和程序控制流图;第二步,将起始块设置为已标记;第三步,基于深度优先遍历方法,遍历起始块的所有后续块;第四步,若某一后续块未被标记,则递归调用深度优先遍历算法,回退至第二步;第五步,遍历结束后最后输入结束块,调用成员方法isArrival()返回结束块的标记布尔值。
表6示出了本发明实施例提供的一种控制依赖分析结果示例。
表6
基本块 初始状态(In<sub>n</sub>) 结束状态(Out<sub>n</sub>) 被哪个分支块控制
B1 {} {}
B2 {} {b30,b31}
B3 {b21} {b21,b30,b31} 被b2控制
B4 {b30} {b30} 被b3控制
B5 {b31} {b31} 被b3控制
B6 {b20} {b20} 被b2控制
参照表6所示,以基本块B3为例,其初始状态为{b21},表示在B3执行前只有基本块B2的第二个后续块(即B3)可达基本块B3;而结束状态为{b21,b30,b31},表示在B3执行后,基本块B2的第二个后续块B3、基本块B3的第一个后续块B4以及基本块B3的第二个后续块B5均可达基本块B3。由于在初始状态中只包含{b21},未包含{b20,b21},因此基本块B3控制依赖于基本块B2。
步骤S104,据所述最终分析结果,生成并返回分析报告。
表7示出了本发明实施例中所述分析报告的内容具体信息。
表7
内容分类 内容具体信息
分析参数 数据源、数据使用约束类型
分析结果 数据值传递依赖信息、数据控制依赖信息、是否通过静态分析
合约代码 合约代码
程序控制流图 程序控制流图
参照表7所示,在本发明提供的一种优选实施例中,所述分析报告包括:分析参数、最终分析结果、合约代码和程序控制流图;其中,所述分析参数包括数据源和数据使用约束类型信息,所述最终分析结果包括数据如何依赖于污点源和是否通过静态分析的最终分析结果。即,所述最终分析结果包括数据值传递依赖信息和数据控制依赖信息中的任一项,和数据是否通过静态分析的最终分析结果。
其中,分析参数和分析结果是分析报告的主体部分。所述分析报告可以导出为文件,如PDF格式的文档。
在控制流图的遍历中,由于参与静态分析的当前基本块可能同其他基本块一起作为某一基本块的后续块,因此,需要在一次遍历中整合所有后续区块的分析结果纳入最后的分析结果。
图10示出了本发明实施例提供的一种BFS遍历流程图,用于在一次遍历中整合所有后续区块的分析结果纳入最后的分析结果。
参照图10所示,在本发明提供的一种优选实施例中,基于图的广度优先遍历算法(BFS),采用分层遍历的方式,把所述控制流图中当前基本块的所有后续基本块的分析结果进行分析整合,放入所述最终分析结果的集合。
表8示出了本发明实施例提供的一种BFS遍历代码。
表8
Figure BDA0002630410820000181
参照图10和表8所示,本发明实施例提供了一种BFS遍历流程,具体流程包括:第一步,新建一个空的分析集列表toAnalysis,将起始块B0添加到分析集中;第二步,判断当前分析集是否为空或遍历是否结束,若当前分析集为空或遍历结束,则返回遍历结果,结束遍历,若当前分析集不为空且遍历未结束,则进入第三步;第三步,遍历分析集toAnalysis,获取分析集中的当前块current,并将当前块移出未分析列表;第四步,获取当前块的前续分析结果preResult和后续分析结果sucResult,所述前续分析结果和后续分析结果分别指某个基本块执行前后的整个算法的分析结果;第五步,若前续分析结果为空,或者前续分析结果没有包含后续分析结果,则将后续分析结果放入当前块的执行结果result<B0,sucResult>中,否则回到第三步;第六步,获取当前块的所有后续基本块sucBlocks,若sucBlocks为空,或者遍历结束,则返回第二步,若sucBlocks不为空且遍历未结束,则进入第七步;第七步,遍历后续基本块sucBlocks;第八步,判断某个后续基本块sucBlocks未在未分析列表中,若是则进入第九步,若否则返回第六步;第九步,将该后续基本块添加到未分析列表中,同时添加到分析集中,返回第六步。
本发明实施例提供的BFS遍历流程中,维护了一个“未分析列表”,当分析某基本块后,需将它移出未分析列表。接着判断前续分析结果是否为空,以及前续分析结果有无包含后续分析结果,若前续分析结果为空或前续分析结果集小于后续分析结果集,则说明应以基本块执行后的分析结果为准,将其作为整个算法的分析结果。当前基本块分析完后,则应按照BFS遍历的步骤分析当前基本块的所有后续基本块,将未被分析过的后续基本块添加到分析集列表和未分析列表中,再通过遍历依次分析。
此外,本发明实施例还可以根据所述最终分析结果的集合,生成并返回分析报告。
可以看出,本发明提供的上述方法,预先定义数据依赖类型及其相关计算,基于特定的数据管控策略来定义数据使用约束并进行静态分析,在静态分析中选择相应的数据使用约束,进而进行相应的数据依赖分析方法,最终返回分析报告,本发明实施例基于特定的数据管控策略来定义数据约束并进行静态分析,可以对数据使用约束定义复杂的智能合约代码进行自动化的检查,进而完成面向数据管控的智能合约的自动化审计,在不需要数据所有者亲自对每一笔交易进行审计的前提下,保证面向数据管控的区块链平台上的智能合约的正常运行。
实施例二
图11是本发明提供的一种面向数据管控的智能合约代码检查系统的结构框图。如图11所示,本发明提供的系统可以应用于面向数据管控的区块链平台,具体的系统包括:
算法预设模块201,用于预先定义数据依赖类型和所述数据依赖类型的相关计算,设计基于污点分析的多源多汇的静态分析算法,以用于基于特定的数据管控策略来定义数据使用约束并进行静态分析。
污点源确定模块202,用于针对目标合约文件中的目标合约函数,确定污点源,所述污点源包括:程序输入参数和合约调用指令。
静态分析模块203,用于基于所述静态分析算法,将所述污点源添加到控制流图的起始块执行前的分析结果中,以初始化所述分析结果,通过遍历程序控制流图,选择相应的数据使用约束,进行数据值传递依赖分析和/或数据控制依赖分析,持续地更新执行后的分析结果,最后返回最终分析结果。
分析报告导出模块204,用于根据所述最终分析结果,生成并返回分析报告。
可以看出,本发明提供的上述系统,预先定义数据依赖类型及其相关计算,基于特定的数据管控策略来定义数据使用约束并进行静态分析,在静态分析中选择相应的数据使用约束,进而进行相应的数据依赖分析方法,最终返回分析报告,本发明实施例基于特定的数据管控策略来定义数据约束并进行静态分析,可以对数据使用约束定义复杂的智能合约代码进行自动化的检查,进而完成面向数据管控的智能合约的自动化审计,在不需要数据所有者亲自对每一笔交易进行审计的前提下,保证面向数据管控的区块链平台上的智能合约的正常运行。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本发明所提供的一种面向数据管控的智能合约代码检查方法和一种面向数据管控的智能合约代码检查系统,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (10)

1.一种面向数据管控的智能合约代码检查方法,其特征在于,所述方法包括:
预先定义数据依赖类型和所述数据依赖类型的相关计算,设计基于污点分析的多源多汇的静态分析算法,以用于基于特定的数据管控策略来定义数据使用约束并进行静态分析;
针对目标合约文件中的目标合约函数,确定污点源,所述污点源包括:程序输入参数和合约调用指令;
基于所述静态分析算法,将所述污点源添加到控制流图的起始块执行前的分析结果中,以初始化所述分析结果,通过遍历程序控制流图,选择相应的数据使用约束,进行数据值传递依赖分析和/或数据控制依赖分析,持续地更新执行后的分析结果,最后返回最终分析结果;
根据所述最终分析结果,生成并返回分析报告。
2.根据权利要求1所述的方法,其特征在于,预先定义数据依赖类型和所述数据依赖类型的相关计算,设计基于污点分析的多源多汇的静态分析算法,以用于基于特定的数据管控策略来定义数据使用约束并进行静态分析,包括:
面向数据使用的管控需求,通过对智能合约编译之后的字节码指令进行分析,定义变量之间的数据依赖类型,即,关联类型,包括数据值传递依赖关联和数据控制依赖关联;同时,基于数据类型及其相关计算,给出数据使用约束描述方法。
3.根据权利要求2所述的方法,其特征在于,
所述数据值传递依赖包括:程序变量与数据源之间的包含依赖关系、赋值依赖关系、算数依赖关系和函数依赖关系,表示数据间的显式信息流传播;所述数据控制依赖,包括程序变量与数据源之间的控制依赖关系,表示数据间的隐式信息流传播。
4.根据权利要求1所述的方法,其特征在于,针对目标合约文件中的目标合约函数,确定污点源,包括:
将所述程序输入参数直接标记为所述污点源;遍历控制流图中的所有基本块,找出程序中的合约调用指令,进而将所述合约调用指令标记为所述污点源。
5.根据权利要求4所述的方法,其特征在于,遍历控制流图中的所有基本块,找出程序中的合约调用指令,包括:
遍历所有基本块,对于每一个基本块,遍历所有字节码指令,若某条指令类型为“kInstrInvoke”类型,且指令名称包含“dyn:call:executeContract”,表示为动态函数调用指令,且函数名称为“executeContract”,即为合约调用指令。
6.根据权利要求1所述的方法,其特征在于,所述数据值传递依赖分析,包括:
将所述控制流图的起始块添加到分析的工作集中,以初始化所述工作集;遍历所述控制流图,取出每一个所述控制流图的节点,判断所述节点出边是否为空,即,判断当前基本块有无后续块;若有后续块,则根据所述节点的类型,使用相应的依赖分析传递函数,所述污点源根据每个基本块中所包含的指令的依赖类型进行传播,同时将所述节点加入所述工作集;当控制流图遍历完成后,返回所述工作集,结束所述数据值传递依赖分析。
7.根据权利要求1所述的方法,其特征在于,所述数据控制传递分析,包括:
遍历所述控制流图中所有基本块,找出所述控制流图中所有可跳转的基本块,即,分支块;判断所述控制流图中的各个基本块是否依赖于各个分支块。
8.根据权利要求7所述的方法,其特征在于,判断所述控制流图中的各个基本块是否依赖于各个分支块,包括:
通过三重遍历循环,遍历所述控制流图中所有分支块,并获取每个分支块的所有后续块;
遍历所述控制流图中所有基本块,并遍历每个基本块所有的后续块,基于深度优先遍历算法DFS,判断所有的后续块是否可达所述控制流图中的某一基本块,若不可达,则所述某一基本块依赖于当前分支块。
9.根据权利要求8所述的方法,其特征在于,所述分析报告包括:分析参数、最终分析结果、合约代码和程序控制流图;其中,所述分析参数包括数据源和数据使用约束类型信息,所述最终分析结果包括数据如何依赖于污点源和是否通过静态分析的最终分析结果。
10.一种面向数据管控的智能合约代码检查系统,其特征在于,所述系统包括:
算法预设模块,用于预先定义数据依赖类型和所述数据依赖类型的相关计算,设计基于污点分析的多源多汇的静态分析算法,以用于基于特定的数据管控策略来定义数据使用约束并进行静态分析;
污点源确定模块,用于针对目标合约文件中的目标合约函数,确定污点源,所述污点源包括:程序输入参数和合约调用指令;
静态分析模块,用于基于所述静态分析算法,将所述污点源添加到控制流图的起始块执行前的分析结果中,以初始化所述分析结果,通过遍历程序控制流图,选择相应的数据使用约束,进行数据值传递依赖分析和/或数据控制依赖分析,持续地更新执行后的分析结果,最后返回最终分析结果;
分析报告导出模块,用于根据所述最终分析结果,生成并返回分析报告。
CN202010809496.2A 2020-08-12 2020-08-12 一种面向数据管控的智能合约代码检查方法和系统 Pending CN112115472A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010809496.2A CN112115472A (zh) 2020-08-12 2020-08-12 一种面向数据管控的智能合约代码检查方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010809496.2A CN112115472A (zh) 2020-08-12 2020-08-12 一种面向数据管控的智能合约代码检查方法和系统

Publications (1)

Publication Number Publication Date
CN112115472A true CN112115472A (zh) 2020-12-22

Family

ID=73805238

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010809496.2A Pending CN112115472A (zh) 2020-08-12 2020-08-12 一种面向数据管控的智能合约代码检查方法和系统

Country Status (1)

Country Link
CN (1) CN112115472A (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113051574A (zh) * 2021-03-11 2021-06-29 哈尔滨工程大学 一种智能合约二进制代码的漏洞检测方法
CN113268732A (zh) * 2021-04-19 2021-08-17 中国人民解放军战略支援部队信息工程大学 Solidity智能合约相似性检测方法及系统
CN113609481A (zh) * 2021-06-02 2021-11-05 西安四叶草信息技术有限公司 基于字节码的php污点分析方法及装置
WO2023274398A1 (zh) * 2021-07-01 2023-01-05 支付宝(杭州)信息技术有限公司 智能合约的安全检测方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106203113A (zh) * 2016-07-08 2016-12-07 西安电子科技大学 安卓应用文件的隐私泄露监控方法
CN109933988A (zh) * 2019-01-29 2019-06-25 广东工业大学 一种Android应用隐私泄露漏洞检测方法
CN110866255A (zh) * 2019-11-07 2020-03-06 博雅正链(北京)科技有限公司 一种智能合约漏洞检测方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106203113A (zh) * 2016-07-08 2016-12-07 西安电子科技大学 安卓应用文件的隐私泄露监控方法
CN109933988A (zh) * 2019-01-29 2019-06-25 广东工业大学 一种Android应用隐私泄露漏洞检测方法
CN110866255A (zh) * 2019-11-07 2020-03-06 博雅正链(北京)科技有限公司 一种智能合约漏洞检测方法

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113051574A (zh) * 2021-03-11 2021-06-29 哈尔滨工程大学 一种智能合约二进制代码的漏洞检测方法
CN113268732A (zh) * 2021-04-19 2021-08-17 中国人民解放军战略支援部队信息工程大学 Solidity智能合约相似性检测方法及系统
CN113268732B (zh) * 2021-04-19 2022-12-20 中国人民解放军战略支援部队信息工程大学 Solidity智能合约相似性检测方法及系统
CN113609481A (zh) * 2021-06-02 2021-11-05 西安四叶草信息技术有限公司 基于字节码的php污点分析方法及装置
CN113609481B (zh) * 2021-06-02 2024-01-30 西安四叶草信息技术有限公司 基于字节码的php污点分析方法及装置
WO2023274398A1 (zh) * 2021-07-01 2023-01-05 支付宝(杭州)信息技术有限公司 智能合约的安全检测方法及装置

Similar Documents

Publication Publication Date Title
CN112100054B (zh) 一种面向数据管控的程序静态分析方法和系统
Tikhomirov et al. Smartcheck: Static analysis of ethereum smart contracts
Chen et al. Under-optimized smart contracts devour your money
CN112115472A (zh) 一种面向数据管控的智能合约代码检查方法和系统
Sen et al. Multise: Multi-path symbolic execution using value summaries
CN108614960B (zh) 一种基于前端字节码技术的JavaScript虚拟化保护方法
Tate et al. Equality saturation: a new approach to optimization
Chatterjee et al. The treewidth of smart contracts
CN111488579B (zh) 漏洞检测方法、装置、电子设备和计算机可读存储介质
Kim et al. DAPP: automatic detection and analysis of prototype pollution vulnerability in Node. js modules
Gaitani et al. Automated refactoring to the null object design pattern
Adjé et al. Fast and efficient bit-level precision tuning
Ko et al. Weakly sensitive analysis for JavaScript object‐manipulating programs
van Merriënboer et al. Tangent: Automatic differentiation using source code transformation in Python
US11288108B2 (en) Automatic out-of-bound access prevention in GPU kernels executed in a managed environment
US20170075961A1 (en) Irreducible modules
Sharma et al. Sound bit-precise numerical domains
Hung et al. Support of probabilistic pointer analysis in the SSA form
CN115794109A (zh) 源代码编译方法、密文计算指令码执行方法及装置
Shu et al. Extending UML for model checking
Semenov et al. Obfuscated Code Quality Measurement
Kaur et al. Gas Fee Reduction by Detecting Loop Fusible Patterns in Ethereum Smart Contract
Ehmes et al. Graph-Based Specification and Automated Construction of ILP Problems
Bhayat et al. Lemmaless induction in trace logic
Shu et al. A visual modeling language for MSVL

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination