一些修改

This commit is contained in:
awalol
2024-02-14 16:59:05 +08:00
parent 2941a9ac76
commit 1c5310ffae
6 changed files with 24 additions and 29 deletions

View File

@ -1,18 +1,17 @@
package qmc
import (
"encoding/base64"
"errors"
"fmt"
"os"
"path/filepath"
"runtime"
"git.unlock-music.dev/awalol/go-mmkv"
"github.com/samber/lo"
"go.uber.org/zap"
"golang.org/x/exp/slices"
"golang.org/x/text/unicode/norm"
"unlock-music.dev/mmkv"
)
var streamKeyVault mmkv.Vault
@ -107,11 +106,7 @@ func readKeyFromMMKVCustom(mid string) ([]byte, error) {
if err != nil {
return nil, fmt.Errorf("get eKey error: %w", err)
}
n, err := base64.StdEncoding.Decode(eKey, eKey)
if err != nil {
return nil, fmt.Errorf("base64 error: %w", err)
}
return deriveKeyV1(eKey[:n])
return deriveKey(eKey)
}
func getRelativeMMKVDir(file string) (string, error) {

View File

@ -40,8 +40,6 @@ type Decoder struct {
// provider
logger *zap.Logger
footer qqMusicTagMusicEx
}
// Read implements io.Reader, offer the decrypted audio data.
@ -147,12 +145,13 @@ func (d *Decoder) searchKey() (err error) {
case "STag":
return errors.New("qmc: file with 'STag' suffix doesn't contains media key")
case "cex\x00":
audioLen, err := d.footer.Read(d.raw)
footer := qqMusicTagMusicEx{}
audioLen, err := footer.Read(d.raw)
if err != nil {
return err
}
d.audioLen = int(audioLen)
d.decodedKey, err = readKeyFromMMKVCustom(d.footer.mediafile)
d.decodedKey, err = readKeyFromMMKVCustom(footer.mediafile)
if err != nil {
return err
}

View File

@ -43,15 +43,17 @@ func (tag *qqMusicTagMusicEx) Read(raw io.ReadSeeker) (int64, error) {
for i := 0; i < 30; i++ {
u := binary.LittleEndian.Uint16(buf[12+i*2 : 12+(i+1)*2])
if u != 0 {
tag.mid += string(u)
if u == 0 {
break
}
tag.mid += string(u)
}
for i := 0; i < 50; i++ {
u := binary.LittleEndian.Uint16(buf[72+i*2 : 72+(i+1)*2])
if u != 0 {
tag.mediafile += string(u)
if u == 0 {
break
}
tag.mediafile += string(u)
}
tag.unknown_3 = binary.LittleEndian.Uint32(buf[173:177])