在做 Apk 分析(竞品分析或者合规分析)的时候,相比 Java 层,Native 的扫描和分析难度更大,往往是通过 IDA 去解析,通过分析字符串,函数名,导入/导出表等,基本上就能推断出这个 so 的作用以及开发者信息(供应商等)。面对一款陌生的 App ,如果有很多陌生的 so 的话,就需要逐一分析,非常繁琐。碰到一些不理解但又觉得有意义的字符串,还得上网搜一下。对于非逆向方向的同学,可能无法独立完成这样的工作。是否有一款工具,能够帮助大家轻松地对 Apk 中的 so 做一个粗略的分析呢?
上述这些专业、繁杂、重复的工作,是否可以通过大语言模型+搜索引擎来完成呢?
基于这个想法,可以将上述任务拆解成几个关键步骤:
从 Apk 中提取 so 文件,通过 web 搜索 so 文件的名字,从而确定起供应商和基本功能。比如:libBugly_Native.so ,很显然就是腾讯的 Bugly ,也就是一款收集 Crash 信息的产品。
提取 so 中的字符串和函数名,通过 LLM 来分析这些字符串/函数名的意义,从而推断这个 so 的基本功能。(不考虑混淆的情况。换个角度,混淆的函数名也能说明这个 so 可能是某个安全模块)
提取 so 中的 text section ,选择一部分进行反汇编,然后把汇编代码/伪代码交给 LLM 进行分析。从中也可以提取一些特征,比如是否混淆或者 hook 的特征。
输出分析报告,说明这个 Apk 集成了哪些供应商的哪些产品。
我开源了这个小项目,希望能对大家有帮助。https://github.com/argus-sight/refund-swatter-lite
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.