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 的调用图优化

