给定 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 编写的?的主要内容,如果未能解决你的问题,请参考以下文章

如何检测 Windows 资源管理器是不是显示给定文件夹?

如何根据 APK 文件获取应用签名时间

android adb 如何检测手机中某个软件的版本?

如何检测android 文件签名成功(转帖)

简述-gdb检测apk是不是可以被调试

如何检测给定类大小的 UIView 是不是存在?