diff --git a/src/decrypt/qmc.ts b/src/decrypt/qmc.ts index 6efa3eb..2b5c6d7 100644 --- a/src/decrypt/qmc.ts +++ b/src/decrypt/qmc.ts @@ -177,16 +177,14 @@ export class QmcDecoder { this.audioSize = this.size - keySize - 8 const rawKey = this.file.subarray(this.audioSize, this.size - 8) const keyEnd = rawKey.findIndex(v => v == QmcDecoder.BYTE_COMMA) - const keyDec = QmcDeriveKey(rawKey.subarray(0, keyEnd)) - this.cipher = new QmcRC4Cipher(keyDec) + this.setCipher(rawKey.subarray(0, keyEnd)) } else { const sizeView = new DataView(last4Byte.buffer, last4Byte.byteOffset); const keySize = sizeView.getUint32(0, true) if (keySize < 0x300) { this.audioSize = this.size - keySize - 4 const rawKey = this.file.subarray(this.audioSize, this.size - 4) - const keyDec = QmcDeriveKey(rawKey) - this.cipher = new QmcMapCipher(keyDec) + this.setCipher(rawKey) } else { this.audioSize = this.size this.cipher = new QmcStaticCipher() @@ -194,5 +192,14 @@ export class QmcDecoder { } } + private setCipher(keyRaw: Uint8Array) { + const keyDec = QmcDeriveKey(keyRaw) + if (keyDec.length > 300) { + this.cipher = new QmcRC4Cipher(keyDec) + } else { + this.cipher = new QmcMapCipher(keyDec) + } + } + }