У меня есть приложение, которое использует веб-просмотр для отображения контента, а вызовы Javascript контролируют мое приложение.
Чтобы обеспечить уровень безопасности, я запутал код. Этого недостаточно, поскольку я хотел бы зашифровать файлы html и js, а затем расшифровать их во время выполнения. Я упаковал файл apk этими ресурсами, зашифрованными по алгоритму RC4. При загрузке файлов я расшифровываю файлы javascript, загружаю их, а затем дешифрую HTML-файл и загружаю его. Однако это не работает, так как веб-контент отображает сообщение в виде: веб-страница в data: 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) {
}
}
}
}