我有一个使用webview来显示内容的应用程序,而Javascript调用是我的应用程序的控制器。 为了提供一定程度的安全性,我对代码进行了模糊处理。这还不够,因为我想加密html和js文件,然后在运行时解密它们。我用这些用RC4算法加密的资源打包了apk文件。在加载文件时,我正在解密javascript文件,加载它们然后解密html文件并加载它。但是这不起作用,因为webcontent以以下形式显示消息:数据的网页:text / html可能暂时关闭或者可能已永久移动等等。 我重载了onLoadResource以查看加载了什么内容,我可以看到它加载了Javascript内容,但加载的内容也是html转义。
我的问题是: 1.如何保护html和javascript文件(位于资源文件夹中)以便无法访问? 2.如果我的方法是正确的,有没有人知道我做错了什么?
谢谢!
以下是解密和加载资源的代码:
protected void loadWebContent() {
checkEncryptionEnabled();
loadJSFiles();
logger.info("Loaded js ... going for html");
loadAssetFile("www/index.html", "text/html");
}
private void loadJSFiles() {
String[] jsFilesArray = { "app.js", "iscroll.js", "iui.js", "json.js" };
for (String js : jsFilesArray) {
loadAssetFile("www/js/" + js, "application/javascript");
}
}
private void loadAssetFile(String filePath, String mimeType) {
AssetManager assetMgr = getAssets();
InputStream is = null;
try {
is = assetMgr.open(filePath);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] temp = new byte[512];
int bytesRead = -1;
while ((bytesRead = is.read(temp)) > 0) {
baos.write(temp, 0, bytesRead);
}
byte[] encrypted = baos.toByteArray();
String content = null;
/**
* true
* */
if (Config.ENCRYPTION_ENABLED) {
byte[] decrypted = new RC4Encrypter("rc4_key").rc4(encrypted);
content = new String(decrypted, "utf-8");
} else {
content = new String(encrypted, "utf-8");
}
/**
* The webview to use
* */
if("application/javascript".equals(mimeType)) {
webContent.loadUrl("javascript:" + content);
} else {
webContent.loadData(content, mimeType, "utf-8");
}
} catch (IOException ex) {
logger.error(null, ex);
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
}
}
}
}
答案 0 :(得分:0)
找到第二个问题的答案,而不是:webContent.loadData(content, mimeType, "utf-8");
我使用过:webContent.loadDataWithBaseURL("file:///android_asset/www/", content, mimeType, "utf-8", null);
内容显示没有问题......但是,第一个问题是否有效,而不是;但考虑到一年多没有答案,我会考虑加密数据是可以的。
答案 1 :(得分:0)
只要您还可以保密解密密钥,数据加密就可以了,但上述代码并非如此。在反编译嵌入在APK内的DEX文件后,可以很容易地发现硬编码的解密密钥。
如果要在HTML和JavaScript文件中隐藏应用程序逻辑,并且该应用程序逻辑不需要脱机功能,那么您可以在服务器上外包该应用程序逻辑的代码。
从这里你有两个选择:
您对第一个问题的简短回答是,没有任何方法或技术可以完美保护您的应用程序。我建议您查看How to avoid reverse engineering of an APK file?,了解可能的保护方法概述。