Page 297 - 《软件学报》2025年第7期
P. 297

3218                                                       软件学报  2025  年第  36  卷第  7  期


                    如图  3(a) 所示, 未知函数节点在函数调用图中占大部分, 严重影响了                 API 上下文信息的提取. 调用图优化删
                 除了图中所有难以识别的未知函数节点, 同时保留                API 节点之间的连接性, 使检测方法能提取到更多更准确反映
                 软件行为逻辑的      API 上下文信息.
                    恶意软件    de.android_telefonie.super.appmanager(md5:79a58748d8e346af229c60a6ed529ab8) 的函数调用图和优
                 化后的调用图如图       4  所示.

















                                    (a) 函数调用图                            (b) 优化后的调用图
                                  图 4 恶意软件     de.android_telefonie.super.appmanager 的调用图优化

                    函数调用图中大量       API 节点的前驱节点是未知函数节点, 即软件的大部分                API 由未知函数调用. 这说明软件
                 中实现系统功能的敏感        API, 其局部上下文信息大多都是检测过程中难以识别的未知方法, 这给提取软件的行为
                 特征造成严重困难. 本文提出的调用图优化方法在保留图中                    API 节点连接性的同时, 删除图中所有的未知函数节
                 点. 优化后的调用图增加了许多反映软件行为逻辑的                  API 调用对, 这些新增的     API 调用对大多与线程活动相关,
                 而恶意软件常常伪装成良性软件, 通过多线程活动实施恶意行为. 这说明调用图优化能使检测方法提取到更多用
                 于区分软件类别的关键特征.

                 5   恶意软件检测

                    本文提出一种能有效检测观念迁移样本的安卓恶意软件检测方法. 该方法属于静态检测方法, 使用软件的
                 API 上下文信息作为特征. 恶意软件检测过程如图              5  所示.


                               调用图提取                 调用对提取             特征嵌入
                                                                        独热编码           RF
                                                                                      SVM
                                                                       主成分分析
                                                                                      KNN
                                           调用图优化            调用图抽象                   分类器检测

                                                   图 5 恶意软件检测过程

                    恶意软件检测的具体过程如下.
                    (1) 调用图提取: 使用静态分析工具         FlowDroid [31] 从软件样本集的  APK  文件中提取函数调用图.
                    (2) 调用图优化: 对函数调用图进行优化, 删除图中无法识别的未知函数节点并保留                         API 节点之间的连接性,
                 生成优化后的函数调用图.
                    (3) 调用对提取: 从优化后的调用图中提取函数调用对, 调用对包括调用函数和被调用函数.
                    (4) 调用对抽象: 对函数调用对中的节点进行抽象, 将调用对中的                  API 抽象为   API 聚类部分获得的     API 聚类
   292   293   294   295   296   297   298   299   300   301   302