给定 APK 文件,我如何检测应用程序是不是是用 Kotlin 编写的?
Posted
技术标签:
【中文标题】给定 APK 文件,我如何检测应用程序是不是是用 Kotlin 编写的?【英文标题】:How do I detect if the app is written in Kotlin, given an APK file?给定 APK 文件,我如何检测应用程序是否是用 Kotlin 编写的? 【发布时间】:2018-11-07 19:16:10 【问题描述】:我有多个 APK 文件,我想知道它们是否是用 Kotlin 创建的。一些独特的字符串,进口? 据我了解,只看“kotlin”这个词会给我一些错误的结果。 谢谢!
【问题讨论】:
你检测不到 你可以用这个Tool做逆向工程 您是手动执行此操作还是编写自动化工具?我认为自动化它会归结为一堆启发式技巧,并且仍然不可靠。 现在,我只需要检测它是用 kotlin 编写的(部分还是全部)。我有 apktool、jeb 和 dex2jar。谢谢! SourceFile 属性在到 dex 和返回的往返转换过程中是否保留?如果是这样,大概该值将是具有.kt
扩展名的文件名。我不会仅仅依赖它,因为它无论如何都是一个 optional 属性,但你可以将它与@voddan 的建议结合起来。
【参考方案1】:
Kotlin 编译器将其关于每个 Kotlin 类的元数据保存到运行时注解 @kotlin.Metadata
中,该注解应该保留在 APK 中。所以要检测 Kotlin 类,你需要做的就是检测这个注解。
【讨论】:
如果我只搜索字符串“kotlin.Metadata”,你怎么看?够了吗? 如果有人出于任何原因将该字符串放入他们的 Java 应用程序中,您可能会有误报。但另一方面,他们也可以创建一个名为kotlin.Metadata
我猜的注释,所以你可能会得到误报,同样使用该策略。在我看来,有人不太可能将该字符串放入他们的应用程序中,所以我认为这可能是一个很好的近似值
@ElenaRoot 加载类并检查它是否通过反射使用此注释进行注释有什么问题?
或者,您可以使用字节码查看器手动执行此操作,然后再次检查注释
@voddan 我检查了 100 个 apk 是否存在“kotlin/Metadata”,其中只有一半包含此字符串。以上是关于给定 APK 文件,我如何检测应用程序是不是是用 Kotlin 编写的?的主要内容,如果未能解决你的问题,请参考以下文章