Page 200 - 《软件学报》2026年第6期
P. 200
陈永威 等: 基于异质图匹配网络的恶意软件相似性度量方法 2519
4 实验分析
4.1 实验设置
4.1.1 数据集
绿盟企业数据集: 数据集来自绿盟科技提供的 2012–2021 年间捕获的 2 620 个恶意软件. 利用 VirusTotal 来判
断样本是否为恶意软件, VirusTotal 整合了 70 多种防病毒引擎来检测样本, 为避免少数几个引擎的误报, 本文参考
文献 [25] 将报毒引擎数小于 5 个的样本视为良性样本, 不参与相似性的计算, 将报毒引擎数大于等于 5 个的样本
标记为恶意样本, 恶意样本家族标签通过 VirusTotal 结合恶意样本家族标记工具 AVclass2 [26] 获得. 筛除良性样本,
最后共 2 500 个恶意软件 (样本 md5 和 HGMSim 源码: https://gitee.com/yt_mm/hgmsim-code) 进行实验, 包含 155
种恶意软件家族.
BODMAS 数据集 [27] : 由 Blue Hexagon 发布的包含时间戳和精心策划家族信息的恶意软件数据集, 其采集于
2019 年 8 月–2020 年 9 月, 共包含 57 293 个恶意软件样本, 累计 581 个家族. 不同家族样本数量差异较大, 本文只
选择恶意软件数量大于 10 的家族, 同时每个家族最多选择 100 个恶意软件, 最后共 9 802 个恶意软件进行实验, 包
含 196 个家族.
利用家族标记获得样本对间的相似性关系, 将同家族样本相似度标记为相似, 不同家族样本相似度标记为不
相似. 随机将 70% 样本作为训练请求图, 15% 样本作为测试请求图, 15% 样本作为验证请求图. 对于每个训练请求
′ g 构成负样本对, 绿盟企业数据集共生成
′′
图 g i , 随机从训练请求图选取一个相似图 g 构成正样本对和一个不相似图
i i
3 500 个样本对作为训练集. 验证集和测试集同理. BODMAS 数据集共生成 13 722 个样本对作为训练集, 验证集和
测试集同理.
4.1.2 基线模型
将所提 HGMSim 方法与基于程序序列、基于程序图、基于异质图和基于跨图交互等的相似性度量方法进行
对比.
[6]
TLSH : 广泛使用的基于局部敏感 hash 的相似性度量算法, 该方法使用局部敏感 hash 作为二进制样本的签
名, 利用 hash 值之间的相似值来衡量两个样本间的相似程度. 数据预处理: 直接使用原始二进制恶意软件. 通过
Python 的 TLSH 库实现该方法.
[8]
Siamese_CNNs : 基于恶意软件灰度图的二进制恶意软件相似性度量算法, 该方法将恶意样本转换成灰度图,
利用 CNN 获得恶意样本图片的表示, 通过 Siamese 架构结合全连接层得到样本对的相似值. 数据预处理: 将二进
制恶意软件转换成 8 位向量图像, 同时使用双边插值法将向量图像转换成 105×105 的灰度图. 实现的模型结构和
原论文保持一致.
Siamese_GNN [17] : 基于图神经网络的恶意软件相似性度量算法, 使用 Asm2Vec [28] 模型获得样本函数调用图中
各个函数节点的特征向量, 然后使用设计的 GNN 获得恶意样本嵌入, 利用嵌入间相似值来衡量样本间的相似值.
数据预处理: 反汇编恶意软件获得其函数间控制流图, 获得恶意软件的函数调用图和各函数中的汇编指令, 利用生
成的 180 万个函数汇编指令, 训练 asm2vec-pytorch (https://github.com/oalieno/asm2vec-pytorch) 提供的 Asm2Vec
模型, 用于函数调用图中节点特征向量的计算. 实现的模型结构和原论文保持一致.
RGCN [18] : 异质图领域的经典模型, 该方法扩展了 GCN 的信息传递框架. 引入关系类型权重来区分异质图中
不同类型的节点, 从而更好地捕获异质图中的结构信息. 数据预处理: 反汇编样本获得函数调用图, 统计指令统计
信息作为图节点的特征向量, 实现的模型结构和原论文保持一致.
MGMN [22] : 跨图交互领域最新的模型, 该方法考虑跨层交互 (如点-图) 中丰富的信息, 提出多层图匹配网络
(MGMN) 框架, 用于端到端计算任意一对图结构对象之间的图相似度. 数据预处理: 反汇编样本获得函数调用图,
统计指令统计信息作为图节点的特征向量. 使用 MGMN 源码 (https://github.com/ryderling/MGMN) 进行实验.
4.1.3 超参数设置
基线模型的超参数设置尽可能与原论文保持一致, HGMSim 的超参数选择参考 Gemini [13] , 具体数值由调参

