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 开始的基本块, 在两个基本块之间添加跳

