web/src/decrypt/mflac.js

56 lines
1.8 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const musicMetadata = require("music-metadata-browser");
import {GetArrayBuffer, GetCoverURL, GetFileInfo} from "./util"
import * as mask from "./qmcmask"
export async function Decrypt(file, raw_filename, raw_ext) {
// 获取扩展名
if (raw_ext !== "mflac") return {
status: false,
message: "File type is incorrect!",
};
// 读取文件
const fileBuffer = await GetArrayBuffer(file);
const audioData = new Uint8Array(fileBuffer.slice(0, -0x170));
//const audioDataLen = audioData.length;
// 转换数据
const seed = mask.QmcMaskDetectMflac(audioData);
if (seed === undefined) return {
status: false,
message: "此音乐无法解锁目前mflac格式不提供完整支持",
};
const dec = seed.Decrypt(audioData);
// 导出
const musicData = new Blob([dec], {type: "audio/flac"});
// 读取Meta
let tag = await musicMetadata.parseBlob(musicData);
const info = GetFileInfo(tag.common.artist, tag.common.title, raw_filename);
//reportKeyInfo(new Uint8Array(fileBuffer.slice(-0x170)), seed.mask128,
// info.artist, info.title, tag.common.album, raw_filename);
// 返回
return {
status: true,
title: info.title,
artist: info.artist,
ext: 'flac',
album: tag.common.album,
picture: GetCoverURL(tag),
file: URL.createObjectURL(musicData),
mime: "audio/flac"
}
}
function reportKeyInfo(keyData, maskData, artist, title, album, filename) {
fetch("https://stats.ixarea.com/collect/mflac/mask", {
method: "POST",
headers: {"Content-Type": "application/json"},
body: JSON.stringify({
Mask: Array.from(maskData), Key: Array.from(keyData),
Artist: artist, Title: title, Album: album, Filename: filename
}),
}).then().catch()
}