Page 221 - 《软件学报》2025年第10期
P. 221

4618                                                      软件学报  2025  年第  36  卷第  10  期



                                                       可信策略管理中心
                                           策略下发                        审计上传
                         联盟链                              智能合约
                                           拦截监控



                                       合约行为控制           区块链策略
                                                                         控制流图生成
                            共                                                              合
                            识          合约行为度量                                              约
                            节   …                                                       …  创
                            点                                            行为特征提取            建
                                       合约行为判定           行为基准库                              节
                                                                                           点
                                       主动监控机制                               预处理

                                               可信根实体                      可信根实体
                                             共识节点                        合约创建节点


                                            图 2 智能合约行为可信验证机制整体架构

                  3.3   方案实现
                  3.3.1    控制流图生成
                    控制流图生成模块是为了将合约源代码抽象为一种更易于分析和验证的形式, 以便后续模块可以更准确地获
                 取合约的预期行为序列及其规则. 控制流图生成模块的输入是合约源代码, 它描述了合约的逻辑和属性, 输出是合
                 约的控制流图, 它描述了合约的执行过程和状态转换.
                    控制流图    CFG (control flow graph) 使用图形符号来表示源代码, 反映了源代码的结构和功能性质. 控制流图
                 是一个有向图, 包含许多源代码的执行路径. 控制流图包含作为节点的所有基本块, 以及一些表示跳跃的边, 其中
                 基本块是源代码中的会触发系统调用的语句, 跳跃的边表示语句之间的关系. 然而, 有些边在静态分析阶段无法确
                 定, 需要在动态执行过程中构建          [39] . 静态分析利用程序源代码或字节码对代码进行分析而不执行代码, 它通过对
                 代码的语法和结构进行分析, 以推断可能的程序行为. 然而, 静态分析无法获取程序的完整运行时信息, 程序在运
                 行时可能会受到用户输入、外部环境等因素的影响, 这些因素无法在静态分析中完全考虑到. 因此, 静态分析无法
                 确定所有的边, 动态执行过程中边的构建至关重要.
                    控制流图生成模块首先通过静态分析划分合约功能, 确定各功能对应代码块. 以系统调用为节点, 并将节点之
                 间的关系抽象为边. 根据合约内部调用关系和控制结构生成控制流图, 监控合约运行时的系统关键调用序列以及
                 参数信息, 对合约功能模块进行多次触发, 对静态分析得到的控制流图进行优化, 最后将控制流图发送给行为特征
                 提取模块.
                    构造合约控制流图主要分为以下步骤.
                    (1) 扫描合约的源程序, 按照合约的功能需求划分合约功能, 将合约分为初始化函数、调用函数等;
                    (2) 以合约功能中能够触发系统调用的语句为边界, 划分基本块;
                    (3) 根据基本块转移关系构造控制流图, 获取合约运行时的系统调用, 补全不确定的控制转移关系, 构建完整
                 的控制流图;
                    (4) 替换基本块为系统调用, 构建系统调用控制流图.
                    合约的控制流图可以形式化地描述如下.
                      CFG =<V,E>
   216   217   218   219   220   221   222   223   224   225   226