Page 454 - 《软件学报》2026年第3期
P. 454

宁小勇 等: 融合   TextCNN  和对抗训练的以太坊庞氏骗局检测模型                                          1417


                 合约的操作码中提取行为序列作为数据集, 以保留操作码的行为信息和语义信息, 并将其划分为训练集、验证集
                 和测试集. 采用    Word2Vec 模型对行为序列进行训练, 得到包含词语关联信息的词向量矩阵. 然后在词向量中加入
                 扰动生成对抗样本, 再将对抗样本与原始样本结合用于联合训练                     TextCNN  模型, 以模拟对模型的对抗攻击, 从而
                 增强模型的鲁棒性. 最后, 采用测试集来验证模型的有效性, 主要通过测量其性能指标                         (如  Recall 和  F1  分数) 来评
                 估. 综上, 该方法使用包含丰富操作码结构与语义信息的行为序列作为数据集, 再引入对抗训练防御对抗攻击, 在
                 一定程度上提高了模型在检测庞氏骗局时的有效性和鲁棒性.

                       数据收集与预处理
                                           提取操作码行为序列               行为序列
                          Etherscan                                 操作码1          Word2Vec词向量化
                                              划分基本块
                                     操作                   得到行为                               W(t−2)
                                    码文件      构建控制流图         序列      操作码2                     W(t−1)
                          Bytecode                                   …          W(t)  Projection  …
                                                …
                                                 …                                           W(t+1)
                           反汇编                                     操作码n−1
                                             深度优先遍历                                          W(t+2)
                                                                    操作码n
                           opcode
                                                                              对抗训练
                                                                            扰动因子
                                         TextCNN模型训练                          γ
                                                                                    Vector 1
                                                                         +
                         庞氏骗局
                                                                              γ
                                     结果                                  +           Vector 2
                                                                              γ       …
                        非庞氏骗局                                             +         Vector n−1
                                                                              γ
                                                                                     Vector n
                                                                          +
                                      图 2 融合   TextCNN  和对抗训练的庞氏骗局检测模型框架

                  3.1   智能合约行为序列提取算法
                    智能合约是一个在以太坊虚拟机            (Ethereum virtual machine, EVM) 上运行的特殊程序, 包含了丰富的语义和
                 结构信息. 在文献     [33] 的启发下, 我们采用操作码来捕获智能合约的行为特征. 操作码是字节码的存储形式, 操作
                 码所对应的操作类型是固定的. 目前的庞氏骗局检测机制将智能合约操作码当作文本序列进行研究, 包括计算操
                 作码的频率特征和语序特征等, 但却忽略了操作码本身的行为特性. 智能合约的特性让庞氏骗局源代码能够直接
                 反映出其回报逻辑, 但源代码有可能通过其他手段掩盖其真实的行为. 相比之下, 操作码作为底层的执行指令, 直
                 接决定了智能合约的运行过程, 不受其他中间环节的干扰, 确保合约行为的真实性. 因此, 可以通过分析操作码直
                 观的了解合约的执行逻辑、数据处理方式以及条件判断的过程.
                    为了充分保留智能合约的结构和行为信息, 基于操作码的特性提出了行为序列提取算法如算法                                 1  所示, 通过
                 分析智能合约操作码以构建智能合约操作码的控制流图, 并在控制流图的基础上提取行为序列, 从而保留丰富的
                 智能合约结构和行为信息.
                    算法  1  主要分为   3  个阶段: 基本块划分阶段、控制流图构建和提取操作码行为序列时的遍历阶段. 在第                         1  阶
                 段, 根据控制流相关的操作码, 将原始操作码序列分成多个基本块. JUMP                    和  JUMPI 是改变控制流的条件跳转操
                 作码, 而  RETURN、STOP、INVALID、SELFDESTRUCT       和  REVERT  是停止执行操作码, 它们都作为基本块的
                 最后一条指令. 此外, JUMPDEST      作为基本块中的第       1  条指令, 标志着跳跃目标的有效地址. 在第           2  阶段, 当处理
                 基本块时, 如果    JUMP  和  JUMPI 指令的目标地址被指向以        JUMPDEST  开始的基本块, 在两个基本块之间添加跳
   449   450   451   452   453   454   455   456   457   458   459