diff --git a/src/decrypt/kwm.js b/src/decrypt/kwm.js index d2d0cc2..444bd17 100644 --- a/src/decrypt/kwm.js +++ b/src/decrypt/kwm.js @@ -21,17 +21,6 @@ export async function Decrypt(file, raw_filename, raw_ext) { let fileKey = oriData.slice(0x18, 0x20) let mask = createMaskFromKey(fileKey) - - function Uint8ArrayToString(fileData) { - var dataString = ""; - for (var i = 0; i < fileData.length; i++) { - dataString += String.fromCharCode(fileData[i]); - } - - return dataString - } - - let audioData = oriData.slice(0x400); let lenAudioData = audioData.length; for (let cur = 0; cur < lenAudioData; ++cur) diff --git a/src/decrypt/ncm.js b/src/decrypt/ncm.js index ffd553e..e7bd16f 100644 --- a/src/decrypt/ncm.js +++ b/src/decrypt/ncm.js @@ -1,14 +1,22 @@ const CryptoJS = require("crypto-js"); const CORE_KEY = CryptoJS.enc.Hex.parse("687a4852416d736f356b496e62617857"); const META_KEY = CryptoJS.enc.Hex.parse("2331346C6A6B5F215C5D2630553C2728"); -import {AudioMimeType, DetectAudioExt, GetArrayBuffer, GetFileInfo, GetWebImage, WriteMp3Meta} from "./util" +const MagicHeader = [0x43, 0x54, 0x45, 0x4E, 0x46, 0x44, 0x41, 0x4D]; +import { + AudioMimeType, + DetectAudioExt, + GetArrayBuffer, + GetFileInfo, + GetWebImage, + IsBytesEqual, + WriteMp3Meta +} from "./util" export async function Decrypt(file, raw_filename, raw_ext) { const fileBuffer = await GetArrayBuffer(file); const dataView = new DataView(fileBuffer); - if (dataView.getUint32(0, true) !== 0x4e455443 || - dataView.getUint32(4, true) !== 0x4d414446) + if (!IsBytesEqual(MagicHeader, new Uint8Array(fileBuffer, 0, 8))) return {status: false, message: "此ncm文件已损坏"}; const keyDataObj = getKeyData(dataView, fileBuffer, 10); @@ -22,7 +30,6 @@ export async function Decrypt(file, raw_filename, raw_ext) { let lenAudioData = audioData.length; for (let cur = 0; cur < lenAudioData; ++cur) audioData[cur] ^= keyBox[cur & 0xff]; - if (musicMeta.album === undefined) musicMeta.album = ""; const artists = []; @@ -132,7 +139,6 @@ function getMetaData(dataView, fileBuffer, offset) { if (plainText.slice(0, labelIndex) === "dj") { result = result.mainMusic; } - console.log(result); if (!!result.albumPic) result.albumPic = result.albumPic.replace("http://", "https://"); return {data: result, offset: offset}; }