Page 283 - 《软件学报》2026年第4期
P. 283

1724                                                       软件学报  2026  年第  37  卷第  4  期


                  2.3.2    基于循环神经网络的   API 调用序列特征学习方法

                    同样地, 为了充分地学习待测安卓软件            z 在  API 调用序列特征   x z api  上的深层语义信息, 本文采用自然语言处理
                 领域中处理序列数据最常用的循环神经网络来学习                  API 调用序列特征向量      ⃗ . 特别地, 作为一种特殊且应用范围
                                                                            api
                                                                           h z
                 最广的循环神经网络, 长短期记忆网络            (LSTM) 能够在一定程度上缓解传统循环神经网络处理长序列数据时存在
                 的梯度消失和梯度爆炸问题, 例如, 长文本处理等             [63] . 因此, 由于第  2.2.2 节中所提取的  API 调用序列一般比较长     (大
                 约  3 500), 属于长序列数据, 本文因而采用      LSTM  来学习相应的     API 调用序列特征向量      ⃗ .
                                                                                     api
                                                                                    h z
                    具体而言, 首先, 如公式      (3) 所示, 根据安卓操作系统中所有常用的           API 调用的函数名称构建相应的         API 调用
                     Vocab api , 并利用该                      z 的               api  进行独热编码  (one-hot encoding),
                 词典                API 调用词典将待测安卓软件            API 调用序列特征    x z
                                                   api
                 从而得到初始化的       API 调用序列特征向量      ¯ x z .

                                                                 api
                                               ¯ x api  = OneHotEncoding(x ,Vocab api )               (3)
                                                z                z
                                                             api
                                                   ⃗ api  = LSTM(¯ x ) [−1,...] ∈ R d                 (4)
                                                   h
                                                             z
                                                    z
                    接着, 如公式    (4) 所示, 将初始化的    API 调用序列特征向量      ¯ x z api  输入到相应的  LSTM  网络中, 从而学习到每个
                 时间步的隐向量. 特别地, 为了保证最终的            API 调用序列特征向量      ⃗ h z api  的特征维度与灰度图特征向量  ⃗ h z img  的特征维
                                                                                        api
                 度一致, 本文将    LSTM  网络中隐向量维度设置为        d, 并且将最后一个时间步的隐向量           LSTM(¯ x z ) [−1,...]  作为最终学习
                 得到的   API 调用序列特征向量      ⃗ h z ∈ R .
                                          api
                                              d
                  2.3.3    基于图神经网络的控制流图特征学习方法
                    近年来, 随着深度神经网络的不断发展, 图神经网络已经被证明可以成功地应用于各类需要处理图数据的相
                 关任务中, 包括节点分类、图分类、图相似性计算等任务                  [64] . 为了学习待测安卓软件    z 的控制流图模态特征       x z cfg  的
                 深层语义信息, 本文首先利用图神经网络             GraphSAGE [65] 来逐层学习控制流图中每个节点丰富的特征表示, 即控制
                 流图中每个节点的特征向量. 特别地, 假设            GraphSAGE  网络的层数是    T , 那么对控制流图中任意一个节点          v i  而言,
                   t ∈ [1,T] 层  GraphSAGE                   h . 具体而言, 如公式             t 层  GraphSAGE  网络会
                                                            (t)
                 第                    网络生成的特征向量表示为                           (5) 所示, 第
                                                            v i
                 分别通过节点自传递函数         f node  和邻居消息传递函数   f neighbor  从上一层中该节点  v i  本身的特征向量  h (t−1)  和所有邻居
                                                                                             v i
                                                                                (t)
                 节点的特征向量      {h (t−1)  ,u ∈ N(v i )} 来共同学习和更新本层中该节点的特征向量, 即   h .
                               u                                                v i
                                                                                       
                                            ∑                        1   ∑           
                               (t)
                                   
                                                          ) = σW
                              h = σ f node (h (t−1) )+  f neighbor (h (t−1)       (t−1)  ·h (t−1)  +  W (t−1) ·h (t−1)    (5)
                                   
                               v i     v i           u        1  v i  |N(v i )|  2  u   
                                             u∈N (v i )                       u∈N (v i )
                                                                           ;
                 其中,   σ 表示任意一个激活函数, 例如线性整流激活函数             ReLU(x) = max(0, x) N(v i ) 代表控制流图中节点  v i  的所有
                 邻居节点的集合;      W  (t 1 −1)   和  W  (t 1 −1)   分别是自传递函数   f node  和邻居消息传递函数   f neighbor  的模型参数. 特别地, 第  0  层
                                1      2
                 每个节点的特征向量       h (0)  是在第  2.2.3  节中提取控制流图并初始化每个基本块节点而得到的.
                                  v i
                    在总共经过     T  层  GraphSAGE  网络之后, 对待测安卓软件    z 的控制流图而言, 可以学习到控制流图中所有节点
                                       cfg
                                    (T) i=n z  cfg             z 的控制流图中所有节点的数量. 紧接着, 为了学习针
                 的特征向量的集合, 即      {h }   , 其中  n z   代表待测安卓软件
                                    v i  i=1
                              z 所提取控制流图的全局图向量, 如公式            (6) 所示, 采用一种基于最大池化操作的图聚合模型, 并
                 对待测安卓软件
                 在最大池化操作的前面增加一层全连接网络来增加全局图聚合模型的学习能力.

                                                           (   (      ))
                                                                     cfg
                                              ⃗ cfg  = MaxPooling FC {h }  ∈ R d                      (6)
                                                                 (T) i=n z
                                              h
                                               z                 v i  i=1
                 其中,   MaxPooling 和   FC  分别表示最大池化操作和一层全连接网络. 为了保证所学习的控制流图特征向量                    ⃗ h z cfg  的维
                                              api
                 度与其他两种模态特征向量           ⃗ (  h z img   和  ⃗ ) 的维度一致, 本文将全连接网络   FC(·) 的输出维度设置为  d, 最终学习得
                                             h z
                                   ⃗  cfg      d
                 到的控制流图特征向量        h z   的维度为  R .
                  2.4   基于鲁棒融合学习的恶意软件鲁棒检测
                                   z, 本文中安卓恶意软件鲁棒检测任务的目标是, 不仅需要准确地识别善意软件和一般性恶
                    给定待测安卓软件
                 意软件, 而且需要准确地识别攻击者生成的对抗性恶意软件, 即准确地预测                          z  是否为恶意软件     y z ∈ {0,1}, 其中
   278   279   280   281   282   283   284   285   286   287   288