diff options
author | Allan Wang <me@allanwang.ca> | 2019-08-15 22:08:57 -0700 |
---|---|---|
committer | Allan Wang <me@allanwang.ca> | 2019-08-15 22:08:57 -0700 |
commit | 39d07d946b753f197d200fa07792670e37435a95 (patch) | |
tree | 56444cfe379a491e14db26608dd7c4572aedad55 /app/src/main/kotlin/com/pitchedapps/frost/injectors | |
parent | f12762c4175e37a6f887ca17a07ddb4fc7508849 (diff) | |
parent | e47d5d47c0997b9a696f4f8881f4a057e2a5f934 (diff) | |
download | frost-39d07d946b753f197d200fa07792670e37435a95.tar.gz frost-39d07d946b753f197d200fa07792670e37435a95.tar.bz2 frost-39d07d946b753f197d200fa07792670e37435a95.zip |
Merge obfuscator
Diffstat (limited to 'app/src/main/kotlin/com/pitchedapps/frost/injectors')
-rw-r--r-- | app/src/main/kotlin/com/pitchedapps/frost/injectors/JsInjector.kt | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsInjector.kt b/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsInjector.kt index 40e3827c..3416c420 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsInjector.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsInjector.kt @@ -17,9 +17,11 @@ package com.pitchedapps.frost.injectors import android.webkit.WebView +import androidx.annotation.VisibleForTesting +import com.pitchedapps.frost.utils.L import com.pitchedapps.frost.web.FrostWebViewClient import org.apache.commons.text.StringEscapeUtils -import java.util.Locale +import kotlin.random.Random class JsBuilder { private val css = StringBuilder() @@ -38,7 +40,7 @@ class JsBuilder { } fun single(tag: String): JsBuilder { - this.tag = "_frost_${tag.toLowerCase(Locale.CANADA)}" + this.tag = TagObfuscator.obfuscateTag(tag) return this } @@ -107,3 +109,34 @@ class JsInjector(val function: String) : InjectorContract { override fun inject(webView: WebView) = webView.evaluateJavascript(function, null) } + +/** + * Helper object to obfuscate window tags for JS injection. + */ +@VisibleForTesting +internal object TagObfuscator { + + fun obfuscateTag(tag: String): String { + val rnd = Random(tag.hashCode() + salt) + val obfuscated = buildString { + append(prefix) + append('_') + appendRandomChars(rnd, 16) + } + L.v { "TagObfuscator: Obfuscating tag '$tag' to '$obfuscated'" } + return obfuscated + } + + private val salt: Long = System.currentTimeMillis() + + private val prefix: String by lazy { + val rnd = Random(System.currentTimeMillis()) + buildString { appendRandomChars(rnd, 8) } + } + + private fun Appendable.appendRandomChars(random: Random, count: Int) { + for (i in 1..count) { + append('a' + random.nextInt(26)) + } + } +} |