【问题标题】:Obfuscate Assets in Android APK在 Android APK 中混淆资产
【发布时间】:2016-10-27 13:12:11
【问题描述】:

我们可以在 Android Studio 中使用 Proguard 混淆 android APK,这只会混淆其中的 java 文件。

问题:我还想混淆我存储在 Assets 文件夹中的文件。

解决方案:我们可以使用需要许可证的 Dexguard。

有人能指出任何免费/开源的替代方案吗?

【问题讨论】:

  • 我刚刚发现只有一个服务器端的解决方案来存储敏感数据
  • @Vyacheslav:你能解释一下吗?
  • 我的意思是 APK 是一个 zip-archive。你把它给用户。他可以对你的程序数据做任何事。 Proguard 只是将数据转换为难以阅读的代码。但即使是这段代码也可以解码成普通的 java 文件。这是不可能隐藏你的想法的。
  • 为了防止反向工程,您可以手动存档数据和/或上传到服务器以供将来使用。
  • 我认为你可以通过这个way进行加密/解密

标签: android android-studio obfuscation android-proguard


【解决方案1】:

简答:最好的选择是创建您的自定义加密系统。

在正常情况下,您可以运行一个 gradle 脚本(在构建 apk 之前),该脚本使用仅存在于您计算机上的密钥来加密您的文件。

如果您的应用程序有某种登录系统,一旦您收到登录成功,您就可以从相同的登录响应中检索密钥并解密文件。

请记住,您应该在解密之前将文件传递到应用程序的内部存储中(因为您不能直接在资产文件夹中修改文件的内容)。

如果您的应用程序不使用互联网,因此您无法通过服务获取加密/解密密钥,您可以将其存储在字节数组或随机命名字符串中。

它在任何情况下都不会阻止应用程序被破解和文件被解密,但肯定会给任何试图破解它的人增加另一层难度。

【讨论】:

    【解决方案2】:

    原则上,如果该信息对应用程序的普通用户可见,则必须对任何攻击.apk的人可见,并且.apk可以获取与普通用户具有相同权限的任何人。因此,如果您的应用程序面向公众并且可以通过谷歌商店获得,那么任何人都可以阅读它。混淆、使用本地密钥加密等...所有这些都会减慢攻击者的速度(甚至阻止弱攻击者),但原则上,如果足够熟练的攻击者会投入足够的精力进行攻击,他会破坏你放在那里的任何东西。

    混淆只是防止低级攻击者获得访问权限。


    (answer)也就是说,您自己在 Java 中加载资产文件?

    然后您可以使用一些密钥对它们进行加密,这些密钥将在 .java 代码中进行硬编码 + 混淆,因此只有能够反汇编 .dex 文件并理解您的密钥的人才能解密您的资产(或者还有其他方式,控制运行你的.apk的VM,等到你的应用程序加载和解密资产,并通过以解密形式从VM转储它来攻击它们,这有时可能更容易,如果解密代码真的很棘手且难以理解) .

    对于任何体面的加密,请使用 3rd 方库(请随意将其与您自己的解决方案混合使用,但不要指望自己创建一些强大的密码方案,需要相当多的努力才能创建任何合理强大的东西),实际上java 和 Android 默认有几个“安全”提供者,它们实现了常见的强密码方案。

    但是,如果您不希望某些信息泄露,则永远不要将该信息上传到用户的设备,也不要将其显示给用户。


    例如 - 这就是为什么电影业保护电影的努力如此有趣..他们想要两者,这在原则上是不可能的,并且他们竭尽全力使其更难,这意味着人类浪费了很多钱和生产端到端加密 HDMI 播放等东西的努力,甚至连电缆都花费了很多钱,因为它不可能是一根简单的电线电缆。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-23
      • 1970-01-01
      • 1970-01-01
      • 2013-07-20
      • 2013-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多