From 6a4d4bdf4a18c9ed7e3818d673e9295315163dc5 Mon Sep 17 00:00:00 2001 From: olebeck <31539311+olebeck@users.noreply.github.com> Date: Sun, 4 Sep 2022 16:53:21 +0200 Subject: [PATCH] move again --- cmd/bedrocktool/main.go | 6 +- .../utils/resourcepack-ace.go.ignore | Bin 6328 -> 0 bytes go.mod | 8 +- go.sum | 2 + .../subcommands => subcommands}/capture.go | 4 +- .../subcommands => subcommands}/merge.go | 4 +- .../skins/skins-proxy.go | 2 +- .../skins/skins.go | 2 +- .../world/chunk_render.go | 2 +- .../world/chunk_test.go | 0 .../world/map_item.go | 2 +- .../world/world.go | 2 +- {cmd/bedrocktool/utils => utils}/auth.go | 0 .../utils => utils}/command_register.go | 0 {cmd/bedrocktool/utils => utils}/dns.go | 0 {cmd/bedrocktool/utils => utils}/images.go | 0 {cmd/bedrocktool/utils => utils}/input.go | 0 {cmd/bedrocktool/utils => utils}/net.go | 0 .../utils => utils}/packet_logger.go | 0 {cmd/bedrocktool/utils => utils}/proxy.go | 0 {cmd/bedrocktool/utils => utils}/realms.go | 0 {cmd/bedrocktool/utils => utils}/replay.go | 0 utils/resourcepack-ace.go.ignore | 281 ++++++++++++++++++ .../utils => utils}/resourcepack.go | 0 {cmd/bedrocktool/utils => utils}/utils.go | 0 {cmd/bedrocktool/utils => utils}/zip.go | 0 26 files changed, 301 insertions(+), 14 deletions(-) delete mode 100644 cmd/bedrocktool/utils/resourcepack-ace.go.ignore rename {cmd/bedrocktool/subcommands => subcommands}/capture.go (97%) rename {cmd/bedrocktool/subcommands => subcommands}/merge.go (97%) rename {cmd/bedrocktool/subcommands => subcommands}/skins/skins-proxy.go (97%) rename {cmd/bedrocktool/subcommands => subcommands}/skins/skins.go (99%) rename {cmd/bedrocktool/subcommands => subcommands}/world/chunk_render.go (97%) rename {cmd/bedrocktool/subcommands => subcommands}/world/chunk_test.go (100%) rename {cmd/bedrocktool/subcommands => subcommands}/world/map_item.go (99%) rename {cmd/bedrocktool/subcommands => subcommands}/world/world.go (99%) rename {cmd/bedrocktool/utils => utils}/auth.go (100%) rename {cmd/bedrocktool/utils => utils}/command_register.go (100%) rename {cmd/bedrocktool/utils => utils}/dns.go (100%) rename {cmd/bedrocktool/utils => utils}/images.go (100%) rename {cmd/bedrocktool/utils => utils}/input.go (100%) rename {cmd/bedrocktool/utils => utils}/net.go (100%) rename {cmd/bedrocktool/utils => utils}/packet_logger.go (100%) rename {cmd/bedrocktool/utils => utils}/proxy.go (100%) rename {cmd/bedrocktool/utils => utils}/realms.go (100%) rename {cmd/bedrocktool/utils => utils}/replay.go (100%) create mode 100644 utils/resourcepack-ace.go.ignore rename {cmd/bedrocktool/utils => utils}/resourcepack.go (100%) rename {cmd/bedrocktool/utils => utils}/utils.go (100%) rename {cmd/bedrocktool/utils => utils}/zip.go (100%) diff --git a/cmd/bedrocktool/main.go b/cmd/bedrocktool/main.go index 930acee..2740d41 100644 --- a/cmd/bedrocktool/main.go +++ b/cmd/bedrocktool/main.go @@ -10,7 +10,11 @@ import ( "regexp" "syscall" - "bedrocktool/cmd/bedrocktool/utils" + "github.com/bedrock-tool/bedrocktool/utils" + + _ "github.com/bedrock-tool/bedrocktool/subcommands" + _ "github.com/bedrock-tool/bedrocktool/subcommands/skins" + _ "github.com/bedrock-tool/bedrocktool/subcommands/world" "github.com/google/subcommands" "github.com/sirupsen/logrus" diff --git a/cmd/bedrocktool/utils/resourcepack-ace.go.ignore b/cmd/bedrocktool/utils/resourcepack-ace.go.ignore deleted file mode 100644 index a8b6feeb6b513b2b655cbe0a949d67f88e04d013..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6328 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 diff --git a/go.mod b/go.mod index d142e88..de94325 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module bedrocktool +module github.com/bedrock-tool/bedrocktool go 1.19 @@ -34,9 +34,9 @@ require ( github.com/jinzhu/copier v0.3.5 github.com/klauspost/compress v1.15.9 // indirect github.com/muhammadmuzzammil1998/jsonc v1.0.0 // indirect - github.com/sandertv/go-raknet v1.11.1 - github.com/sirupsen/logrus v1.9.0 // indirect - go.uber.org/atomic v1.10.0 // indirect + github.com/sandertv/go-raknet v1.11.1 // indirect + github.com/sirupsen/logrus v1.9.0 + go.uber.org/atomic v1.10.0 golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa // indirect golang.org/x/image v0.0.0-20220722155232-062f8c9fd539 golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 // indirect diff --git a/go.sum b/go.sum index 6a8c162..d69f481 100644 --- a/go.sum +++ b/go.sum @@ -55,6 +55,8 @@ github.com/olebeck/gophertunnel v1.24.8-2 h1:T7WY2M/GrKTOgcH1RcDiB8LNlhK+PEzGdHS github.com/olebeck/gophertunnel v1.24.8-2/go.mod h1:dMOw79FHxr2azEqiGH20AwdljisAN1kqwu5SjPBnZ5k= github.com/olebeck/gophertunnel v1.24.8-3 h1:qR5PCFWUAcUureCt36tLqaXWOjHVsFx66PiKm1obtkY= github.com/olebeck/gophertunnel v1.24.8-3/go.mod h1:dMOw79FHxr2azEqiGH20AwdljisAN1kqwu5SjPBnZ5k= +github.com/olebeck/gophertunnel v1.24.8-4 h1:V0Giy93JYDzR6NhtXOw/UcWpY85Jt/czp7xcAfJz22Y= +github.com/olebeck/gophertunnel v1.24.8-4/go.mod h1:dMOw79FHxr2azEqiGH20AwdljisAN1kqwu5SjPBnZ5k= github.com/olebeck/gophertunnel v1.24.8 h1:jdqBOABDAE1yISqzm9IxIrI+/lJApLBjTieynXUSalw= github.com/olebeck/gophertunnel v1.24.8/go.mod h1:dMOw79FHxr2azEqiGH20AwdljisAN1kqwu5SjPBnZ5k= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= diff --git a/cmd/bedrocktool/subcommands/capture.go b/subcommands/capture.go similarity index 97% rename from cmd/bedrocktool/subcommands/capture.go rename to subcommands/capture.go index f32c86f..cd55f5a 100644 --- a/cmd/bedrocktool/subcommands/capture.go +++ b/subcommands/capture.go @@ -1,4 +1,4 @@ -package main +package subcommands import ( "bytes" @@ -10,7 +10,7 @@ import ( "os" "time" - "bedrocktool/cmd/bedrocktool/utils" + "github.com/bedrock-tool/bedrocktool/utils" "github.com/google/gopacket" "github.com/google/gopacket/layers" diff --git a/cmd/bedrocktool/subcommands/merge.go b/subcommands/merge.go similarity index 97% rename from cmd/bedrocktool/subcommands/merge.go rename to subcommands/merge.go index 2b93ae6..7b45642 100644 --- a/cmd/bedrocktool/subcommands/merge.go +++ b/subcommands/merge.go @@ -1,4 +1,4 @@ -package main +package subcommands import ( "context" @@ -8,7 +8,7 @@ import ( "os" "time" - "bedrocktool/cmd/bedrocktool/utils" + "github.com/bedrock-tool/bedrocktool/utils" "github.com/df-mc/dragonfly/server/world/mcdb" "github.com/df-mc/goleveldb/leveldb/opt" diff --git a/cmd/bedrocktool/subcommands/skins/skins-proxy.go b/subcommands/skins/skins-proxy.go similarity index 97% rename from cmd/bedrocktool/subcommands/skins/skins-proxy.go rename to subcommands/skins/skins-proxy.go index 51f6358..5f59f45 100644 --- a/cmd/bedrocktool/subcommands/skins/skins-proxy.go +++ b/subcommands/skins/skins-proxy.go @@ -6,7 +6,7 @@ import ( "fmt" "os" - "bedrocktool/cmd/bedrocktool/utils" + "github.com/bedrock-tool/bedrocktool/utils" "github.com/google/subcommands" "github.com/sandertv/gophertunnel/minecraft/protocol/packet" diff --git a/cmd/bedrocktool/subcommands/skins/skins.go b/subcommands/skins/skins.go similarity index 99% rename from cmd/bedrocktool/subcommands/skins/skins.go rename to subcommands/skins/skins.go index 9e9bd48..119e446 100644 --- a/cmd/bedrocktool/subcommands/skins/skins.go +++ b/subcommands/skins/skins.go @@ -13,7 +13,7 @@ import ( "path" "strings" - "bedrocktool/cmd/bedrocktool/utils" + "github.com/bedrock-tool/bedrocktool/utils" "github.com/flytam/filenamify" "github.com/google/subcommands" diff --git a/cmd/bedrocktool/subcommands/world/chunk_render.go b/subcommands/world/chunk_render.go similarity index 97% rename from cmd/bedrocktool/subcommands/world/chunk_render.go rename to subcommands/world/chunk_render.go index 37e0625..2135690 100644 --- a/cmd/bedrocktool/subcommands/world/chunk_render.go +++ b/subcommands/world/chunk_render.go @@ -4,7 +4,7 @@ import ( "image" "image/color" - "bedrocktool/cmd/bedrocktool/utils" + "github.com/bedrock-tool/bedrocktool/utils" "github.com/df-mc/dragonfly/server/block" "github.com/df-mc/dragonfly/server/block/cube" diff --git a/cmd/bedrocktool/subcommands/world/chunk_test.go b/subcommands/world/chunk_test.go similarity index 100% rename from cmd/bedrocktool/subcommands/world/chunk_test.go rename to subcommands/world/chunk_test.go diff --git a/cmd/bedrocktool/subcommands/world/map_item.go b/subcommands/world/map_item.go similarity index 99% rename from cmd/bedrocktool/subcommands/world/map_item.go rename to subcommands/world/map_item.go index 63f6e19..2b7ba24 100644 --- a/cmd/bedrocktool/subcommands/world/map_item.go +++ b/subcommands/world/map_item.go @@ -9,7 +9,7 @@ import ( "sync" "time" - "bedrocktool/cmd/bedrocktool/utils" + "github.com/bedrock-tool/bedrocktool/utils" "github.com/df-mc/dragonfly/server/world/chunk" "github.com/sandertv/gophertunnel/minecraft/protocol" diff --git a/cmd/bedrocktool/subcommands/world/world.go b/subcommands/world/world.go similarity index 99% rename from cmd/bedrocktool/subcommands/world/world.go rename to subcommands/world/world.go index 01c6ba4..873b5dc 100644 --- a/cmd/bedrocktool/subcommands/world/world.go +++ b/subcommands/world/world.go @@ -15,7 +15,7 @@ import ( "strings" "time" - "bedrocktool/cmd/bedrocktool/utils" + "github.com/bedrock-tool/bedrocktool/utils" "github.com/df-mc/dragonfly/server/block/cube" "github.com/df-mc/dragonfly/server/world" diff --git a/cmd/bedrocktool/utils/auth.go b/utils/auth.go similarity index 100% rename from cmd/bedrocktool/utils/auth.go rename to utils/auth.go diff --git a/cmd/bedrocktool/utils/command_register.go b/utils/command_register.go similarity index 100% rename from cmd/bedrocktool/utils/command_register.go rename to utils/command_register.go diff --git a/cmd/bedrocktool/utils/dns.go b/utils/dns.go similarity index 100% rename from cmd/bedrocktool/utils/dns.go rename to utils/dns.go diff --git a/cmd/bedrocktool/utils/images.go b/utils/images.go similarity index 100% rename from cmd/bedrocktool/utils/images.go rename to utils/images.go diff --git a/cmd/bedrocktool/utils/input.go b/utils/input.go similarity index 100% rename from cmd/bedrocktool/utils/input.go rename to utils/input.go diff --git a/cmd/bedrocktool/utils/net.go b/utils/net.go similarity index 100% rename from cmd/bedrocktool/utils/net.go rename to utils/net.go diff --git a/cmd/bedrocktool/utils/packet_logger.go b/utils/packet_logger.go similarity index 100% rename from cmd/bedrocktool/utils/packet_logger.go rename to utils/packet_logger.go diff --git a/cmd/bedrocktool/utils/proxy.go b/utils/proxy.go similarity index 100% rename from cmd/bedrocktool/utils/proxy.go rename to utils/proxy.go diff --git a/cmd/bedrocktool/utils/realms.go b/utils/realms.go similarity index 100% rename from cmd/bedrocktool/utils/realms.go rename to utils/realms.go diff --git a/cmd/bedrocktool/utils/replay.go b/utils/replay.go similarity index 100% rename from cmd/bedrocktool/utils/replay.go rename to utils/replay.go diff --git a/utils/resourcepack-ace.go.ignore b/utils/resourcepack-ace.go.ignore new file mode 100644 index 0000000..7d06e12 --- /dev/null +++ b/utils/resourcepack-ace.go.ignore @@ -0,0 +1,281 @@ +package utils + +import ( + "archive/zip" + "bytes" + "context" + "crypto/aes" + "encoding/json" + "flag" + "fmt" + "io" + "os" + "path" + "strings" + + "github.com/flytam/filenamify" + "github.com/google/subcommands" + "github.com/sandertv/gophertunnel/minecraft" + "github.com/sandertv/gophertunnel/minecraft/resource" + "github.com/sirupsen/logrus" +) + +const KEYS_FILE = "keys.db" + +// decrypt using cfb with segmentsize = 1 +func cfb_decrypt(data []byte, key []byte) ([]byte, error) { + cipher, err := aes.NewCipher([]byte(key)) + if err != nil { + return nil, err + } + + shift_register := append(key[:16], data...) + iv := make([]byte, 16) + off := 0 + for ; off < len(data); off += 1 { + cipher.Encrypt(iv, shift_register) + data[off] ^= iv[0] + shift_register = shift_register[1:] + } + return data, nil +} + +type content_item struct { + Path string `json:"path"` + Key string `json:"key"` +} + +type Content struct { + Content []content_item `json:"content"` +} + +type Pack struct { + resource.Pack +} + +func (p *Pack) ReadAll() ([]byte, error) { + buf := make([]byte, p.Len()) + off := 0 + for { + n, err := p.ReadAt(buf[off:], int64(off)) + if err != nil { + if err == io.EOF { + break + } + return nil, err + } + off += n + } + return buf, nil +} + +func (p *Pack) Decrypt() ([]byte, error) { + data, err := p.ReadAll() + if err != nil { + return nil, err + } + z, err := zip.NewReader(bytes.NewReader(data), int64(len(data))) + if err != nil { + return nil, err + } + + zip_out_buf := bytes.NewBuffer(nil) + zw := zip.NewWriter(zip_out_buf) + + written := make(map[string]interface{}) + + // read key contents file + var content Content = Content{} + { + ff, err := z.Open("contents.json") + if err != nil { + if !os.IsNotExist(err) { + return nil, err + } + } else { + fw, _ := zw.Create("contents.json") + buf, _ := io.ReadAll(ff) + if err := json.Unmarshal(buf, &content); err != nil { + dec, _ := cfb_decrypt(buf[0x100:], []byte(p.ContentKey())) + dec = bytes.Split(dec, []byte("\x00"))[0] + fw.Write(dec) + if err := json.Unmarshal(dec, &content); err != nil { + return nil, err + } + } else { + fw.Write(buf) + } + written["contents.json"] = true + } + } + + // decrypt each file in the contents file + for _, entry := range content.Content { + ff, _ := z.Open(entry.Path) + stat, _ := ff.Stat() + if ff == nil || stat.IsDir() { + continue + } + buf, _ := io.ReadAll(ff) + if entry.Key != "" { + buf, _ = cfb_decrypt(buf, []byte(entry.Key)) + } + fw, _ := zw.Create(entry.Path) + fw.Write(buf) + written[entry.Path] = true + } + + // copy files not in the contents file + for _, src_file := range z.File { + if written[src_file.Name] == nil { + zw.Copy(src_file) + } + } + + zw.Close() + return zip_out_buf.Bytes(), nil +} + +func dump_keys(keys map[string]string) { + f, err := os.OpenFile(KEYS_FILE, os.O_APPEND|os.O_RDWR|os.O_CREATE, 0o775) + if err != nil { + panic(err) + } + defer f.Close() + + data, err := io.ReadAll(f) + if err != nil { + panic(err) + } + lines := strings.Split(strings.ReplaceAll(string(data), "\r\n", "\n"), "\n") + existing_keys := map[string]string{} + for _, v := range lines { + if len(v) == 0 { + continue + } + item := strings.Split(v, "=") + existing_keys[item[0]] = item[1] + } + + for uuid, key := range keys { + if key == "" { + continue + } + existing := existing_keys[uuid] + if existing != "" { + logrus.Warnf("key %s exists already\n", uuid) + if existing != key { + logrus.Warnf("uuid:%s, key in db: %s != new key %s\n", uuid, existing, key) + } + continue + } + f.WriteString(uuid + "=" + key + "\n") + } +} + +type ResourcePackCMD struct { + server_address string + save_encrypted bool +} + +func (*ResourcePackCMD) Name() string { return "packs" } +func (*ResourcePackCMD) Synopsis() string { return "download resource packs from a server" } + +func (c *ResourcePackCMD) SetFlags(f *flag.FlagSet) { + f.StringVar(&c.server_address, "address", "", "remote server address") + f.BoolVar(&c.save_encrypted, "save-encrypted", false, "save encrypted resourcepacks") +} + +func (c *ResourcePackCMD) Usage() string { + return c.Name() + ": " + c.Synopsis() + "\n" + SERVER_ADDRESS_HELP +} + +func (c *ResourcePackCMD) Execute(ctx context.Context, f *flag.FlagSet, _ ...interface{}) subcommands.ExitStatus { + address, hostname, err := ServerInput(c.server_address) + if err != nil { + fmt.Fprint(os.Stderr, err) + return 1 + } + + serverConn, err := ConnectServer(ctx, address, nil, true, nil) + if err != nil { + fmt.Fprint(os.Stderr, err) + return 1 + } + serverConn.Close() + logrus.Info("Received") + + if len(serverConn.ResourcePacks()) > 0 { + logrus.Info("Decrypting Resource Packs") + dir := "packs/" + hostname + os.MkdirAll(dir, 0o777) + + pack_names := make(map[string]int) + for _, pack := range serverConn.ResourcePacks() { + pack_names[pack.Name()] += 1 + } + + // dump keys, download and decrypt the packs + keys := make(map[string]string) + for _, pack := range serverConn.ResourcePacks() { + pack := &Pack{*pack} + keys[pack.UUID()] = pack.ContentKey() + + pack_name := pack.Name() + if pack_names[pack_name] >= 2 { + pack_name += "_" + pack.UUID() + } + pack_name, _ = filenamify.FilenamifyV2(pack_name) + + logrus.Infof("ResourcePack(Id: %s Key: %s | Name: %s %s)\n", pack.UUID(), keys[pack.UUID()], pack_name, pack.Version()) + + if c.save_encrypted { + data, err := pack.ReadAll() + if err != nil { + fmt.Fprint(os.Stderr, err) + return 1 + } + os.WriteFile(path.Join(dir, pack_name+".zip"), data, 0o644) + } + logrus.Infof("Decrypting...") + + data, err := pack.Decrypt() + if err != nil { + fmt.Fprint(os.Stderr, err) + return 1 + } + os.WriteFile(path.Join(dir, pack_name+".mcpack"), data, 0o644) + } + logrus.Infof("Writing keys to %s", KEYS_FILE) + dump_keys(keys) + } else { + logrus.Warn("No Resourcepack sent") + } + fmt.Printf("Done!\n") + return 0 +} + +func init() { + RegisterCommand(&ResourcePackCMD{}) +} + +func GetPacks(server *minecraft.Conn) (packs map[string]*resource.Pack, err error) { + packs = make(map[string]*resource.Pack) + for _, pack := range server.ResourcePacks() { + _pack := &Pack{*pack} + if _pack.Encrypted() { + data, err := _pack.Decrypt() + if err != nil { + return nil, err + } + pack2, err := resource.FromBytes(data) + if err != nil { + return nil, err + } + packs[pack.Name()] = pack2 + } else { + packs[pack.Name()] = pack + } + } + return +} diff --git a/cmd/bedrocktool/utils/resourcepack.go b/utils/resourcepack.go similarity index 100% rename from cmd/bedrocktool/utils/resourcepack.go rename to utils/resourcepack.go diff --git a/cmd/bedrocktool/utils/utils.go b/utils/utils.go similarity index 100% rename from cmd/bedrocktool/utils/utils.go rename to utils/utils.go diff --git a/cmd/bedrocktool/utils/zip.go b/utils/zip.go similarity index 100% rename from cmd/bedrocktool/utils/zip.go rename to utils/zip.go