diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhEngine.kt b/app/src/main/java/com/hippo/ehviewer/client/EhEngine.kt index d0326f271..46416da7a 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhEngine.kt +++ b/app/src/main/java/com/hippo/ehviewer/client/EhEngine.kt @@ -55,12 +55,14 @@ import okhttp3.MediaType.Companion.toMediaType import okhttp3.MultipartBody import okhttp3.Request import okhttp3.RequestBody.Companion.asRequestBody +import okio.ByteString.Companion.decodeHex import org.json.JSONArray import org.jsoup.Jsoup import org.jsoup.nodes.Element import org.jsoup.nodes.TextNode import java.io.File import java.util.function.Consumer +import kotlin.experimental.xor import kotlin.math.ceil private const val TAG = "EhEngine" @@ -129,11 +131,13 @@ private fun resolveEmailProtected(origin: String): String { if (EMAIL_PROTECTED in text()) { if (EMAIL_PROTECTED in ownText()) { forEachNode( - Consumer { - if (it is TextNode) { - if (EMAIL_PROTECTED in it.text()) { - val encoded = attr("data-cfemail") - resolvedEmailList.add(encoded) + Consumer { node -> + if (node is TextNode) { + if (EMAIL_PROTECTED in node.text()) { + val encoded = attr("data-cfemail").chunked(2).toMutableList() + val k = encoded.removeFirst().decodeHex()[0] + val email = encoded.map { it.decodeHex()[0] xor k }.fold("") { s, c -> s + c.toInt().toChar() } + resolvedEmailList.add(email) } } },