From ff63c420ebb807de63f8fc42a6db167e0738e99f Mon Sep 17 00:00:00 2001 From: MengYX Date: Wed, 18 Mar 2020 23:03:39 +0800 Subject: [PATCH] Add Header Check For .mgg --- src/decrypt/qmcMask.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/decrypt/qmcMask.js b/src/decrypt/qmcMask.js index 0a2698e..81dc177 100644 --- a/src/decrypt/qmcMask.js +++ b/src/decrypt/qmcMask.js @@ -1,4 +1,4 @@ -import {FLAC_HEADER, IsBytesEqual} from "./util" +import {FLAC_HEADER, IsBytesEqual, OGG_HEADER} from "./util" const QMOggConstHeader = [ 0x4F, 0x67, 0x67, 0x53, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -119,18 +119,18 @@ export function QmcMaskDetectMflac(data) { } catch (e) { } } - return mask + return mask; } -export function QmcMaskDetectMgg(input) { - if (input.length < QMOggConstHeader.length) return; +export function QmcMaskDetectMgg(data) { + if (data.length < QMOggConstHeader.length) return; let matrixConfidence = {}; for (let i = 0; i < 58; i++) matrixConfidence[i] = {}; for (let idx128 = 0; idx128 < QMOggConstHeader.length; idx128++) { if (QMOggConstHeaderConfidence[idx128] === 0) continue; let idx58 = GetMask58Index(idx128); - let mask = input[idx128] ^ QMOggConstHeader[idx128]; + let mask = data[idx128] ^ QMOggConstHeader[idx128]; let confidence = QMOggConstHeaderConfidence[idx128]; if (mask in matrixConfidence[idx58]) { matrixConfidence[idx58][mask] += confidence @@ -146,7 +146,9 @@ export function QmcMaskDetectMgg(input) { } catch (e) { return; } - return new QmcMask(matrix, superA, superB); + const mask = new QmcMask(matrix, superA, superB); + if (!IsBytesEqual(OGG_HEADER, mask.Decrypt(data.slice(0, OGG_HEADER.length)))) return; + return mask; } export function QmcMaskCreate128(mask128) {