1 方法流程

在这里插入图片描述
实现工具:LangGraph
模型:OpenAI o3-mini

1.1 APK 反编译&&代码分割、清洗

利用逆向工具JADX逆向APK得到java源码
按照成员方法划分代码,每个成员方法+导入包+成员变量声明作为一个单元
划分工具:python包JavaLang
使用LLM清洗代码,去除死代码和无法到达的分支
在这里插入图片描述

1.2 方法功能描述&&构建向量数据库

LLM 被被用于详细解释代码的功能,包括输入和输出。并描述潜在的恶意意图在这里插入图片描述
将每个方法存储到向量数据库,包括:

  1. 方法名
  2. 类名
  3. 代码片段
  4. 代码描述

利用OpenAI的text-embedding-ada-002为每条记录生成嵌入向量

1.3 检索增强的代码分析

构建恶意意图查询集,在向量数据库中通过向量相似度,匹配相似的代码片段
首先检索得到5个相似度最高的代码片段,接下来LLM过滤其中不相关的片段,如果全部被过滤则APK中不涉及此类恶意行为
在这里插入图片描述
LLM分析返回的代码片段的意图,如果需要获取更多的信息,则LLM进一步提出询问,在数据库中检索相应的代码供LLM进一步分析,循环往复直至LLM输出最终的恶意行为分析报告
询问示例:

Could you provide the implementation of the method j defined in class b, which takes one String as an input parameter?

检索过程中,存储的类名和方法名等元数据被应用以缩小搜索范围。

1.4 分析报告

三个层次:

  1. 代码报告:每次询问LLM输出的报告
  2. 查询报告:一轮查询中的所有代码报告总结为查询报告
  3. 最终报告:询问集合中的所有查询报告总结为最终的报告

最终报告组成:
应用信息、整体总结、详细分析、结论

2 实验评估

2.1 数据集

来源:AndroZoo
随机选择100个APK,30 benign,70 malicious作为LLM的评估数据集
在这里插入图片描述
经过1.1代码分割后,大多数APK的代码片段少于3000
开销:
处理100个样本大约消耗100M token,API费用600$

2.2 检测效果测试

在这里插入图片描述
eval1:二分类测试,使用Andro标签
eval2:二分类测试,使用经过VT和人工修正的Andro标签
eval3:恶意软件行为分析测试

2.3 行为分析测试

在这里插入图片描述

2.4 与VirusTotal沙盒分析报告的比较

在这里插入图片描述
VirusTotal沙盒缺乏观察到的行为与其实现代码之间的显式关联,且行为分析覆盖率较低

2.5 消融实验

在这里插入图片描述
去除代码切片,清洗过程之后,7类恶意行为只能检测出2个,且分析较为肤浅

3 研究问题

  1. 代码清洗时过滤掉代码中关键逻辑,需要在代码简洁性和完整性之间做出权衡
  2. 仅仅逆向java代码的局限性:APK中,除了 Java/Kotlin 代码,还可以编写 C/C++ 代码并编译成二进制的 .so 文件,在Java 层声明一个 native 方法来调用此代码,例如:public native void doSomething();看不到它内部具体实现
  3. 后续的查询有时会引用Android SDK方法,这些方法的在索引语料库之外,导致TraceRAG无法检索

论文链接:
TraceRAG: A LLM-Based Framework for Explainable Android Malware Detection and Behavior Analysis
源代码:
https://github.com/yanhaixiong/TraceRAG

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐