1 方法流程实现工具LangGraph模型OpenAI o3-mini1.1 APK 反编译代码分割、清洗利用逆向工具JADX逆向APK得到java源码按照成员方法划分代码每个成员方法导入包成员变量声明作为一个单元划分工具:python包JavaLang使用LLM清洗代码去除死代码和无法到达的分支1.2 方法功能描述构建向量数据库LLM 被被用于详细解释代码的功能包括输入和输出。并描述潜在的恶意意图将每个方法存储到向量数据库包括方法名类名代码片段代码描述利用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 分析报告三个层次代码报告每次询问LLM输出的报告查询报告一轮查询中的所有代码报告总结为查询报告最终报告询问集合中的所有查询报告总结为最终的报告最终报告组成应用信息、整体总结、详细分析、结论2 实验评估2.1 数据集来源AndroZoo随机选择100个APK30 benign70 malicious作为LLM的评估数据集经过1.1代码分割后大多数APK的代码片段少于3000开销处理100个样本大约消耗100M tokenAPI费用600$2.2 检测效果测试eval1二分类测试使用Andro标签eval2二分类测试使用经过VT和人工修正的Andro标签eval3恶意软件行为分析测试2.3 行为分析测试2.4 与VirusTotal沙盒分析报告的比较VirusTotal沙盒缺乏观察到的行为与其实现代码之间的显式关联且行为分析覆盖率较低2.5 消融实验去除代码切片清洗过程之后7类恶意行为只能检测出2个且分析较为肤浅3 研究问题代码清洗时过滤掉代码中关键逻辑需要在代码简洁性和完整性之间做出权衡仅仅逆向java代码的局限性APK中除了 Java/Kotlin 代码还可以编写 C/C 代码并编译成二进制的 .so 文件在Java 层声明一个 native 方法来调用此代码例如public native void doSomething();看不到它内部具体实现后续的查询有时会引用Android SDK方法这些方法的在索引语料库之外导致TraceRAG无法检索论文链接TraceRAG: A LLM-Based Framework for Explainable Android Malware Detection and Behavior Analysis源代码https://github.com/yanhaixiong/TraceRAG