(19)国家知识产权局
(12)发明 专利申请
(10)申请公布号
(43)申请公布日
(21)申请 号 202211247665.3
(22)申请日 2022.10.12
(71)申请人 中山大学
地址 510275 广东省广州市新港西路13 5号
(72)发明人 郑子彬 陈焕泽 郑沛霖
(74)专利代理 机构 北京集佳知识产权代理有限
公司 11227
专利代理师 李伟贤
(51)Int.Cl.
G06F 21/57(2013.01)
G06F 16/27(2019.01)
(54)发明名称
基于符号执行的智能合约漏洞检测方法、 装
置及相关 设备
(57)摘要
本申请公开了一种基于符号执行的智能合
约漏洞检测方法、 装置及相关设备, 该方法包括:
每当执行完一个操作 码, 将此时的状态数据保存
到预设的共享内存中; 基于所述状态数据, 判断
是否需要执行路径分叉; 若是, 获取第一探索分
支和第二探索分支, 并利用原先的进程执行第一
探索分支, 利用一个新的进程执行第二探索分
支; 当所有进程执行完后, 基于保存于所述共享
内存的所有状态数据, 构建全局变量; 基于所述
全局变量, 生成漏洞检测结果。 本申请采用多进
程对路径分支进行并行探索, 提高了符号执行在
智能合约漏洞检测中的执 行效率。
权利要求书2页 说明书13页 附图2页
CN 115455436 A
2022.12.09
CN 115455436 A
1.一种基于符号执 行的智能合约漏洞检测方法, 其特 征在于, 包括:
每当执行完一个操作码, 将此时的状态数据保存到预设的共享内存中;
基于所述状态数据, 判断是否需要执 行路径分叉;
若是, 获取第 一探索分支和第 二探索分支, 并利用原先的进程执行第 一探索分支, 利用
一个新的进程执 行第二探索分支;
当所有进程执行完后, 基于保存于所述共享内存的所有状态数据, 构建全局变量;
基于所述全局变量, 生成漏洞检测结果。
2.根据权利要求1所述的方法, 其特征在于, 所述状态数据包括下一个操作码、 约束集
和当前的合约状态; 基于所述状态数据, 判断是否需要执 行路径分叉的过程, 包括:
判断所述下一个操作码是否包 含在预设的分叉操作码集 合内;
若是, 基于所述下一个操作码和所述 合约状态, 确定第一分支路径和第二分支路径;
基于所述约束集判断所述第一分支路径和所述第二分支路径是否均可达;
若是, 判断当前的进程数是否小于进程阈值, 所述进程阈值用于表示在预设的计算设
备中能够运行的约束求 解进程的最大值;
若是, 确定需要执 行路径分叉。
3.根据权利要求2所述的方法, 其特 征在于, 所述进程阈值的获取 过程, 包括:
基于SMT求解器在所述计算设备的求解性能以及性能丢失值, 确定所述进程阈值; 其
中, 所述求解性能
表示为:
所述性能丢失值
表示为:
其中, NUMSMT为每一进程的约束数量, Δt为各进程执行完预设的约束求解任务所花费
的时间, S PSPP1为仅执行一个进程时的求 解性能。
4.根据权利要求3所述的方法, 其特征在于, 基于SMT求解器在所述计算设备的求解性
能以及性能丢失值, 确定所述进程阈值的过程, 包括:
创建N个进程, 每一进程用于执 行一个预设的约束求 解任务, N 为自然数;
获取所述N个进程执 行完各约束求 解任务所花费的时间Δt1;
基于所述约束求解任务的约束数量NUMSMT和所述时间Δt 1, 计算得到同时运行所述N个
进程时的第一 性能丢失值;
创建N+1个进程, 每一进程用于执 行一个约束求 解任务;
获取所述N+1个进程执 行完各约束求 解任务所花费的时间Δt 2;
基于所述约束求解任务的约束数量NUMSMT和所述时间Δt2, 计算得到同时运行所述N+1
个进程时的第二 性能丢失值;
将N确定为所述进程阈值, 其中, 所述第一性能丢失值大于或等于预设的丢失阈值, 所
述第二性能丢失值小于所述丢失阈值。
5.根据权利要求1所述的方法, 其特征在于, 基于保存于所述共享内存的所有状态数权 利 要 求 书 1/2 页
2
CN 115455436 A
2据, 构建全局变量的过程, 包括:
基于状态数据的数据类型, 将每一条状态数据合并到具有相同数据类型的全局变量
中。
6.根据权利要求5所述的方法, 其特征在于, 所述数据类型包括可累计整数、 不可合并
列表、 可合并列表和/或可合并字典;
基于状态数据的数据类型, 将每一条状态数据合并到具有相同数据类型的全局变量中
的过程, 包括:
若所述状态数据的数据类型为可累计整数, 将所述状态数据累加到全局变量的目标变
量中, 所述 目标变量的数据类型与所述状态数据的数据类型相同, 且所述 目标变量的变量
名与所述状态数据的变量名相同;
若所述状态数据的数据类型为不可合并列表, 将所述状态数据插入至全局变量的目标
变量中, 所述 目标变量的数据类型与所述状态数据的数据类型相同, 且所述 目标变量的变
量名与所述状态数据的变量名相同;
若所述状态数据的数据类型为可合并列表, 且全局变量中不存在与 所述状态数据的数
据类型相同、 且变量名与状态数据的变量名相同的变量, 则将所述状态数据插入至全局变
量中;
若所述状态数据的数据类型为可合并字典, 将所述状态数据更新至全局变量的目标变
量中, 所述 目标变量的数据类型与所述状态数据的数据类型相同, 且所述 目标变量的变量
名与所述状态数据的变量名相同。
7.根据权利要求1所述的方法, 其特征在于, 在获取第一探索分支和第二探索分支之
后, 还包括:
清理第一探索分支不再用到的临时变量, 以及清理第二探索分支不再用到的临时变
量。
8.一种基于符号执 行的智能合约漏洞检测装置, 其特 征在于, 包括:
状态保存单元, 用于每当执行完一个操作码, 将此时的状态数据保存到预设的共享内
存中;
分叉判断单 元, 用于基于所述状态数据, 判断是否需要执 行路径分叉;
路径分叉单元, 用于判断出需要执行路径分叉时, 获取第 一探索分支和第 二探索分支,
并利用原先的进程执 行第一探索分支, 利用一个新的进程执 行第二探索分支;
全局构建单元, 用于当所有进程执行完后, 基于保存于所述共享内存的所有状态数据,
构建全局变量;
漏洞检测单 元, 用于基于所述全局变量, 生成漏洞检测结果。
9.一种基于符号执 行的智能合约漏洞检测设备, 其特 征在于, 包括: 存 储器和处 理器;
所述存储器, 用于存 储程序;
所述处理器, 用于执行所述程序, 实现如权利要求1~7中任一项所述的基于符号执行
的智能合约漏洞检测方法的各个步骤。
10.一种存储介质, 其上存储有计算机程序, 其特征在于, 所述计算机程序被处理器执
行时, 实现如权利要求 1~7中任一项 所述的基于符号执行的智能合约漏洞检测方法的各个
步骤。权 利 要 求 书 2/2 页
3
CN 115455436 A
3
专利 基于符号执行的智能合约漏洞检测方法、装置及相关设备
文档预览
中文文档
18 页
50 下载
1000 浏览
0 评论
309 收藏
3.0分
温馨提示:本文档共18页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
本文档由 人生无常 于 2024-03-18 00:50:19上传分享