【问题标题】:Can I use serialization with obfuscation?我可以使用带有混淆的序列化吗?
【发布时间】:2011-12-01 21:52:49
【问题描述】:

我想知道它是否会工作...在我的应用程序中,我有一个要序列化到文件的对象,然后我用ProGuard 混淆代码,然后应用程序进入市场。然后我想发布新版本的应用程序。我也一样。用户通过应用程序更新运行。

问题是 - 使用第一个版本的应用程序序列化的对象是否在第二个版本中正确反序列化?如果是 - 为什么?

【问题讨论】:

  • 你真的需要序列化吗?这不是您可以使用数据库或自定义文件格式处理的吗?
  • @jcm,我真正需要的是保护这些数据免遭未经授权的阅读。如果你告诉我用户无权查看数据库——我什至害怕用户会使用 root 权限来获取/分析/修改该数据。所以我用加密序列化它。但正如你所说,也许自己的文件格式会更好。
  • 如果你想要安全的数据,而不仅仅是它的结构,你需要加密。 (当然我不确定是否有办法在 Android 上安全地存储加密密钥,但它应该足以阻止随意攻击。)
  • @Inerdia 是的,我需要混淆和加密。不幸的是,模型可能会因版本而异,保留数据非常重要,所以我最终得到了 jcm 建议并制作了自己的文件格式。
  • 而这个问题的答案是,如果您不对这些类和包名进行手动映射,它很可能无法正确反序列化。

标签: android serialization obfuscation proguard


【解决方案1】:

我可以找到几种机制(serialPersistentFieldsObjectInputStream#readFields)使自定义序列化依赖于字段名称成为可能——假设还没有默认机制。 ProGuard documentation 有一些示例配置,展示了如何使 ProGuard 忽略字段名称以及序列化使用的所有特殊方法和字段。

【讨论】:

  • 感谢您的回答。现在我认为这些类不会被混淆。我对吗?有没有办法使用 ProGuard“手动”混淆这些类?
  • 您可以手动混淆可序列化类的类和字段名称,我只是不确定这是否有很大帮助。攻击者只需检查序列化数据并从中猜测结构和含义是什么。
猜你喜欢
  • 2012-01-08
  • 2015-10-08
  • 1970-01-01
  • 1970-01-01
  • 2013-08-23
  • 2012-07-31
  • 1970-01-01
  • 1970-01-01
  • 2019-01-16
相关资源
最近更新 更多