save resource packs to subfolder
fix saving non drm resource packs
This commit is contained in:
parent
f381938c95
commit
17e0bacdd8
52
main.go
52
main.go
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue