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

杨宏宇 等: 基于   API 聚类和调用图优化的安卓恶意软件检测                                               3217



                 算法  3. 调用图优化算法.

                 输入: CG(V, E): 函数调用图, AODs: 安卓官方文档;
                 输出: CG opt (V opt , E opt ): 优化后的调用图.

                 1. for each node n in V do:
                 2.   if n is entry function then:
                 3.     continue
                 4.   end if
                 5.   if n in AODs or n.class in AODs then:
                 6.     continue
                 7.   end if
                 8.   collect predecessor nodes of n as callers
                 9.   collect successor nodes of n as callees
                 10.    for each node start in callers do:
                 11.      for each node end in callees do:
                 12.       add edge (start, end) to CG
                 13.      end for
                 14.    end for
                 15.    remove node n from CG
                 16. end for
                 17. return CG
                    通过调用图优化, 在保留图中关键节点整体连接性的同时, 删除图中无法识别的未知函数节点. 优化后的调用
                 图只存在   3  类函数: 入口函数、API 和其他函数, 这        3  类函数之间的调用关系能更准确地反映软件的行为逻辑, 可
                 用于后续   API 调用的上下文信息提取.

                 4.3   调用图优化示例
                    良性软件    app.eazi.ease126(md5:2149914d3284d4d0561f9d80dc1a d186) 的函数调用图和优化后的调用图如图   3
                 所示. 图  3  中, 绿色节点为入口函数, 灰色节点为未知函数, 深蓝色节点为                API, 淡蓝色节点为其他函数. 函数调用
                 图中, 所有的边用黑色表示, 优化后的调用图中新增的                API 调用对用红色边表示. 这些调用对在函数调用图中至少
                 存在一条全部由未知函数节点组成的路径.

















                                     (a) 函数调用图                            (b) 优化后的调用图
                                           图 3 良性软件    app.eazi.ease126  的调用图优化
   291   292   293   294   295   296   297   298   299   300   301