mirror of
https://github.com/CosmicStar98/bedrocktool.git
synced 2024-06-26 04:49:45 +00:00
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"
|
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)
|
sigs := make(chan os.Signal, 1)
|
||||||
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
|
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
|
||||||
ctx, cancel := context.WithCancel(context.Background())
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
|
@ -145,16 +151,14 @@ func main() {
|
||||||
token := get_token()
|
token := get_token()
|
||||||
src := auth.RefreshTokenSource(&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 {
|
if debug {
|
||||||
packet_func = PacketLogger
|
packet_func = PacketLogger
|
||||||
} else {
|
|
||||||
packet_func = nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// connect
|
// connect
|
||||||
fmt.Printf("Connecting to %s\n", target)
|
fmt.Printf("Connecting to %s\n", target)
|
||||||
serverConn, err := minecraft.Dialer{
|
serverConn, err = minecraft.Dialer{
|
||||||
TokenSource: src,
|
TokenSource: src,
|
||||||
PacketFunc: packet_func,
|
PacketFunc: packet_func,
|
||||||
}.DialContext(ctx, "raknet", target)
|
}.DialContext(ctx, "raknet", target)
|
||||||
|
@ -174,29 +178,29 @@ func main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
println("Connected")
|
println("Connected")
|
||||||
println("ripping Resource Packs")
|
|
||||||
|
|
||||||
// dump keys, download and decrypt the packs
|
if len(serverConn.ResourcePacks()) > 0 {
|
||||||
keys := make(map[string]string)
|
println("ripping Resource Packs")
|
||||||
for _, pack := range serverConn.ResourcePacks() {
|
os.Mkdir(host, 0777)
|
||||||
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())
|
|
||||||
|
|
||||||
fmt.Printf("Downloading...\n")
|
// dump keys, download and decrypt the packs
|
||||||
pack_data, err := download_pack(pack)
|
keys := make(map[string]string)
|
||||||
if err != nil {
|
for _, pack := range serverConn.ResourcePacks() {
|
||||||
panic(err)
|
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 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))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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)
|
fmt.Printf("Writing keys to %s\n", KEYS_FILE)
|
||||||
dump_keys(keys)
|
dump_keys(keys)
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -59,17 +59,22 @@ func decrypt_pack(pack_zip []byte, filename, key string) error {
|
||||||
{
|
{
|
||||||
ff, err := z.Open("contents.json")
|
ff, err := z.Open("contents.json")
|
||||||
if err != nil {
|
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
|
// copy and decrypt all content
|
||||||
|
|
Loading…
Reference in New Issue
Block a user