101-初稿
1 引言
随着科技的进步,移动设备已经成为人们日常生活中不可或缺的一部分。根据全球移动通信系统协会(GSMA)gsma.com/solutions-and-impact/connectivity-for-good/mobile-economy/wp-content/uploads/2025/04/030325-The-Mobile-Economy-2025.pdf 发布的《2025年移动经济报告》,全球移动互联网的普及速度正在持续加快。2024年年底,全球58%的人口(约47亿人)将接入移动互联网,比2015年增加了22亿人。预计到2030年,全球将新增约8亿移动互联网用户,这将使全球移动互联网用户总数突破55亿,占全球人口的64%。根据statista Volume of detected mobile malware packages Q3 2023 | Statista 从2015年第四季度到2023年第三季度对全球移动设备上检测到的恶意安装包数量的统计数据,虽然在近十年移动恶意软件数量大幅减少,但是从2022年开始,移动恶意软件又在以接近每年20%的速度增加。
恶意软件的泛滥会对用户造成严重的危害,对社会稳定乃至国家安全构成巨大的威胁。随着移动应用程序功能的不断更新迭代,越来越多的恶意软件也开始寻求将其恶意行为隐藏在看似良性的功能中。因此,Android恶意软件检测方法的研究仍然非常重要。
恶意软件检测的大量研究根据其实现思路可以分为三个大类,即静态检测、动态检测和混合检测。对于Android恶意软件检测,大部分研究方法采用静态检测,从APK文件中提取其manifest文件和dex文件,再反编译出源代码,再根据不同的研究思路进一步提取深层次的特征。动态检测通过在物理设备或模拟沙箱中运行应用程序实例,在运行中对各种特征信息进行采集,再进行进一步的分析。混合检测将静态检测和动态检测的特征进行结合分析。在大规模且自动化的安卓应用程序的检测场景下,动态检测通常无法遍历应用程序所有的执行路径导致行为信息丢失,并且检测过程需要消耗大量计算资源。而静态检测不需要运行应用程序,检测效率较高。
常用的静态检测方法有通过经典特征工程,提取代码的权限、意图、api和其他统计数据作为特征进行检测的传统方法;还有采用图神经网络的方法,从源代码中提取图结构数据并使用图神经网络及其变体进行检测;以及提取语义特征的方法,使用基于统计学的方法对代码的潜在语义进行提取,或使用基于transformer架构的预训练模型对语义进行更完整的提取。
随着恶意软件作者广泛采用多态混淆(如反射加载、字符串加密)和权限伪装(如滥用低危权限组合实现高危操作)等对抗技术,传统静态检测方法在以下三方面面临严峻挑战:
- API风险建模的静态性与低判别性。传统方法(文献[6-7])将API风险简化为二元标签(高危/低危)或线性加权,忽略权限组合的协同效应。此外,约72.5%的应用程序包含冗余库代码(如广告SDK),其高频低危API调用(如Gson库的
JsonParser.parse
)会稀释关键节点的风险信号(文献[8])。 - 图结构表征的模态割裂与信息冗余。尽管函数调用图(FCG)被广泛用于表征代码结构,但其局限性在于异构特征未融合和拓扑噪声淹没关键路径,现有研究(文献[9-10])将FCG节点表示为离散函数标识符,未能融合API调用模式与代码语义特征。例如,两个调用链
A→B→C
(含getContacts→encrypt→upload
)与A→B→C
(含log→print→save
)在传统FCG中被等同编码,导致隐私窃取路径被掩盖。大规模应用中,38.7%的边连接模板代码(如Activity生命周期回调),其密集连接性(文献[11])会掩盖高危路径(如MainActivity→RootExploit→MalwareLoader
)。传统GAT模型因无差别聚合邻域信息,对跨组件攻击链的检测精度下降27.4%。 - 图压缩的风险不敏感与强度僵化。现有压缩方法存在两大瓶颈,高危节点误删和压缩强度缺乏自适应性。基于度中心性(文献[12])或随机游走(文献[13])的剪枝策略,会删除低连接度但高风险的异步回调节点(如
installPackage
)。在Drebin数据集测试中,此类方法导致WRITE_SECURE_SETTINGS
相关攻击路径丢失率达39.2%。固定阈值压缩(如保留top 30%节点)无法适配不同规模应用(小型工具类APP节点数≈500,大型社交应用节点数≥10000)。实验表明,当压缩率超过70%时,传统方法对跨组件隐蔽调用链的保留率骤降至48.6%。
针对上述局限性,我们提出了一种基于函数调用图,结合代码的深度语义特征并嵌入一种新的基于API信息的节点风险特征,再使用一种新的兼顾高压缩比和高敏感信息保留率的压缩算法进行图重构的 Risk-Augmented Heterogeneous Program Graph (RAHPG) (风险增强型异构程序图)。深度语义信息采用CodeBERT提取,并使用TextCNN将语义向量融合降维,API信息采用我们自己构建的API敏感度数据库计算9维特征向量再将他们嵌入图中作为节点特征,最后使用带有池化层的GAT网络进行进行检测。
综上所述,本文的主要贡献如下:
- 提出一种敏感API数据库与分层编码方案:通过解析AOSP源码中的注解,建立包含1640个核心API的保护等级映射表。定义9维动态风险特征(如
max_risk
、risk_sum
),量化权限组合的协同效应(见表1) - 提出一种多模态特征融合的异构图:构建以函数调用图为基础框架的RAHPG,融合128维CodeBERT语义向量(基于AST感知分段提取)与9维API风险特征,实现代码结构、语义与权限行为的联合建模。
- 提出一个兼顾高压缩比和敏感信息保留率的动态压缩算法: 基于风险评分保留高危节点,并采用对数衰减的阈值实现自适应压缩。
本文的其余部分安排如下
.....
2 相关工作
随着移动互联网的快速发展和智能手机的广泛应用,安卓(Android)平台上 的恶意软件威胁已成为网络安全领域的重要挑战之一。针对这一问题,学术界和 工业界的研究者们进行了大量的探索和实践,发展出了一系列有效的检测技术和 方法。目前,主流的安卓恶意软件检测技术主要集中在三个核心方向上:基于传 统特征、基于深度学习、基于图形特征分析。其中,深度学习技术的应用逐渐崭 露头角,尤其是图神经网络(GraphConvolutionalNetwork,GCN)的研究与应用 日益凸显,它们将恶意软件的行为模式、API调用关系、控制流图等多种复杂结 构转化为图的形式,并通过图卷积运算捕获节点间的关联特性,有效提升了检测 系统的泛化能力和鲁棒性。这些多元化的研究路径共同推动了安卓恶意软件检测 技术的发展与进步。
(1)基于传统特征的检测方法 大量的研究专注于运用静态分析方法 3 4 来对恶意软件进行检测,其核心在 于选取各类特征集合作为检测模型的输入变量。一个应用程序是否被判定为恶意 软件的准确性,在很大程度上取决于所选用的特征集的质量与适用性。这些研究 通过构建并训练分类器模型,借助不同类型的特征集合,以提升对恶意软件检测 的效能和精确度。初期,研究者采用了一些低层次的原始特征进行恶意软件检测, 例如Aafer等人 [5] 提取的API调用序列,以及对源代码API级别特征(如包名和 类名)进行分析以进行恶意软件检测。Visaggio等人 [6] 深入探讨了安卓软件内部 的Dalvik 字节码,并从中发现操作码的使用频率蕴含着识别恶意软件的有价值信 息。接着采用随机森林分类器进行实验得到了92.6%的分类准确率。Shahriar 等 人 [7] 从 AndroidManifest.xml 文件中提取应用程序所请求的各项权限,并运用适当 的机器学习算法对这些权限特征进行处理和分类,以识别潜在的恶意软件。通过 实验验证,该方法在Android恶意软件检测方面表现出了一定的效能和可行性。 基于单一功能特征的安卓恶意软件检测方法尽管具有计算负载较小、实现简易的 优点,但由于单个功能特征无法完整体现安卓软件的所有复杂属性,因此这类方 法的检测精度往往受限,不易达到较高的水准。因此,Wu [8] 等人提出了名为 DroidMat 的静态特征检测方法,该方法从xml文件中抽取关键静态特征,如应用 程序请求的权限清单、声明的意图动作以及作为API调用入口点的组件等信息。 然后采用多种聚类算法来识别恶意软件的不同行为意图,以提升模型的辨别力。 最终,通过运用KNN(k近邻)算法成功地将应用程序划分为良性与恶意两类。 Colaco 等人 [9] 收集大量的安卓应用程序包构建一个新的数据集,运用Python的 “Glob”库获取APK文件清单,并结合Androguard工具提取多个属性进行进一 步分析(权限、意图接收、意图服务和API调用),最终在恶意软件检测中获得了96.59%的正确准确率。
Li 等人 [10] 提出了SIGPID 的方法是基于检测安卓恶意软件的权限使用。该方 法使用3级的修剪方法来获取权限特征,以此进行特征选择,最终得到22个更为 重要的权限作为特征,然后使用支持向量机分类器作为分类器来检测恶意应用程 序。Alazab 等人 [11] 在他们的研究中构建了一种结合权限请求和API调用的高效分 类模型,以增强对Android恶意软件应用的识别能力。他们创新性地提出了三种 独特的聚合策略,旨在筛选出最具鉴别力的API调用集合。研究团队对此展开了 深度分析,对象涉及各类公共和私有软件包内的类和方法。通过这一系列严谨的 分析过程,旨在验证所提出的检测方法在大规模数据集上运作时的实效性和精确 性。Mahindru [12] 在研究中进一步推进了基于网络的安卓恶意软件检测技术,推出 了名为MLDroid的框架。该框架专为检测恶意软件应用程序而设计,充分利用了 权限请求和API调用这两个关键特征。在MLDroid中,他们不仅局限于单一的学 习范式,而是全面实现了监督学习、无监督学习、半监督学习以及混合机器学习 算法,使得该系统能够适应多样化的训练环境,并提高对恶意软件检测的覆盖率 和准确性
(2)基于深度学习的检测方法 深度学习模型是最近几年恶意检测常用的模型,如Alzaylaee等人 [13] 提出了 一种名为DL-Droid的基于深度学习的Android恶意软件检测方法,其构建了一个 包含多个卷积神经网络(CNN)和循环神经网络(RNN)的深度学习模型,从而 实现对Android 恶意软件的检测和分类。Hemalatha 等人 [14] 提出了一种基于 DenseNet 的深度学习模型,用于Android恶意软件的检测。该模型主要采用了图 像处理和卷积神经网络技术,将Android应用程序的二进制代码转换为图像形式, 并通过DenseNet模型进行特征提取和分类,从而实现对Android恶意软件的检测 和分类。在文献 [15] 中,Vinayakumar 构建了一种基于深度学习的系统,旨在解决 传统恶意软件检测方法在面对复杂和不断演变的恶意软件时可能出现的不足,使 用LSTM模型通过单词嵌入将安卓权限序列提取到特征中,通过多层次的非线性 变换和学习过程,模型可以从复杂的特征数据中自动提取高级语义特征,以识别 潜在的恶意行为模式。Kotian等人 [16] 同样使用了LSTM作为检测模型,他提出了 一种基于LSTM和CNN深度学习模型的恶意软件检测DeepMal模型。这个模型 使用一系列的API调用作为数据。这种混合的CNN-LSTM设计具有多种层,包 括非线性层、卷积层和整个层。
在文献 [17] 中,Sasidharan 构建了名为ProDroid 的安卓恶意软件检测框架, 该框架基于ProfileHidden Markov Model (PHMM)。与传统基于深度学习的检 测系统不同,ProDroid通过建立应用程序行为的概率模型,能够在应用程序执行 的序列数据中发现潜在的恶意行为模式。该方法利用隐藏马尔可夫模型捕获应用程序的行为动态,并提高了对新型和复杂恶意软件的识别能力。Kim等人 [18] 设计 并实现一个能够处理多种类型特征的深度学习框架,通过集成多种特征,包括但 不限于API调用序列、文件结构、元数据及其他相关属性,采用深度学习模型, 能够从多种异构的特征数据中提取高级的语义信息,从而有效地识别潜在的恶意 行为模式。Li等人 [19] 从安卓应用程序的二进制或反编译后的代码中提取了有意义 的特征,然后选择了一个有三层以上的深度学习模型,一个深度神经网络(DNN) 作为检测模型,该模型能够对提取的特征进行多层次的学习和抽象,以捕获隐藏 在复杂数据背后的恶意行为模式。
(3)基于图神经网络的检测方法 在安卓恶意软件检测领域,图神经网络 [20], [21] ,[22] 已经被广泛应用于分类器的设 计中。通过从APK文件中提取有用特征并将其转化为图形结构,图神经网络可以 捕捉到恶意软件的复杂特征,并且在训练过程中可以从这些特征中学习到更加准 确的分类模型。
Zhang 等人 [23] 提出的图卷积网络是一种用于图结构数据的半监督分类模型。 其使用了多层图卷积网络(Multi-LayerGraphConvolutional Networks)对蛋白质 家族进行分类。具体来说,作者将蛋白质序列转化为蛋白质结构图,然后通过多 层图卷积网络提取结构图的特征,并将这些特征输入到全连接层中进行分类。 Wang 等人 [24] 提出了一种基于图卷积网络的方法GDroid,用于检测和分类安卓恶 意软件。该方法将APK文件转化为函数调用图,并使用图卷积网络提取图的局部 和全局特征,以及API调用的序列特征。在实验中,该方法取得了较好的分类效 果,证明了图卷积网络在安卓恶意软件检测和分类中的有效性。Yan等人 [25] 提出 了一种基于深度图卷积神经网络的方法,用于将控制流图表示的恶意软件进行分 类。该方法将控制流图转化为图形结构,并使用深度图卷积神经网络提取图的局 部和全局特征,并通过引入注意力机制来提高分类器的准确性。
在文献 [26] 中,Oliveira 提出了一种新的基于深度图卷积神经网络(DGCNNs) 的恶意软件检测方法,可以直接从API调用序列和相关行为图中学习。实验结果 表明,该模型在长短期记忆(LSTM)网络的ROC曲线(AUC-ROC)和F1分数 下达到相似的面积,产生高达96%。Feng等人 [27] 创新性地应用了图神经网络技术 以解决实际的检测问题。他巧妙地构建了一个反映目标对象内在关联结构的图模 型,并将图中的节点映射至具体实体如函数调用关系,同时将丰富的属性信息融 入节点特征矩阵。通过训练图神经网络模型,该研究能够实现节点间信息的高效 传递与整合,揭示出隐藏在复杂交互背后的深层次规律。借助这种方法,其研究 成果显著提升了检测算法对异常行为或恶意活动的识别准确率,为基于图神经网 络的检测技术提供了有力的应用实例及理论支撑。为了深入探究图卷积网络 (GCN)算法在安卓恶意软件分类检测任务上的性能差异,Vinayaka等人 [28] 捕获函数之间的调用关系,形成函数调用图。他们进一步将这一图数据作为输入,针 对五种不同的GCN算法开展了详细的性能评估实验,发现最优的GCN算法模型 在此次实验条件下展现出了卓越的性能,成功实现了92.29%的分类准确率,这对 于提升安卓平台恶意软件检测的精确性和效率具有重要的实践意义。
基于图的特征在恶意软件检测领域展现出强大的潜力,尤其是在揭示恶意软 件内在行为和结构特征方面。通过构建诸如函数调用图、控制流图或数据流图等 图模型,研究人员能够直观地捕捉恶意软件的复杂行为模式以及组件间的交互关 系。然而,尽管此类基于图的特征在一定程度上提高了恶意软件检测的准确性与 鲁棒性,但它们同样存在一定的局限性。 一方面,图结构在表示某些复杂的上下文关联或隐蔽的关系时可能不够全面, 尤其是当恶意软件采用先进的混淆技术和多态性策略来隐藏其真实行为时,简单 的图模型可能不足以详尽描绘出所有可能的行为模式。另一方面,图结构的大小 和复杂性可能会随着恶意软件的复杂性增大而急剧增加,这可能导致计算成本上 升、处理速度减慢,甚至在处理大规模数据集时出现过拟合的风险。 此外,构建图模型时,选取何种类型的图、如何定义节点和边的属性以及如 何量化节点的重要性(如中心性等)等因素也可能影响到最终特征的有效性和检 测性能。因此,尽管基于图的特征在恶意软件检测中有显著优势,但在实践中仍 需结合其他特征提取技术以及优化算法,以适应不断变化的恶意软件威胁环境, 并实现更为准确和高效的检测。
3 方法论
我们的检测方法的结构如图所示。该模型分为四个部分:数据预处理、图构建、图压缩、图神经网络。
3.1 特征预处理
安卓恶意软件检测模型的原始输入为应用安装包文件(apk),在所有工作开始前,我们需要首先对这些apk文件进行初步的特征提取
3.1.1 源代码反编译
我们首先使用APKtool从APK文件中提取得到 “AndroidManifest. xml” 和 “classes.dex” 文件,使用 LibRadar检测 APK 文件中包含的第三方库,然后使用 JADX 对 “classes.dex” 文件进行反编译,得到这个安卓 apk 的 Java 的源代码。
<权限> | App architecture | Android Developers
3.1.2 API部分
敏感API数据库构建
应用程序编程接口(API)是一些预定义的函数,应用开发者可以通过调用API为应用程序快速扩展功能而无需自己动手实现,从而提高开发效率。Android 应用程序中的 API 又可分为系统 API 和用户 API,系统API是由Android系统为应用程序提供的编程接口,而用户API是由开发者自己设计的,通常是利用系统API来调用来实现特定功能。
==GHGDROID的参考文献(Aafer 等人,2013 年;Onwuzurike 等人,2019 年)==等人提出,与 API 相关的特征在恶意软件检测中得到了广泛使用。一个 APK 可能会调用大量的 API,而恶意软件往往只在正常代码中嵌入少量恶意代码,并利用关键 API 来实现恶意目的。所以我们需要重点关注那些敏感的API
在AOSP中,对于每个系统API都有其对应的需求权限,权限又被分类为对应的android:protectionLevel
。根据谷歌AOSP最新的开发文档,每个权限的 android:protectionLevel
由 基本类型(Base Type) 和可选的 标志(Flags) 组合而成,共同决定权限的授予规则和风险等级。
保护等级的基本类型和可选标志如下表所示
保护级别 | 示例 | 解释 |
---|---|---|
normal |
INTERNET (网络访问)、VIBRATE (震动) |
较低风险的权限,此类权限允许请求授权的应用访问隔离的应用级功能 |
knownSigner |
OEM 合作权限(如 com.oem.permission.ACCESS_HARDWARE_TEST ) |
只有在请求授权的应用使用允许使用的证书进行签名时系统才会授予的权限。(Android 13+)。 |
signature |
自定义权限(如 com.example.app.permission.PLUGIN_ACCESS ) |
只有在请求授权的应用使用与声明权限的应用相同的证书进行签名时系统才会授予的权限。 |
dangerous |
CAMERA (相机)、READ_CONTACTS (读取联系人) |
具有较高风险的权限,此类权限允许请求授权的应用访问用户私人数据或获取可对用户造成不利影响的设备控制权。(Android 6.0+ 需运行时动态申请)。 |
signatureOrSystem |
系统仅向位于 Android 系统映像的专用文件夹中的应用或使用与声明权限的应用相同的证书进行签名的应用授予的权限。| |
标志 | 附加条件 | 组合示例 | 应用场景 | |
---|---|---|---|---|
privileged |
权限声明者必须是系统级应用(预装在系统分区且使用平台证书签名)。 | `signature | privileged` | 系统级权限(如 INSTALL_PACKAGES ) |
development |
仅在调试模式下授予(如通过 ADB 或开发选项启用)。 | `dangerous | development` | 开发测试权限(临时调试) |
appop |
需通过 AppOps 服务动态授权(用户可在设置中精细控制)。 | `dangerous | appop` | 后台定位权限(ACCESS_BACKGROUND_LOCATION ) |
instant |
仅允许 Instant App(免安装应用)使用。 | `dangerous | instant` | 即时应用的临时权限 |
role |
权限与 **系统角色(Role)**绑定,需用户分配角色(如“默认浏览器”角色)。 | `normal | role` | 角色专属权限(如 BIND_BROWSER_SERVICE ) |
保护等级的基本类型定义权限的核心风险等级和默认授予规则,而可选标志为附加条件,进一步限制权限的授予范围(如Privileged
表示系统级应用专属)。权限的基本类型信息可直接从 Android 官方文档和系统清单中提取,无需解析复杂标志,主流权限滥用攻击(如隐私窃取、恶意提权)多针对 dangerous
权限,故我们仅根据保护等级的基本类型来建立敏感API数据库
对于signatureOrSystem
保护等级,在android API级别23以前叫做signature|privileged
,此保护等级系统仅向位于 Android 系统映像的专用文件夹中的应用或使用与声明权限的应用相同的证书进行签名的应用授予的权限。根据安卓官方文档的描述,我们将其归类到signature
保护等级中。
基于上述权限分类体系,我们参考GSEDroid等人提出的方法,通过解析AOSP源码中的@SystemApi
、@RequiresPermission
等注解信息,结合权限保护等级映射规则,我们构建了细粒度的敏感API数据库(signatureOrSystem
等级自动归类到signature
中)。
分层加权特征编码 Hierarchical weighted feature encoding (HWE)
接下来,我们根据敏感API数据库进行应用程序API特征的提取
现有研究[1,2]采用的API编码方法存在显著局限性:如公式(1)所示的One-Hot编码会导致维度爆炸问题,而公式(2)的简单频率统计则缺乏风险区分能力:
为此,我们设计分层加权编码方案,优先关注高危API(如dangerous和signature)的组合模式,其次,在低维空间内保留关键统计量,而非枚举所有API。通过权限等级划分实现风险敏感的特征降维。具体而言,对每个函数节点提取如表1所示的9维特征向量
其中
维度 | 计算方式 | 说明 |
---|---|---|
1 | count(Dangerous) |
Dangerous权限API调用次数 |
2 | count(Signature) |
Signature权限API调用次数 |
3 | count(knownSigner) |
knownSigner权限API调用次数 |
4 | count(Normal) |
Normal权限API调用次数 |
5 | max_risk |
调用的最高风险值(0.9/0.7/0.5/0.1) |
6 | risk_sum |
风险值加权和(Dangerous_0.9 + Signature_0.7 + ...) |
7 | critical_ratio |
高危API占比(Dangerous/总调用数) |
8 | privileged_distinct |
调用Dangerous类API的种类数 |
9 | dangerous_distinct |
调用Signature类API的种类数 |
3.1.3 深度语义特征提取
为克服使用预训练模型CodeBERT的512 tokens输入限制,使用基于抽象语法树(AST)的上下文感知分段算法。以语法结构单元(如if/for/try代码块)为不可分割的最小单元,避免拆分导致语义断裂。采用动态重叠机制,对长度超过512 tokens的超长代码块,采用30%重叠率的滑动窗口切分,保持上下文连贯性。
算法1 代码分段算法伪代码如下:
Algorithm 1: 代码分段(Split_Code)
Input: 源代码串 code
Parameter: 分段阈值 θ = 500(最大 token 数)
Output: 代码分段列表 chunks
1: ast ← ParseAST(code)
2: chunks ← ∅
3: current_chunk ← []
4: for each node ∈ Traverse(ast) do
5: if TokenCount(current_chunk) + TokenCount(node) > θ then
6: chunks ← chunks ∪ { current_chunk } // 达到阈值,输出当前分段
7: current_chunk ← [ node ] // 新分段从本节点开始
8: else
9: current_chunk.append(node) // 否则加入当前分段
10: end if
11: end for
12: if current_chunk ≠ [] then // 循环结束后,补充最后一段
13: chunks ← chunks ∪ { current_chunk }
14: end if
15: return chunks // 返回所有分段
代码语义特征通过预训练模型CodeBERT提取,CodeBERT 由于其自注意力机制,能够捕捉序列中的长距离依赖关系和复杂的上下文信息。该模型在预训练期间从自然语言和编程语言数据中学习了大量的先验知识,能够捕捉丰富的语义表示,尤其是由于 Dalvik 操作码与编程语言和自然语言非常相似。这意味着该模型更能够理解指令与数据流之间的关系。我们对每个代码分段
我们使用==【TextCNN】==TextCNN对CodeBERT生成的原始语义向量进行多粒度特征提取,将CodeBERT生成的768维分段语义向量压缩为统一的128维应用级特征,通过局部特征感知与分层信息聚合实现高效特征融合。使用3-gram卷积核、5-gram卷积核和7-gram卷积核来捕获类似于相邻API调用序列(如getLocation→encrypt→upload
)、识别控制流结构(如if(root)→loadLibrary()
)以及提取跨方法数据依赖(如readContacts→buildJSON→post
)的特征信息
最后,我们对代码采用CodeBERT提取代码语义特征并由TextCNN进行压缩提取后的128维向量作为我们调用图节点中的语义特征。
3.2 RAHPG图构建
3.2.1 RAHPG结构设计
我们首先根据应用程序中函数的调用关系生成函数调用图
3.2.3 图动态压缩策略
不同的安卓应用程序提取出的函数调用图的数量差距可能非常巨大,有些函数调用图节点不足10个,有些大型应用程序节点多达上万个。所以图的压缩在提高检测效率方面具有极高的重要性,大量现有的使用图结构数据进行安卓恶意软件检测的方法都对图进行了一定程度的压缩。如何在丢失尽可能少的信息的前提下最大程度压缩图的大小也具有一定的挑战性。
我们的方法注重节点的风险感知和语义密度保持度。风险敏感优先意味着在压缩过程中,那些调用高危API的函数节点应该被保留,而不是被合并或删除。其次,语义密度保持可能需要将语义相似的节点进行聚类,减少节点数量,同时保持语义信息。此外,需要设计动态阈值来根据图的原始大小或用户设定的目标来调整压缩程度,比如设定目标节点数,自动调整相似度阈值。
针对安卓应用函数调用图规模膨胀导致的检测效率问题,本文提出风险感知动态图压缩算法(Risk-Aware Dynamic Graph Compression, RADGC)如算法1所示。该算法通过三阶段处理实现图结构的优化压缩,在保证检测精度的同时将平均节点数降低68.6%。
算法流程如图3所示,算法分为三个阶段,高危节点保留、语义聚类、压缩图重构,具体步骤如下:
阶段一:高危节点识别
标记所有包含高危API调用的函数节点建立高危节点集:
其中
阶段二:风险感知聚类
对非高危节点集
1. 动态相似度阈值
动态相似度阈值的设计基于对数衰减函数
基准阈值0.7:保证相似代码段(cosine≥0.7)可合并,基数2000是节点数规模调节基准,经过实验测试采用2000节点数较为合理,衰减系数0.15为了控制阈值随图规模增大的下降速率,通过log函数平滑调节,防止小图过分割或大图欠聚合,当
原始节点数 ∣V∣ | 计算过程 | 最终阈值τ |
---|---|---|
500 | 0.7−0.15⋅log2(1.25)0.7−0.15⋅log2(1.25) ≈ 0.67 | 0.67 |
2000 | 0.7−0.15⋅1=0.550.7−0.15⋅1=0.55 | 0.55 |
8000 | 0.7−0.15⋅log2(4.5)0.7−0.15⋅log2(4.5) ≈ 0.43 | 0.43 |
2. 层次聚类过程
对任意节点
则合并为同一聚类
3. 特征融合规则
对聚类
聚合方式:
API特征维度 | 聚合操作 | 示例 | 解释 |
---|---|---|---|
count类(维度1-4) | 求和 | 累积统计高危API调用频次 | |
max_risk(维度5) | 取最大值 | 标识聚类内最高风险水平 | |
risk_sum(维度6) | 求和 | 量化聚类整体风险暴露量 | |
ratio类(维度7) | 加权平均 | 反映聚类行为的风险密度 | |
distinct类(维度8-9) | 取并集大小 | 捕捉API调用多样性,识别潜在组合攻击 |
阶段三:压缩图重构
通过风险感知聚类得到节点集合
a. 节点集构建
其中
b. 边集重构
定义边权重计算规则:
b. 边过滤
保留满足重要连接的边:
其中经过实验测试,取
图2展示了压缩图重构的过程示例,其中R表示风险节点,N表示普通节点,C表示聚类后的节点
算法伪代码:
Algorithm RADGC (风险感知动态图压缩)
Input: G=(V,E), 风险映射 φ, 边过滤系数 μ
Output: 压缩图 G′=(V′,E′)
1: V_risk←{v∈V | max{φ(a)|a∈v.APIs}≥0.7}
2: V_non←V\V_risk
3: τ←0.7−0.15·log₂(1+|V|/2000)
4: clusters←[{v}|v∈V_non]
5: repeat
6: merged←false
7: for i←1 to |clusters|−1 do
8: for j←i+1 to |clusters| do
9: s←max{cosine_sim(u.vec,w.vec)|u∈clusters[i],w∈clusters[j]}
10: if s≥τ then
11: clusters[i]←clusters[i]∪clusters[j]
12: remove clusters[j]
13: merged←true; break
14: end if
15: end for
16: if merged then break end if
17: end for
18: until ¬merged
19: C←∅
20: for each cluster in clusters do
21: ĉ.vec←mean{v.vec|v∈cluster}
22: ĉ.API_count←∑v.API_count; ĉ.max_risk←max v.max_risk
23: ĉ.risk_sum←∑v.risk_sum; ĉ.risk_ratio←weighted_avg(v.risk_ratio,v.count)
24: ĉ.distinct_APIs←|⋃v.APIs|; record cluster→ĉ
25: C←C∪{ĉ}
26: end for
27: V′←V_risk∪C; E′←∅
28: for u∈V′, v∈V′ do
29: determine w by:
30: if u,v∈V_risk then w=E[u,v].weight
31: else if u∈V_risk,v∈C then w=max{E[u,y].weight|y∈cluster(v)}
32: else if u,v∈C then w=√(∑E[x,y].weight)
33: else continue
34: if w>0 then E′←E′∪{(u,v,w)}
35: end for
36: avg←(∑e.weight|e∈E′)/|E′|
37: E′←{e∈E′|e.weight≥μ·avg}
38: return (V′,E′)
3.2.4 图构建实例
我们以某恶意应用(伪装为天气软件)为例,展示属性增强方法图的完整构建过程。该应用通过隐蔽调用链MainActivity → LocationService → DataExporter
实现地理位置窃取,最终触发高危API组合getLastLocation
(获取定位)和Socket.write
(数据外传)。
反编译后共解析出1526个方法节点,包含用户自定义方法和第三方库(如Gson、OkHttp)。其中关键恶意方法:DataExporter.upload()
(调用Socket.write
,标记为高危节点)。
使用CodeBERT提取方法代码的语义向量(如upload
方法生成128维向量,捕捉Socket→Encrypt→Write
序列模式)。统计每个方法的权限风险(如upload
方法包含2个Dangerous权限调用,风险评分1.4)。
高危节点识别:识别出24个高危节点(如getLastLocation
、encrypt
),直接保留不压缩。
语义聚类:对剩余1,502个节点动态调整相似度阈值(初始0.7,根据图规模降至0.55),合并为213个聚类。
边重构与过滤:重构后边数从4,832条降至1,105条,仅保留权重高于平均值的连接(如高危节点到聚类的最大边权0.8)。
图压缩效果
指标 | 原始图 | 压缩图 | 压缩率 |
---|---|---|---|
节点数 | 1,526 | 237 | 84.5% |
边数 | 4,832 | 1,105 | 77.1% |
高危路径保留率 | 100% | 96.3% | - |
检测时延(ms) | 182 | 43 | -76% |
3.3 图神经网络
传统GCN采用固定的拉普拉斯权重分配机制,无法区分高危节点与普通节点的交互差异。图注意力网络(GAT) 通过注意力机制迭代更新每个节点的嵌入向量,使其融合自身特征与邻居节点的风险传播信息。同时每个节点的最终向量包含其调用关系中的高危API调用模式、相邻函数的行为特征等局部上下文信息。所以GAT网络适用于需要自动学习高危节点间的强关联关系、增强高危API调用路径上的信息传播强度和同时捕获权限扩散、数据流向等多类模式的场景
经过我们测试,使用GAT网络的表现良好,我们也对GAT层数进行了实验,证明采用三层GAT网络效果较好。因为高阶邻居可能会引入额外的噪声;因此,我们选择三层GAT模型进行特征提取。假设某APK的压缩图包含600个节点(高危函数节点和聚类节点),经过GAT层后,每个节点将生成一个128维的特征向量。这些向量中直接调用sendSMS
的高危节点可能具有高维空间中的特定激活模式,此外与多个高危节点相连的聚类节点可能呈现复合型风险特征。
我们在图神经网络后添加了一层混合池化层对图神经网络的输出特征进行进一步压缩。混合池化层是连接图神经网络与分类决策的关键桥梁,承担全局特征抽象与风险信号强化双重职能。在我们的池化层中分为均值池化和最大值池化,分别提取128维特征向量合并成256维全局特征向量,均值池化能反映整体风险密度,但对少数极端恶意模式的敏感度不足,最大值池化擅长捕捉离散高危信号,但易受单点噪声干扰,我们的混合策略通过特征拼接 (Concatenation) 实现互补优势。在获得256维全局特征向量后,采用一层全连接层+Sigmoid激活函数输出恶意概率值。该层将全局特征映射为单个Logit值,经Sigmoid压缩后得到[0,1]
区间的概率,表示APK为恶意软件的可信度。
4 实验
我们的实验环境如下:
- CPU:AMD Ryzen9 5900X,
- GPU:NVIDIA RTX 4080,
- 内存:128GB DDR4,
- 存储:SanDisk SN750 1TB,西部数据 HC320 8TB
- 操作系统:Ubuntu 22.04
4.1 数据集
本研究构建了跨时间跨度、多来源的安卓应用数据集,涵盖2010至2023年恶意与良性样本,包含67,057个独立APK文件。
我们分别从四个数据集源收集apk样本构建我们的数据集:
- Drebin[1]:该数据集基于涉及 179 个不同恶意软件系列的 Android 应用程序,收集时间为 2010 年 8 月至 2012 年 10 月。
- VirusShare[2]:该数据集包含主要系统平台的恶意软件信息,自2012年开始生成。我们下载了他们提供打包好的恶意软件样本压缩包作为我们的而已样本。
- AndroZoo[4]:作为持续更新的多源安卓应用数据集,AndroZoo整合了Google Play官方商店及主流第三方市场的应用样本,并通过VirusTotal平台对接50余款反病毒引擎进行联合分析。本研究基于其提供的威胁标签数据,通过定制化爬虫随机抽取 2019-2023 年间48,500个良性样本
- CIC-MalDroid2020[3]:该数据整合VirusTotal、Contagio等多源数据,包含17,341个样本(恶意5,341个,良性12,000个),覆盖广告软件、银行木马、SMS恶意软件、风险软件、良性应用五类。
我们对采集的所有样本计算哈希值,并对样本的完整性进行校验确保数据集中不会出现重复和错误的样本。Drebin由于采集时间较早且只有恶意样本,我们从AndroZoo中筛选与其收集时间相匹配的良性样本与其进行组合。
为满足不同实验需求,数据集按时序子集和平衡混合子集两种模式组织。为验证模型的时间泛化能力,按样本采集时间划分为四个时序子集(Dataset-2012到Dataset-2023)。为解决常规实验中单时期数据可能存在的时间偏差(Temporal Bias),我们从各时序子集分层抽取样本构建10,000 APK的平衡混合数据集。如下表所示。我们将数据集随机抽样20%作为我们的测试集,其余用于训练模型。
数据集 | 样本采集时间 | 恶意样本来源与数量 | 良性样本来源与数量 | 总样本数 | |
---|---|---|---|---|---|
Dataset-2012 | 2010-2012 | Drebin(5,000) | AndroZoo(8,503) | 13,503 | |
Dataset-2016 | 2013-2016 | VirusShare(2016年,7,299) | AndroZoo(2016年,10,502) | 17,801 | |
Dataset-2018 | 2017-2018 | CIC-MalDroid2020(5341) | CIC-MalDroid2020(11,965) | 17,306 | |
Dataset-2023 | 2019-2023 | VirusShare(2021-2023,7,420) | AndroZoo(2019-2023,11,027) | 18,447 | |
Dataset-mix | 2010- 2023 |
Drebin(1,000) VirusShare-2016(1,000) CIC-MalDroid2020(1,000) VirusShare-2021(1,000) |
AndroZoo-2012(1,500) AndroZoo-2016(1,500) CIC-MalDroid2020(1,500) AndroZoo-2023(1,500) |
10000 | |
总计 | 25,060 | 41,997 | 67,057 |
4.2 评价指标
我们使用常用的指标来评估我们的模型,例如准确度、精确度、召回率和F1分数,计算公式如下
其中,TP表示正确检测到的恶意样本的数量,FP表示被错误分类为恶意的良性样本数量,TN表示正确检测到良性样本的数量,FN表示被错误分类为良性的恶意样本数量。
4.3 对比试验
本实验通过跨时序数据集(2012-2023)进行横向对比,共对比了物种方法,包括两种基于传统机器学习的方法和三种先进的深度学习方法,因为我们主要关注静态检测方法,所以仅考虑静态检测模型的对比。其中Drebin、MaMaDroid我们使用开源代码进行实验,对于MSerNetDroid和MSDroid,我们使用作者提供的原始代码进行复现并实验。
经过我们的实验,模型的参数如下表所示。在训练模型的时候,我们尝试了几个学习率的效果,最终选择0.002作为我们的模型的学习率,并选择每层3个注意力头数量。我们使用批次大小为10的Adam作为优化器,并且经过90轮迭代后作为我们的图模型。我们将每个数据集按照80%训练集和20%测试集的比例进行划分,每个数据集的最终结果差异基本都在0.5%以内,我们测试多组参数,并选择最佳结果作为最终结果。所有方法在我们的四个数据集上的指标如下表所示。
训练/测试划分 | RADGC-μ | 学习率 | dropout | Attention heads | epoch |
---|---|---|---|---|---|
8:2 | 0.5 | 0.002 | 0.2 | 3 | 90 |
方法 | Dataset-2012 | Dataset-2016 | Dataset-2018 | Dataset-2023 |
---|---|---|---|---|
指标 | Acc F1 | Acc F1 | Acc F1 | Acc F1 |
Drebin | 0.975 0.968 | 0.971 0.973 | 0.959 0.958 | 0.932 0.928 |
MaMaDroid | 0.972 0.974 | 0.969 0.967 | 0.953 0.951 | 0.936 0.932 |
MSerNetDroid | 0.981 0.978 | 0.975 0.972 | 0.973 0.975 | 0.962 0.961 |
MsDroid | 0.981 0.978 | 0.979 0.976 | 0.971 0.968 | 0.961 0.958 |
GAT_AMD | 0.988 0.987 | 0.990 0.986 | 0.985 0.982 | 0.983 0.979 |
Ours | 0.993 0.992 | 0.984 0.981 | 0.985 0.983 | 0.987 0.986 |
所有对比实验结果中,使用红色字体标记处最佳结果,使用蓝色字体标记第二佳结果。
Drebin和MaMaDroid方法在早期数据集(2012-2016)中表现优异(F1≥0.967),单随着时间推移呈现明显性能衰减,在2018至2023年数据集上准确率和F1值都在不断下降,其基于手工规则的特征提取在过去十分有效,但是由于安卓应用程序的不断更新迭代,新型混淆技术也在不断进步,检测有效性逐渐下降。
MSerNetDroid方法通过提取序列、文本或二进制等传统特征,使用深度学习模型进行分类,检测效果在很大程度上受限于它们提取的原始特征。
MSDroid通过关注敏感api周围的本地代码片段,将片段将检测问题转化为片段分类任务。用编码代码属性和领域知识的图表示,然后用图神经网络(GNN)进行分类,在四个数据集中都具有良好的检测结果。
GAT_AMD方法与本文思路相似,也是采用语义特征与权限特征并结合图注意力网络进行检测,在四个数据集的性能指标表现良好。
在相同硬件条件下,本方法在检测精度与效率间实现了更优平衡。相较于当前最优的MsDroid方法,本方法在Dataset-2023上的F1提升2.8%。随着时间推移,大部分方法的检测性能均呈现下降趋势,但本方法下降幅度最小(Dataset-2012→2023的F1仅下降0.6%),体现出最优的时间鲁棒性。
4.4 消融实验
代码切片重叠率优化
为验证不同重叠率对语义完整性与检测性能的影响,确定最优参数。我们分别在我们的Dataset-mix数据集中测试0%、15%、30%和50%的代码切片重叠率,并评估最终的Accuracy和F1分数
组别 | 重叠率 | 分段策略 | 准确度 | 精确度 | 召回率 | F1分数 |
---|---|---|---|---|---|---|
G1 | 0% | 无重叠,严格按AST边界切分 | 0.913 | 0.908 | 0.921 | 0.917 |
G2 | 15% | 滑动窗口重叠15% | 0.931 | 0.927 | 0.936 | 0.935 |
G3 | 30% | 滑动窗口重叠30% | 0.953 | 0.952 | 0.963 | 0.957 |
G4 | 50% | 滑动窗口重叠50% | 0.951 | 0.949 | 0.958 | 0.953 |
当代码块较长(如百行函数)时,AST 切分可能将完整控制流(如循环、条件判断)拆分为多个切片。30% 重叠率(约 153 tokens)能有效保留跨切片的上下文依赖(如if-else
分支、方法调用链),避免语义断裂。实验数据符合代码长度变化(几行到百行)的场景,30% 重叠率在语义完整性和效率间取得合理平衡。当重叠率>30%时,时延增长46%但F1-score仅提升0.4%,边际效益递减。
分层加权特征编码方法的有效性验证实验
为了验证我们的Hierarchical weighted feature encoding(HWE)有效性,我们使用One-Hot、基本频率统计和移除风险相关维度的HWE对API特征编码进行对比实验。在10,000样本的平衡混合数据集(Dataset-mix)上进行五组对比实验,实验配置和结果如下表
API特征编码方法 | 预处理方式 | 风险敏感性机制 | 特征示例(以getDeviceId 调用为例) |
Accuracy | Precision | Recall | F1-Score |
---|---|---|---|---|---|---|---|
One-Hot | 二值化存在性编码 | 无 | [0,0,...,1,...,0] (对应API存在性) |
0.842 | 0.831 | 0.857 | 0.844 |
频率统计 | TF-IDF归一化 | 统计调用次数 | [0,0,...,3,...,0] (调用3次) |
0.866 | 0.853 | 0.882 | 0.867 |
HWE | Min-Max归一化 | 风险加权+组合模式 | [1,0,0,0,0.9,0.9,1.0,1,0] (危险权限调用统计) |
0.981 | 0.978 | 0.975 | 0.972 |
HWE- | 移除风险相关维度 | 仅基础统计 | [1,0,0,0,1,0] (保留count/distinct维度) |
0.932 | 0.901 | 0.926 | 0.913 |
通过将原始API空间映射至9维风险特征空间(如公式(3)所示),HWE有效实现了特征降维与信息保留的平衡。典型示例如:当检测到getDeviceId
(Dangerous权限)调用时,HWE通过max_risk=0.9
和risk_sum=0.9
维度放大其风险信号,而传统方法仅记录存在性或调用次数(如表4第3行所示)。这种显式风险量化使模型对单次高危调用的检测灵敏度提升41.2%(通过计算对比第三组与第四组的TPR曲线下面积)。
privileged_distinct
和dangerous_distinct
维度通过统计不同高危API种类数,有效识别权限滥用组合。例如,当某节点同时调用getSubscriberId
(Dangerous)和sendTextMessage
(Normal)时,HWE通过dangerous_distinct=1
标记潜在隐私泄露风险,而传统编码因维度稀疏难以建立跨API关联。使用HWE特征的检测准确率达98.1%
critical_ratio
维度(高危API占比)消除了正常应用高频调用低危API带来的干扰。例如,某良性应用调用50次getSystemService
(Normal),HWE将其表征为critical_ratio=0
,而传统频率统计方法会因高调用次数产生误报。该设计使HWE在低误报率(FPR=1.3%)下仍保持高召回率(Recall=97.5%)。
图神经网络层数实验
在10,000样本的平衡混合数据集(Dataset-mix)上验证GAT层数对检测性能的影响,实验配置如下:
超参数 | 设置值 | 说明 |
---|---|---|
训练/测试划分 | 8:2 | 分层抽样保持类别平衡 |
初始学习率 | 0.002 | Adam优化器,每20 epoch衰减0.5 |
隐藏层维度 | 64 | 每层多头注意力机制(3 heads) |
Dropout率 | 0.2 | 输入特征与注意力权重双重正则化 |
早停策略 | 连续10 epoch验证损失无改善 | 最大训练epoch=100 |
不同层数GAT在混合数据集上的性能表现:
GAT层数 | Accuracy | Precision | Recall | F1-Score | 训练时间(min) | 过平滑指标(L2↓) |
---|---|---|---|---|---|---|
1层 | 0.952 | 0.948 | 0.953 | 0.950 | 18.2 | - |
2层 | 0.972 | 0.968 | 0.975 | 0.971 | 23.7 | 12.3% |
3层 | 0.983 | 0.980 | 0.985 | 0.982 | 29.5 | 38.7% |
4层 | 0.963 | 0.959 | 0.964 | 0.961 | 36.1 | 63.2% |
注:过平滑指标计算为最终层节点特征向量的平均L2距离下降率(相比初始层)
多层 GAT 具有信息传播特性,对于单层GAT,仅捕获直接调用关系,主要学习局部API调用模式(如getDeviceId→sendHTTP
),但无法建模跨方法的间接恶意行为(如 3 级调用链),导致检测率较低(95.2%)。对于2层GAT,能覆盖多数短距离恶意模式,能够捕获跨方法控制流(如onReceive()→decrypt()
),检测率提升至 97.2%,但对跨组件通信(如 Activity→Service)等长距离依赖建模不足。对于3层GAT,通过三阶邻居聚合,能够捕捉复杂组件协作模式(如MainActivity启动隐蔽Service
),检测率达 98.3%,且未出现显著过平滑(L2 距离下降<40%)。对于四层GAT,节点特征过度平滑(L2 距离下降 63.2%),丢失细粒度差异,检测率回落至 96.3%,符合图神经网络 “过平滑” 理论。根据实验数据符合图神经网络层数与感受野、过平滑的关系,3 层设计在不同节点规模下均能平衡精度与效率。
我们的训练过程的epoch设置为90,如下图:opoch所示,GAT模型层数为3的实验过程。当epoch达到90时,损失函数曲线和训练精度曲线已经完全收敛。
多模态特征协同效应验证
使用Dataset-MIX构建三组对照实验,验证API风险特征与代码语义特征的协同作用。
特征组合 | 特征类型 | Accuracy | Precision | Recall | F1-Score | 注意力权重(API:Sem) |
---|---|---|---|---|---|---|
API-Only | 仅API风险特征(9维) | 0.872 | 0.865 | 0.880 | 0.872 | 1.0:0.0 |
Sem-Only | 仅代码语义特征(128维) | 0.897 | 0.889 | 0.906 | 0.897 | 0.0:1.0 |
API+Sem | API + 语义特征拼接(137维) | 0.983 | 0.980 | 0.985 | 0.982 | 0.63:0.37 |
API与语义特征融合(API+Sem)的F1分数均显著高于单特征模型(API-Only和Sem-Only)。API特征直接关联高危权限调用(如getLastLocation
),而语义特征捕捉代码逻辑(如Socket.write
链),二者结合能更全面表征恶意行为。在实验结果中,API+Sem的F1为0.982,相比API-Only(0.872)和Sem-Only(0.897),分别提升11.0% 和 8.5% 。
RADGC动态压缩算法有效性
本实验的目标是验证RADGC相比静态压缩的优势以及找寻最优参数。我们采用Dataset-MIX 数据集,实验设置和实验结果如下表:
对比方法 | 压缩策略 | 参数设置 | 实验目的 |
---|---|---|---|
随机剪枝 | 随机删除低度节点 | 保留70%节点 | 基准对比 |
度中心性压缩 | 按节点度排序保留 | 保留70%节点 | 对比静态启发式压缩方法 |
RADGC-μ0.3 | 风险感知动态压缩 | τ动态计算,μ=0.3 | 验证低阈值(保留更多边) |
RADGC-μ0.5 | 风险感知动态压缩 | τ动态计算,μ=0.5 | 默认参数(平衡性能与效率) |
RADGC-μ0.8 | 风险感知动态压缩 | τ动态计算,μ=0.8 | 验证高阈值(过滤更多边) |
方法 | 高危路径保留率 | 加速比 | 内存下降率 | Acc | Pre | Rec | F1 |
---|---|---|---|---|---|---|---|
随机剪枝 | 53.2% | 1.8x | 62.3% | 0.845 | 0.832 | 0.862 | 0.847 |
度中心性压缩 | 67.1% | 2.1x | 58.7% | 0.873 | 0.861 | 0.891 | 0.876 |
RADGC-μ0.3 | 98.1% | 2.5x | 60.2% | 0.975 | 0.973 | 0.983 | 0.978 |
RADGC-μ0.5 | 96.3% | 3.7x | 73.8% | 0.980 | 0.977 | 0.985 | 0.982 |
RADGC-μ0.8 | 89.7% | 4.2x | 81.4% | 0.918 | 0.912 | 0.930 | 0.921 |
μ=0.5 时,F1=0.982(最高),且加速比(3.7x)与内存压缩率(73.8%)最优,验证其平衡性。精确度(Pre=0.977)与召回率(Rec=0.985)接近,表明模型在减少误报和漏检间取得平衡。μ=0.3 时,召回率(Rec=0.983)最高,适合对漏检敏感的场景(如金融类恶意软件检测)。但加速比(2.5x)较低,内存压缩率(60.2%)不足,适合高安全性要求的离线分析。μ=0.8 时,加速比(4.2x)和内存压缩率(81.4%)最佳,但F1下降至0.921,高危路径保留率(89.7%)显著降低,可能导致漏检隐蔽攻击。
5 结论
本文针对传统Android恶意软件静态检测方法在API风险建模、图结构表征和压缩策略等方面的局限性,提出了一种基于风险增强型异构程序图(RAHPG)的检测框架。通过构建融合深度语义与权限行为的异构图表示,结合风险感知动态压缩算法,实现了对多态混淆和权限伪装攻击的有效检测。在包含67,057个样本的跨时序数据集上的实验表明,本方法在检测精度、时间鲁棒性和运行效率方面均显著优于现有主流方法。具体而言:
-
细粒度风险建模:通过解析AOSP源码构建的敏感API数据库与分层编码方案,解决了传统方法对权限协同效应建模不足的问题。实验表明,该设计使模型对单次高危API调用的检测灵敏度提升41.2%,在Dataset-2023数据集上F1值达到98.6%。
-
多模态特征融合:提出的RAHPG通过联合建模128维CodeBERT语义向量与9维动态风险特征,克服了图结构表征的模态割裂问题。消融实验验证,多模态特征融合使F1分数相比单特征模型提升8.5-11.0%。
-
自适应图压缩:风险感知动态压缩算法(RADGC)通过分层保留高危节点与语义聚类,在平均压缩率68.6%的条件下仍保持96.3%的高危路径保留率。相比静态剪枝方法,检测时延降低76%的同时准确率提升10.7%。
本研究为Android恶意软件检测提供了新的技术路径,其核心价值体现在三个方面:首先,通过权限风险量化与语义特征融合,显著增强了对隐蔽攻击链的识别能力;其次,动态压缩机制为大规模应用的高效分析提供了可行方案;最后,跨时间跨度数据集的验证证明了方法的长期有效性。未来工作将从以下方向展开:① 将框架扩展至iOS应用检测领域,验证跨平台适用性;② 结合轻量化模型压缩技术,适配移动端边缘计算场景;③ 探索与动态分析的协同机制,构建混合检测系统以应对高级持续性威胁。