[
  {
    "path": ".gitignore",
    "content": ".DS_Store"
  },
  {
    "path": "01_protocol_proxy/teleport_proxy.py",
    "content": "from twisted.internet import reactor\nfrom quarry.net.proxy import DownstreamFactory, Bridge\nimport struct\nimport time\nimport random\nimport math\n\n# based on https://github.com/barneygale/quarry/blob/master/examples/client_chat_logger.py\n\nclass QuietBridge(Bridge):\n    entity_id = None\n    prev_pos = None\n    prev_look = None\n\n    def packet_upstream_chat_message(self, buff):\n        buff.save()\n        chat_message = buff.unpack_string()\n        print(f\" >> {chat_message}\")\n\n        if chat_message.startswith(\"/port\"):\n            _, distance = chat_message.split(\" \")\n            flags = 0\n            teleport = 0\n            dismount = 0\n            x, y, z, ground = self.prev_pos\n            yaw, pitch, ground = self.prev_look\n            # see net.minecraft.entity.Entity:getRotationVEctor()\n            f = pitch * 0.017453292\n            g = -yaw * 0.017453292\n            h = math.cos(g)\n            i = math.sin(g)\n            j = math.cos(f)\n            k = math.sin(f)\n            _x = i*j\n            _y = -k\n            _z = h*j\n            x += _x * float(distance)\n            y += _y * float(distance)\n            z += _z * float(distance)\n            buf = struct.pack('>dddffBBB', x, y, z, yaw, pitch, flags, teleport, dismount)\n            self.downstream.send_packet('player_position_and_look', buf)\n\n        buff.restore()\n        self.upstream.send_packet(\"chat_message\", buff.read())\n\n    def packet_unhandled(self, buff, direction, name):\n        print(f\"[*][{direction}] {name}\")\n        if direction == \"downstream\":\n            self.downstream.send_packet(name, buff.read())\n        elif direction == \"upstream\":\n            self.upstream.send_packet(name, buff.read())\n\n    def packet_upstream_player_position(self, buff):\n        buff.save()\n        x, y, z, ground = struct.unpack('>dddB', buff.read())\n        print(f\"[*] player_position {x} / {y} / {z} | {ground}\")\n        self.prev_pos = (x, y, z, ground)\n        buf = struct.pack('>dddB', x, y, z, ground)\n        self.upstream.send_packet('player_position', buf)\n\n    def packet_upstream_player_look(self, buff):\n        buff.save()\n        yaw, pitch, ground = struct.unpack('>ffB', buff.read())\n        print(f\"[*] player_look {yaw} / {pitch} | {ground}\")\n        self.prev_look = (yaw, pitch, ground)\n        buf = struct.pack('>ffB', yaw, pitch, ground)\n        self.upstream.send_packet('player_look', buf)\n\n\nclass QuietDownstreamFactory(DownstreamFactory):\n    bridge_class = QuietBridge\n    motd = \"LiveOverflow Proxy\"\n\n\n# python basic_proxy.py -q 12345\ndef main(argv):\n    # Parse options\n    import argparse\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\"-a\", \"--listen-host\", default=\"0.0.0.0\", help=\"address to listen on\")\n    parser.add_argument(\"-p\", \"--listen-port\", default=25565, type=int, help=\"port to listen on\")\n    parser.add_argument(\"-b\", \"--connect-host\", default=\"127.0.0.1\", help=\"address to connect to\")\n    parser.add_argument(\"-q\", \"--connect-port\", default=25565, type=int, help=\"port to connect to\")\n    args = parser.parse_args(argv)\n\n    # Create factory\n    factory = QuietDownstreamFactory()\n    factory.connect_host = args.connect_host\n    factory.connect_port = args.connect_port\n\n    # Listen\n    factory.listen(args.listen_host, args.listen_port)\n    reactor.run()\n\n\nif __name__ == \"__main__\":\n    import sys\n    main(sys.argv[1:])"
  },
  {
    "path": "README.md",
    "content": "# Minecraft:HACKED\n\n[Minecraft:HACKED](https://www.youtube.com/playlist?list=PLhixgUqwRTjwvBI-hmbZ2rpkAl4lutnJG) is a video series by [@LiveOverflow](https://twitter.com/LiveOverflow) exploring various technical areas of Minecraft. It's a weird series trying to combine classic \"Let's Plays\" with \"Hacking Tutorials\".\n\nWe are exploring how servers work, how modding support is implemented, we develop our own hacks, audit minecraft for vulnerabilities and much more...\n\n![Minecraft:HACKED Thumbnail](https://img.youtube.com/vi/Ekcseve-mOg/maxresdefault.jpg)\n\n## Episodes\n\n1. **I Spent 100 Days Hacking Minecraft** [video](https://www.youtube.com/watch?v=Ekcseve-mOg&list=PLhixgUqwRTjwvBI-hmbZ2rpkAl4lutnJG&index=1)\n   - Minecraft network protocol [wiki.vg](https://wiki.vg/Protocol)\n   - Minecraft python proxy with [Quarry](https://github.com/barneygale/quarry)\n   - Teleport hack attempt [file](/01_protocol_proxy/teleport_proxy.py)\n2. **Minecraft, But It's Reverse Engineered...** [video](https://www.youtube.com/watch?v=OXdFckukh2I&list=PLhixgUqwRTjwvBI-hmbZ2rpkAl4lutnJG&index=3)\n   - How Minecraft Server [PaperMC](https://github.com/PaperMC/Paper) is implemented\n   - Reverse engineering Java with [jd-gui](http://java-decompiler.github.io/) and [fernflower by IntelliJ IDEA](https://www.jetbrains.com/idea/)\n   - Obfuscated mappings via [intermediary](https://github.com/FabricMC/intermediary) and [yarn](https://github.com/FabricMC/yarn/tree/1.18.2-pre3/mappings/net/minecraft)\n   - How Minecraft [projects relate](https://raw.githubusercontent.com/saboooor/fork-graph/main/img.png) by [saboooor](https://github.com/saboooor/fork-graph)\n3. **Minecraft Hacker VS Herobrine** [video](https://www.youtube.com/watch?v=Hmmr1oLt-V8&list=PLhixgUqwRTjwvBI-hmbZ2rpkAl4lutnJG&index=4)\n   - Fabric example client mod [FabricMC/fabric-example-mod](https://github.com/FabricMC/fabric-example-mod)\n   - [Mixin examples](https://fabricmc.net/wiki/tutorial:mixin_examples) and [mixin cheatsheet](https://github.com/2xsaiko/mixin-cheatsheet)\n   - Shulker dupe mod [code by 0x3C50](https://github.com/Coderx-Gamer/shulker-dupe)\n   - Java bytecode manipulation with [asm.ow2](https://asm.ow2.io/)\n      - [video by FredOverflow](https://www.youtube.com/watch?v=WPDV3LgUL2E)\n   - Development Plugion for IntelliJ https://mcdev.io/\n4. **Flying Without Elytra**\n   - Auto fish mod\n   - Fly hack\n   - Bypassing server flying detection\n5. **Crafting a Minecraft 0day...**\n   - Auditing the minecraft protocol\n   - Discovering a minecraft protocol vulnerability\n6. **TBA**\n\n## Credits\n\nThanks to all my supporters on [Patreon](https://www.patreon.com/liveoverflow) and [YouTube Members](https://www.youtube.com/c/LiveOverflow/join) for supporting weird projects like this.\n\nAdditional thank you to the whole technical Minecraft community. In no particular order (hopefully I didn't miss anybody):\n\n- All https://wiki.vg contributors\n- 19MisterX98\n- jellejurre and jurrejelle\n- xpple\n- Earthcomputer\n- SilicatYT\n- BananaRedPanda\n- PR0CESS FX\n- Mumfrey\n- Silk\n- Neil\n- vktec\n- _various anonymous people_\n"
  }
]