如何在 Android Phonegap 移动应用中加密 HTML+JS 资产?

Posted

技术标签:

【中文标题】如何在 Android Phonegap 移动应用中加密 HTML+JS 资产?【英文标题】:How to encrypt HTML+JS assets in Android Phonegap mobile app? 【发布时间】:2011-09-03 20:53:53 【问题描述】:

我使用 Phonegap 基本包装器和 html5 创建了移动应用程序。我的目标是加密资产目录中的文件(JS 和 HTML 文件),这样它们对于解压缩 APK 文件并希望查看 JS 源代码的人来说是不可读的。

好的,我知道没有绝对完美的解决方案。在我回答这个问题的路上,我已经尝试了如何解决我的源代码的复制保护(JS 缩小、混淆等)的选项,但我发现获取原始代码非常简单(使用 JSBeautifier、firebug ,包括混淆脚本等...)。

所以我的问题是 - 有没有一些简单的方法来加密 JS+HTML 文件(所以当简单地解压缩 APK 文件时它们不可读和有用)以及如何在 android 平台的 JAVA 中实现它?

注意:我不懂 JAVA 语言,所以请附上我可以使用的工作示例。

编辑:我在制作最终的 APK 包时也研究了 ProGuard 功能,但它对我来说没用,因为它只处理 JAVA 文件,但保留 assets 目录。

【问题讨论】:

至于“改变方法”的建议——我别无选择。我使用 Phonegap 创建了移动应用程序,因为我没有时间学习 JAVA。所以我不能改变我的方法,因为应用程序已经用 HTML+JS 完成了。 【参考方案1】:

前段时间我有同样的问题,但在 ios 上。结果只是在为 iOS 修补了 PhoneGap 之后。我在http://oleksiy.pro/2011/09/20/phonegap-application-encryption/写了一篇文章。此外,对于 Android,此方法可能很弱,因为 java 代码可能被 99% 反编译,黑客会看到您的密钥。

【讨论】:

ioleksiy:你的补丁看起来很有希望。你认为你可以为 Android 找到类似的解决方案吗? 正如我所说,Android 平台是在 Java 的帮助下编写的。所以,如果你甚至为 Android PhoneGap 创建了这样的补丁,你将需要混淆结果类,所以没有人会反编译代码并查看你的密钥。 尼克,这是个有趣的主意。谢谢。 这不仅在 Android 上很弱,在任何设备上都很弱。如果有人关心,他们会看到代码。 (幸运的是,事实是,在 99% 的情况下,没有人关心你的愚蠢代码——谁愿意维护别人无法破译的代码?如果他们想要你的应用程序的功能,他们只会复制二进制文件。)【参考方案2】:

没有简单的方法可以做到这一点。如果你想加密你的 javascript,你需要某种密钥来解密它。密钥无法存储在设备上,因为这样很容易找到密钥并解密源代码。如果您的应用程序需要用户登录,您可能会在用户登录后返回加密密钥并使用该密钥来解密 JS 和 HTML 文件。您可以通过 PhoneGap 插件使用标准的 Android 加密库。

话虽如此,它只是 JavaScript,所以如果你真的需要加密某些东西,你可能应该考虑改变你的方法。

【讨论】:

你能提供一些关于你所说的PhoneGap插件的链接吗?我找不到任何可以轻松使用的东西.. @Frodik 你最终找到了这个吗?【参考方案3】:

我发现的最佳组合是DojoToolkit 和高级模式下的闭包编译器。

高级模式下的闭包使得 JavaScript 代码几乎不可能进行逆向工程,即使在通过美化器之后也是如此。一旦您的 JavaScript 代码被混淆,无法识别并且无法进行逆向工程,您的 HTML 就不会泄露您的大部分秘密。

此链接用于在移动应用程序的高级模式下将 Dojo Toolkit 与 Closure Compiler 一起使用:

http://dojo-toolkit.33424.n3.nabble.com/file/n2636749/Using_the_Dojo_Toolkit_with_the_Closure_Compiler.pdf?by-user=t

当然,Dojo Toolkit 可以很好地与 PhoneGap 配合使用。

【讨论】:

【参考方案4】:

您可以使用 webview 并加载 base64 字符串:

protected String base64Str = "+wL00h2L....";
wv1.loadData(base64Str, "text/html; charset=utf-8", "base64");

【讨论】:

你能解释一下吗?我们如何在cordova android应用程序中进行自定义(解密加密数据)?我们如何自定义 WebResourceResponse?或者我们如何在基于科尔多瓦的混合应用程序中使用 shouldInterceptRequest() ??

以上是关于如何在 Android Phonegap 移动应用中加密 HTML+JS 资产?的主要内容,如果未能解决你的问题,请参考以下文章

Phonegap - 为 Android 应用添加启动画面

PhoneGap Build - 如何将文件保存到移动设备?

PhoneGap Android + jQuery 移动应用不向下滚动

用于 Android iOS Windows 手机的基于 Phonegap 的移动持久数据存储

Phonegap 状态栏样式默认或回退 android 低于 6

GPS 追踪器与 jQuery 移动、PhoneGap 和谷歌地图