如何检测Kotlin开发的iOS应用中使用的第三方库
Kotlin 开发iOS应用的第三方库检测方案
针对基于Kotlin/Native(含KMM跨端方案)开发的iOS应用,目前有三类成熟的无侵入检测方法,不需要逆向开发基础即可快速落地:
静态扫描已打包的.ipa文件
该方法无需源码,仅用成品安装包即可完成检测:
- 将.ipa后缀修改为.zip后解压,进入
Payload/[应用名].app目录,找到和应用同名的无后缀主二进制文件 - 执行
strings命令提取二进制中的符号信息:strings [主二进制文件名] | grep -E "^(com\.|org\.|io\.|dev\.)",Kotlin/Native编译的第三方库会保留完整的包名结构,直接和已知KMM/原生iOS库的包名匹配即可统计依赖 - 同步扫描
Frameworks目录下的Framework包,Kotlin编译产出的依赖库多带有kotlin相关标识,直接读取对应Framework的Info.plist即可获取准确的库名及版本信息
基于项目源码快速识别
如果可以拿到应用的项目源码,该方法准确率100%:
- 定位到项目共享模块(一般命名为shared)的
build.gradle.kts或build.gradle文件 - 直接提取
dependencies代码块中commonMain、iosMain等源集下声明的所有依赖,即可完整获取所有引入的第三方库
调试符号匹配检测
如果应用未做全量符号剥离,可通过符号匹配提升检测准确率:
- 执行
nm [主二进制文件名] | grep -i "kotlin"提取所有Kotlin相关的类、方法符号,结合第三方库的公开接口特征做匹配,可覆盖混淆后的依赖识别场景
注意:如果应用做了全量混淆+符号剥离,普通静态扫描的准确率会有所下降,可提前沉淀主流KMM库的特征码库做模糊匹配,覆盖90%以上的开源依赖检测没有问题。
内容的提问来源于stack exchange,提问作者Dundar
相关产品推荐
相关产品推荐

