У меня есть приложение, которое использует веб-просмотр для отображения содержимого, а вызовы Javascript являются контроллером моего приложения. Для обеспечения уровня безопасности я обфускал код. Этого недостаточно, поскольку я хотел бы зашифровать файлы html и js, а затем расшифровать их во время выполнения. Я упаковал файл apk с этими ресурсами, зашифрованными с помощью RC4-алгоритма. При загрузке файлов я дешифрую файлы javascript, загружаю их, а затем расшифровываю файл html и загружаю. Однако это не работает, так как webcontent отображает сообщение в виде: веб-страницы в данных: text/html может быть временно недоступен или может быть постоянно перемещен и т. Д. И т. Д. Я перегрузил onLoadResource, чтобы увидеть, что содержимое загружается, и я вижу, что он загружает содержимое Javascript, но загруженный контент также выведен из html.android webview зашифрованный контент
Мои вопросы: 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) {
}
}
}
}
Вопрос: Вы заметили задержку при этом? У меня также есть компилятор, который сжимает весь контент до max и объединяет файлы css, js (скомпилированные с компилятором Google закрытия), изображения (base64) и т. Д. В один файл. Это работает очень хорошо. Размер файла составляет, например, 1,2 МБ. Размер кажется без проблем, он быстро загружается. Но когда я использовал шифрование, подобное вам, полезно распаковать его в памяти. Представляет ли это наводнение? – Codebeat