save resource packs to subfolder

fix saving non drm resource packs
This commit is contained in:
olebeck 2022-02-20 13:56:09 +01:00
parent f381938c95
commit 17e0bacdd8
2 changed files with 43 additions and 34 deletions

52
main.go
View File

@ -125,6 +125,12 @@ func main() {
target += ":19132"
}
host, _, err := net.SplitHostPort(target)
if err != nil {
fmt.Fprintf(os.Stderr, "Invalid target: %s\n", err)
os.Exit(1)
}
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
ctx, cancel := context.WithCancel(context.Background())
@ -145,16 +151,14 @@ func main() {
token := get_token()
src := auth.RefreshTokenSource(&token)
var packet_func func(header packet.Header, payload []byte, src, dst net.Addr)
var packet_func func(header packet.Header, payload []byte, src, dst net.Addr) = nil
if debug {
packet_func = PacketLogger
} else {
packet_func = nil
}
// connect
fmt.Printf("Connecting to %s\n", target)
serverConn, err := minecraft.Dialer{
serverConn, err = minecraft.Dialer{
TokenSource: src,
PacketFunc: packet_func,
}.DialContext(ctx, "raknet", target)
@ -174,29 +178,29 @@ func main() {
}
println("Connected")
println("ripping Resource Packs")
// dump keys, download and decrypt the packs
keys := make(map[string]string)
for _, pack := range serverConn.ResourcePacks() {
keys[pack.UUID()] = pack.ContentKey()
fmt.Printf("ResourcePack(Id: %s Key: %s | Name: %s Version: %s)\n", pack.UUID(), keys[pack.UUID()], pack.Name(), pack.Version())
if len(serverConn.ResourcePacks()) > 0 {
println("ripping Resource Packs")
os.Mkdir(host, 0777)
fmt.Printf("Downloading...\n")
pack_data, err := download_pack(pack)
if err != nil {
panic(err)
}
if save_encrypted {
os.WriteFile(pack.Name()+".ENCRYPTED.zip", pack_data, 0666)
}
fmt.Printf("Decrypting...\n")
if err := decrypt_pack(pack_data, pack.Name()+".mcpack", keys[pack.UUID()]); err != nil {
panic(fmt.Errorf("failed to decrypt %s: %s", pack.Name(), err))
}
}
// dump keys, download and decrypt the packs
keys := make(map[string]string)
for _, pack := range serverConn.ResourcePacks() {
keys[pack.UUID()] = pack.ContentKey()
fmt.Printf("ResourcePack(Id: %s Key: %s | Name: %s Version: %s)\n", pack.UUID(), keys[pack.UUID()], pack.Name(), pack.Version())
if len(keys) > 0 {
pack_data, err := download_pack(pack)
if err != nil {
panic(fmt.Errorf("failed to download pack: %s", err))
}
if save_encrypted {
os.WriteFile(host+"/"+pack.Name()+".ENCRYPTED.zip", pack_data, 0666)
}
fmt.Printf("Decrypting...\n")
if err := decrypt_pack(pack_data, host+"/"+pack.Name()+".mcpack", keys[pack.UUID()]); err != nil {
panic(fmt.Errorf("failed to decrypt %s: %s", pack.Name(), err))
}
}
fmt.Printf("Writing keys to %s\n", KEYS_FILE)
dump_keys(keys)
} else {

View File

@ -59,17 +59,22 @@ func decrypt_pack(pack_zip []byte, filename, key string) error {
{
ff, err := z.Open("contents.json")
if err != nil {
return err
if os.IsNotExist(err) {
content = ContentJson{}
} else {
return err
}
} else {
buf, _ := io.ReadAll(ff)
dec, _ := cfb_decrypt(buf[0x100:], []byte(key))
dec = bytes.Split(dec, []byte("\x00"))[0] // remove trailing \x00 (example: play.galaxite.net)
fw, _ := zw.Create("contents.json")
fw.Write(dec)
if err := json.Unmarshal(dec, &content); err != nil {
return err
}
written["contents.json"] = true
}
buf, _ := io.ReadAll(ff)
dec, _ := cfb_decrypt(buf[0x100:], []byte(key))
dec = bytes.Split(dec, []byte("\x00"))[0] // remove trailing \x00 (example: play.galaxite.net)
fw, _ := zw.Create("contents.json")
fw.Write(dec)
if err := json.Unmarshal(dec, &content); err != nil {
return err
}
written["contents.json"] = true
}
// copy and decrypt all content