首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kotlin委托属性名称在模糊处理后仍可见

Kotlin委托属性名称在模糊处理后仍可见
EN

Stack Overflow用户
提问于 2018-11-16 17:00:56
回答 1查看 272关注 0票数 2

我注意到Kotlin委托的属性名称在混淆字节码中仍然可见。

示例源代码:

代码语言:javascript
复制
class MainActivity : AppCompatActivity() {
    val testProperty by lazy { "this is testProperty value" }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        testMethod()
        Log.d("MainActivity", "testProperty: $testProperty")
    }

    fun testMethod() {
        Log.d("MainActivity", "this is testMethod")
    }
}

我正在构建启用了最小化的apk,然后使用Android Studio中的APK分析功能来浏览字节码:

代码语言:javascript
复制
.method private final l()V
    .registers 3

    const-string v0, "MainActivity"

    const-string v1, "this is testMethod"

    invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

    return-void
.end method

..。

代码语言:javascript
复制
invoke-static {v2}, La/a/b/k;->a(Ljava/lang/Class;)La/b/b;

    move-result-object v2

    const-string v3, "testProperty"

    const-string v4, "getTestProperty()Ljava/lang/String;"

    invoke-direct {v1, v2, v3, v4}, La/a/b/j;-><init>(La/b/c;Ljava/lang/String;Ljava/lang/String;)V

    invoke-static {v1}, La/a/b/k;->a(La/a/b/i;)La/b/e;

在上面的片段中,您可以看到testMethod进行了很好的混淆,但testProperty仍然可见。

我如何从字节码中删除这些信息,以改善混淆,并使其更难反向工程?

EN

回答 1

Stack Overflow用户

发布于 2018-11-16 17:17:20

委托属性的名称是其API的一部分:属性委托接收该名称作为参数,并可以将其用作数据库列的名称或持久性格式中的键。因此,它不能简单地从字节码中删除;它与其他字符串文字(如"this is testProperty value“字符串)具有相同的含义。

如果您真的担心知道特定属性的名称对于试图对您的应用程序进行反向工程的人有很大的不同,那么就不要在这样的代码中使用委托属性。然而,我非常确定,在95%的情况下,这种担忧是没有根据的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53334476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档