我即将发布一个在Assets /文件夹中包含大量JavaScript的应用程序。我缩小了最小化&将所有内容(JS)组合成500kb左右的大文件。我正在寻找加密它的方法,并将其从资产文件夹中隐藏。
您认为最佳方法是什么?
在Java Class中存储为普通字符串,并且(我不知道是否可能)告诉proguard专门加密它。 - >我会通过WebView
onintercepturlloading
作为加密文件存储在Assets中,使用任何第三方或Java加密例程进行热解密 - 我想听听。
无论你想要什么
理想情况下,解决方案应作为构建过程的一部分包含在内,但如果没有其他解决方案,我会手动生成加密数据。
编辑:DexGuard似乎是专业的方式,但它是350欧元,任何免费的替代品?
请不要问我为什么要加密它。我需要这样做,就像有一天你需要去看牙医。
答案 0 :(得分:2)
我建议你不要依赖第三方工具,因为你可能会成为供应商锁定的,这意味着如果他们停止开发软件等等。我会将Javascript的内容放在一个大的最终静态String
中,然后正如你所说的那样告诉Proguard做它的神奇。
取自Proguard的documentation。
ProGuard是否加密字符串常量?
没有。程序代码中的字符串加密必须是完全可逆的 根据定义,它只会提高混淆程度。它增加了 代码的足迹。然而,受到人们的普遍需求,ProGuard's 适用于Android的闭源兄弟DexGuard确实支持字符串 加密,以及类加密和隐藏访问 敏感的API。
答案 1 :(得分:0)
绝对没有什么可以被视为安全。因此,混淆几乎是浪费精力和获得安全性之间的最佳折衷方案(使黑客攻击更加困难,但很少)。
保护加密方案需要密钥。你没有地方可以隐藏你的钥匙。您可以在APK中使用它,也可以让APK从某个服务器下载。使用合适的工具很容易发现两者。
如果你只想减慢黑客的速度,那么就去做一些简单的事情吧。在不同位置传播javascript部分,并使用一些简单快速的编码对其进行编码,如base64
。然后在飞行中组合它们。一个专业的人会像任何加密方案一样破坏它,但你不会浪费很多分钟来实现它。有更多时间来编写您的实际应用。
DexGuard完成了我上面描述的内容(字符串混淆),但对于独立开发者而言,我觉得它非常昂贵(最便宜的许可证是350美元)。