Added new Cocomanhua decryption key. Changed decryption logic to use a series of decryption keys (#5312)

This commit is contained in:
Ming Kit 2021-01-05 00:58:37 +08:00 committed by GitHub
parent 34ee25aa50
commit 8b375593ff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 8 deletions

View File

@ -5,7 +5,7 @@ ext {
extName = 'CoCoManhua (OhManhua)'
pkgNameSuffix = 'zh.onemanhua'
extClass = '.Onemanhua'
extVersionCode = 6
extVersionCode = 7
libVersion = '1.2'
}

View File

@ -26,8 +26,9 @@ class Onemanhua : ParsedHttpSource() {
override val name = "COCO漫画 (OH漫画)"
override val baseUrl = "https://www.cocomanhua.com/"
private var decryptKey1 = "fw12558899ertyui"
private var decryptKey2 = "fw125gjdi9ertyui"
// Prepend with new decrypt keys (latest keys should appear at the start of the array)
private var decryptKey1Arr = arrayOf("fw122587mkertyui", "fw12558899ertyui")
private var decryptKey2Arr = arrayOf("fw125gjdi9ertyui")
// Common
private var commonSelector = "li.fed-list-item"
@ -160,7 +161,7 @@ class Onemanhua : ParsedHttpSource() {
// 1. get C_DATA from HTML
val encodedData = getEncodedMangaData(document)
// 2. decrypt C_DATA
val decryptedData = decodeAndDecrypt(encodedData, decryptKey1)
val decryptedData = decodeAndDecrypt("encodedData", encodedData, decryptKey1Arr)
// 3. Extract values from C_DATA to formulate page urls
val imgType = regexExtractStringValue(
@ -215,7 +216,7 @@ class Onemanhua : ParsedHttpSource() {
"enc_code2:\"(.+?)\"",
"Unable to match for enc_code2"
)
val decryptedRelativePath = decodeAndDecrypt(encodedRelativePath, decryptKey2)
val decryptedRelativePath = decodeAndDecrypt("encodedRelativePath", encodedRelativePath, decryptKey2Arr)
// Decode and decrypt total pages
val encodedTotalPages = regexExtractStringValue(
@ -223,7 +224,7 @@ class Onemanhua : ParsedHttpSource() {
"enc_code1:\"(.+?)\"",
"Unable to match for enc_code1"
)
val decryptedTotalPages = Integer.parseInt(decodeAndDecrypt(encodedTotalPages, decryptKey1))
val decryptedTotalPages = Integer.parseInt(decodeAndDecrypt("encodedTotalPages", encodedTotalPages, decryptKey1Arr))
return mutableListOf<Page>().apply {
for (i in startImg..decryptedTotalPages) {
@ -250,9 +251,19 @@ class Onemanhua : ParsedHttpSource() {
throw Error("Unable to match for C_DATA")
}
private fun decodeAndDecrypt(value: String, key: String): String {
private fun decodeAndDecrypt(decodeName: String, value: String, keyArr: Array<String>): String {
val decodedValue = String(Base64.decode(value, Base64.NO_WRAP))
return decryptAES(decodedValue, key)
for (key in keyArr) {
try {
return decryptAES(decodedValue, key)
} catch (ex: Exception) {
if (ex.toString() != "Decryption failed") {
throw ex
}
}
}
throw Exception("Decryption failed ($decodeName exhausted keys)")
}
@SuppressLint("GetInstance")