一些修改
This commit is contained in:
@ -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) {
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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])
|
Reference in New Issue
Block a user