System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本申请涉及陷阱检测,更具体地说,涉及一种智能合约代码陷阱识别方法、装置及设备。
技术介绍
1、智能合约是区块链技术的一种应用方式,是互不信任的参数者之间的计算机协议,是无需信任且可自执行的程序,在金融行业有着广泛应用。但不少欺诈者利用智能合约的不可篡改性及账户匿名性,在智能合约中设置去中心化合约陷阱,给不少用户造成巨大的经济损失。其中,去中心化合约陷阱(decentralized contract traps,dct),指的是在去中心化金融(defi)智能合约中,不道德的开发者可能会插入的一些代码片段,这些代码片段允许合约的所有者通过不正当手段从不知情的合约用户那里获取不公平的利润。
2、基于此,越来越多的研究者开始关注智能合约的代码陷阱检测问题。现有技术中,研究者从机器学习的角度,采用神经网络模型检测代码陷阱,但神经网络模型的建模过程中,需要不断学习包含有多种代码陷阱的训练集,但智能合约更新频率较快、数据量较多,导致训练集具有一定的滞后性,神经网络模型难以与时俱进,以至于检测精确度较低。
技术实现思路
1、有鉴于此,本申请提供了一种智能合约代码陷阱识别方法、装置及设备,用于解决现有技术中检测精确度较低的缺点。
2、为了实现上述目的,现提出的方案如下:
3、一种智能合约代码陷阱识别方法,包括:
4、获取待测智能合约的合约源码文件、创建字节码creation opcode及运行字节码runtime opcode;
5、对所述
6、对所述runtime opcode进行符号执行,生成所述待测智能合约的控制流图cfg及合约指令;
7、解析所述合约源码文件,构建抽象语法树ast;
8、基于所述存储槽、所述合约权限所有者、所述cfg、所述合约指令及所述ast,检测所述待测智能合约中是否存在合约陷阱dct。
9、可选的,获取待测智能合约的creation opcode及runtime opcode,包括:
10、将所述待测智能合约的合约源码文件编译为字节码,并将所述字节码反汇编为操作码;
11、将所述操作码分割为creation opcode及runtime opcode。
12、可选的,所述基于所述存储槽、所述合约权限所有者、所述cfg、所述合约指令及所述ast,检测所述待测智能合约中是否存在合约陷阱dct,包括:
13、基于所述存储槽及所述合约指令,检测所述待测智能合约中是否存在虚假转账陷阱ts;
14、基于所述存储槽、所述合约权限所有者、所述cfg及所述合约指令,检测所述待测智能合约中是否存在存储变化权限陷阱ssp;
15、基于所述存储槽、所述合约权限所有者、所述cfg及所述合约指令,检测所述待测智能合约中是否存在超级转账权限陷阱stp;
16、基于所述存储槽、所述合约权限所有者、所述cfg及所述合约指令,检测所述待测智能合约中是否存在自毁权限陷阱sp;
17、基于所述ast,检测所述待测智能合约中是否存在伪造转账陷阱ft。
18、可选的,所述基于所述存储槽及所述合约指令,检测所述待测智能合约中是否存在虚假转账陷阱ts,包括:
19、分析所述合约指令,确定所述待测智能合约是否存在转账行为;
20、若存在转账行为,则分析所述合约指令,判断所述待测智能合约是否存在检测转账结果的行为;
21、若不存在检测转账结果的行为,则分析所述存储槽及所述合约指令,确定所述待测智能合约是否存在修订内存余额的行为;
22、若存在修订内存余额的行为,则确定所述待测智能合约中存在虚假转账陷阱ts。
23、可选的,所述基于所述存储槽、所述合约权限所有者、所述cfg及所述合约指令,检测所述待测智能合约中是否存在存储变化权限陷阱ssp,包括:
24、基于所述cfg、所述合约权限所有者及所述合约指令,确定所述合约指令中是否存在获取合约权限所有者地址的行为以及获取合约调用者地址的行为;
25、若存在获取合约权限所有者地址及合约调用者地址的行为,则基于所述cfg,确定所述合约指令中是否存在评估所述合约权限所有者地址及所述合约调用者地址相似性的行为;
26、若存在评估相似性的行为,则分析所述cfg及所述存储槽,判断所述待测智能合约是否存在修订所述存储槽中存储变量的行为;
27、若存在修订存储变量的行为,则确定所述待测智能合约中存在存储变化权限陷阱ssp。
28、可选的,所述基于所述存储槽、所述合约权限所有者、所述cfg及所述合约指令,检测所述待测智能合约中是否存在超级转账权限陷阱stp,包括:
29、基于所述cfg、所述合约权限所有者及所述合约指令,确定所述合约指令中是否存在获取合约权限所有者地址的行为以及获取合约调用者地址的行为;
30、若存在获取合约权限所有者地址及合约调用者地址的行为,则基于所述cfg,确定所述合约指令中是否存在评估所述合约权限所有者地址及所述合约调用者地址相似性的行为;
31、若存在评估相似性的行为,则分析所述cfg及所述存储槽,判断所述待测智能合约是否存在转账行为;
32、若存在转账行为,则确定所述待测智能合约中存在超级转账权限陷阱stp。
33、可选的,所述基于所述存储槽、所述合约权限所有者、所述cfg及所述合约指令,检测所述待测智能合约中是否存在自毁权限陷阱sp,包括:
34、基于所述cfg、所述合约权限所有者及所述合约指令,确定所述合约指令中是否存在获取合约权限所有者地址的行为以及获取合约调用者地址的行为;
35、若存在获取合约权限所有者地址及合约调用者地址的行为,则基于所述cfg,确定所述合约指令中是否存在评估所述合约权限所有者地址及所述合约调用者地址相似性的行为;
36、若存在评估相似性的行为,则分析所述cfg及所述存储槽,判断所述待测智能合约是否存在自毁行为;
37、若存在自毁行为,则确定所述待测智能合约中存在自毁权限陷阱sp。
38、可选的,所述基于所述ast,检测所述待测智能合约中是否存在伪造转账陷阱ft,包括:
39、对所述ast进行广度优先算法递归遍历,确定所述待测智能合约的所有依赖关系;
40、基于各个依赖关系,构建合约调用图ccg;
41、解析所述ccg,判断所述待测智能合约中是否存在用于转账的孤立子合约;
42、若存在,则确定所述待测智能合约中存在伪造转账陷阱ft。
43、一种智能合约代码陷阱识别装置,包括:
44、获取模块,用于获取待测智能合约的合约源码文件、创建字节码creation opco本文档来自技高网...
【技术保护点】
1.一种智能合约代码陷阱识别方法,其特征在于,包括:
2.根据权利要求1所述的智能合约代码陷阱识别方法,其特征在于,获取待测智能合约的creation Opcode及runtime Opcode,包括:
3.根据权利要求1所述的智能合约代码陷阱识别方法,其特征在于,所述基于所述存储槽、所述合约权限所有者、所述CFG、所述合约指令及所述AST,检测所述待测智能合约中是否存在合约陷阱DCT,包括:
4.根据权利要求3所述的智能合约代码陷阱识别方法,其特征在于,所述基于所述存储槽及所述合约指令,检测所述待测智能合约中是否存在虚假转账陷阱TS,包括:
5.根据权利要求3所述的智能合约代码陷阱识别方法,其特征在于,所述基于所述存储槽、所述合约权限所有者、所述CFG及所述合约指令,检测所述待测智能合约中是否存在存储变化权限陷阱SSP,包括:
6.根据权利要求3所述的智能合约代码陷阱识别方法,其特征在于,所述基于所述存储槽、所述合约权限所有者、所述CFG及所述合约指令,检测所述待测智能合约中是否存在超级转账权限陷阱STP,包括:
>7.根据权利要求3所述的智能合约代码陷阱识别方法,其特征在于,所述基于所述存储槽、所述合约权限所有者、所述CFG及所述合约指令,检测所述待测智能合约中是否存在自毁权限陷阱SP,包括:
8.根据权利要求3所述的智能合约代码陷阱识别方法,其特征在于,所述基于所述AST,检测所述待测智能合约中是否存在伪造转账陷阱FT,包括:
9.一种智能合约代码陷阱识别装置,其特征在于,包括:
10.一种智能合约代码陷阱识别设备,其特征在于,包括存储器和处理器;
...【技术特征摘要】
1.一种智能合约代码陷阱识别方法,其特征在于,包括:
2.根据权利要求1所述的智能合约代码陷阱识别方法,其特征在于,获取待测智能合约的creation opcode及runtime opcode,包括:
3.根据权利要求1所述的智能合约代码陷阱识别方法,其特征在于,所述基于所述存储槽、所述合约权限所有者、所述cfg、所述合约指令及所述ast,检测所述待测智能合约中是否存在合约陷阱dct,包括:
4.根据权利要求3所述的智能合约代码陷阱识别方法,其特征在于,所述基于所述存储槽及所述合约指令,检测所述待测智能合约中是否存在虚假转账陷阱ts,包括:
5.根据权利要求3所述的智能合约代码陷阱识别方法,其特征在于,所述基于所述存储槽、所述合约权限所有者、所述cfg及所述合约指令,检测所述待测智能...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。