From 1115b9dea3956acd375e380b007b4d720ee28c11 Mon Sep 17 00:00:00 2001 From: enimax-anime <107899019+enimax-anime@users.noreply.github.com> Date: Thu, 1 Dec 2022 13:01:46 -0800 Subject: [PATCH] Fixed #1027 (#1049) --- .../animeextension/en/zoro/extractors/ZoroExtractor.kt | 7 ++++++- .../tachiyomi/animeextension/en/zoro/utils/Decryptor.kt | 4 ++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/en/zoro/src/eu/kanade/tachiyomi/animeextension/en/zoro/extractors/ZoroExtractor.kt b/src/en/zoro/src/eu/kanade/tachiyomi/animeextension/en/zoro/extractors/ZoroExtractor.kt index e11839cc0..eacecdff0 100644 --- a/src/en/zoro/src/eu/kanade/tachiyomi/animeextension/en/zoro/extractors/ZoroExtractor.kt +++ b/src/en/zoro/src/eu/kanade/tachiyomi/animeextension/en/zoro/extractors/ZoroExtractor.kt @@ -36,10 +36,15 @@ class ZoroExtractor(private val client: OkHttpClient) { val srcRes = newClient.newCall(GET(SOURCES_URL + id, cache = cacheControl)) .execute() .body!!.string() + + val key = newClient.newCall(GET("https://raw.githubusercontent.com/consumet/rapidclown/main/key.txt")) + .execute() + .body!!.string() + if ("\"encrypted\":false" in srcRes) return srcRes if (!srcRes.contains("{\"sources\":")) return null val encrypted = srcRes.substringAfter("sources\":\"").substringBefore("\"") - val decrypted = Decryptor.decrypt(encrypted, cachedJs) ?: return null + val decrypted = Decryptor.decrypt(encrypted, key) ?: return null val end = srcRes.replace("\"$encrypted\"", decrypted) return end } diff --git a/src/en/zoro/src/eu/kanade/tachiyomi/animeextension/en/zoro/utils/Decryptor.kt b/src/en/zoro/src/eu/kanade/tachiyomi/animeextension/en/zoro/utils/Decryptor.kt index de9866bc3..d7006faf0 100644 --- a/src/en/zoro/src/eu/kanade/tachiyomi/animeextension/en/zoro/utils/Decryptor.kt +++ b/src/en/zoro/src/eu/kanade/tachiyomi/animeextension/en/zoro/utils/Decryptor.kt @@ -9,11 +9,11 @@ import javax.crypto.spec.SecretKeySpec object Decryptor { - fun decrypt(encodedData: String, js: String): String? { + fun decrypt(encodedData: String, remoteKey: String): String? { val saltedData = Base64.decode(encodedData, Base64.DEFAULT) val salt = saltedData.copyOfRange(8, 16) val ciphertext = saltedData.copyOfRange(16, saltedData.size) - val password = FindPassword.getPassword(js).toByteArray() + val password = remoteKey.toByteArray() val (key, iv) = GenerateKeyAndIv(password, salt) ?: return null val keySpec = SecretKeySpec(key, "AES") val ivSpec = IvParameterSpec(iv)