Esempio n. 1
0
        public PacketViewTab(string file)
        {
            InitializeComponent();

            Text = Path.GetFileName(file);

            packetViewer = PacketReaderFactory.Create(Path.GetExtension(file));

            packets = packetViewer.ReadPackets(file).ToList();

            _list.VirtualMode = true;
            _list.VirtualListSize = packets.Count;
            _list.EnsureVisible(0);
        }
Esempio n. 2
0
        public PacketViewTab(string file)
        {
            InitializeComponent();

            Text = Path.GetFileName(file);

            packetViewer = PacketReaderFactory.Create(Path.GetExtension(file));
            packets = packetViewer.ReadPackets(file).ToList();
            OpcodeDB.Load(packetViewer.Build, GetConnectionString());

            PacketView.VirtualMode = true;
            PacketView.VirtualListSize = packets.Count;
            PacketView.EnsureVisible(0);
        }
Esempio n. 3
0
        public Parser(IPacketReader reader)
        {
            foreach (var packet in reader.ReadPackets())
            {
                var gr = packet.CreateReader();
                var code = packet.Code;
                if (code == OpCodes.SMSG_COMPRESSED_UPDATE_OBJECT)
                {
                    code = OpCodes.SMSG_UPDATE_OBJECT;
                    Decompress(ref gr);
                }
                if (code == OpCodes.SMSG_UPDATE_OBJECT)
                {
                    ParseRest(gr);
                    CheckPacket(gr);
                }

                gr.Close();
            }
        }
Esempio n. 4
0
        public RemoteClient(IMultiplayerServer server, IPacketReader packetReader, PacketHandler[] packetHandlers, Socket connection)
        {
            LoadedChunks = new List<Coordinates2D>();
            Server = server;
            Inventory = new InventoryWindow(server.CraftingRepository);
            InventoryWindow.WindowChange += HandleWindowChange;
            SelectedSlot = InventoryWindow.HotbarIndex;
            CurrentWindow = InventoryWindow;
            ItemStaging = ItemStack.EmptyStack;
            KnownEntities = new List<IEntity>();
            Disconnected = false;
            EnableLogging = server.EnableClientLogging;
            NextWindowID = 1;
            Connection = connection;
            SocketPool = new SocketAsyncEventArgsPool(100, 200, 65536);
            PacketReader = packetReader;
            PacketHandlers = packetHandlers;

            cancel = new CancellationTokenSource();

            StartReceive();
        }
Esempio n. 5
0
        public PacketViewTab(string file)
        {
            InitializeComponent();

            Text = Path.GetFileName(file);

            packetViewer = PacketReaderFactory.Create(Path.GetExtension(file));

            string connectionString = String.Format("Server={0};Port={1};Uid={2};Pwd={3};Database={4};character set=utf8;Connection Timeout=10",
                    Settings.Default.Host,
                    Settings.Default.Port,
                    Settings.Default.User,
                    Settings.Default.Pass,
                    Settings.Default.OpcodeDBName);
            packets = packetViewer.ReadPackets(file).ToList();

            OpcodeDB.Load(packetViewer.Build, connectionString);

            PacketView.VirtualMode = true;
            PacketView.VirtualListSize = packets.Count;
            PacketView.EnsureVisible(0);
        }
Esempio n. 6
0
 public Stage1(IPacketReader reader)
     : this()
 {
     Reader = reader;
 }
Esempio n. 7
0
 public void HandleStandState(ref IPacketReader packet, ref IWorldManager manager)
 {
     manager.Account.ActiveCharacter.StandState = (StandState)packet.ReadUInt32();
     manager.Send(manager.Account.ActiveCharacter.BuildUpdate());
 }
Esempio n. 8
0
        protected override async Task Handle(GameStageUser stageUser, IFieldObjUser user, IPacketReader packet)
        {
            var npc = user.Field.GetPool(FieldObjType.NPC).GetObject <IFieldObjNPC>(packet.ReadInt());

            if (npc == null)
            {
                return;
            }
            if (!user.Watching.Any(w => w == npc.FieldSplit))
            {
                return;
            }

            var scriptName = npc.Info.Script;

            if (string.IsNullOrWhiteSpace(scriptName))
            {
                return;
            }

            try
            {
                var script = await stageUser.Stage.ScriptEngine.CreateFromFile(scriptName);

                var context      = new ConversationContext(user);
                var conversation = new ScriptedConversation(
                    context,
                    new BasicSpeaker(context, templateID: npc.Info.ID),
                    new BasicSpeaker(context, flags: ConversationSpeakerFlags.NPCReplacedByUser),
                    script
                    );

                await user.Converse(conversation);
            }
            catch (FileNotFoundException)
            {
                await user.Message($"The '{scriptName}' script does not exist.");
            }
        }
Esempio n. 9
0
 public void Setup()
 {
     m_MemoryStream = new MemoryStream();
     m_PacketWriter = new PacketWriter(m_MemoryStream);
     m_PacketReader = new PacketReader(m_MemoryStream, false);
 }
Esempio n. 10
0
        public void HandlePlayerLogin(ref IPacketReader packet, ref IWorldManager manager)
        {
            ulong     guid      = packet.ReadUInt64();
            Character character = (Character)manager.Account.SetActiveChar(guid, Sandbox.Instance.Build);

            character.DisplayId = character.GetDisplayId();

            // Verify World : REQUIRED
            PacketWriter verify = new PacketWriter(Sandbox.Instance.Opcodes[global::Opcodes.SMSG_LOGIN_VERIFY_WORLD], "SMSG_LOGIN_VERIFY_WORLD");

            verify.WriteUInt32(character.Location.Map);
            verify.WriteFloat(character.Location.X);
            verify.WriteFloat(character.Location.Y);
            verify.WriteFloat(character.Location.Z);
            verify.WriteFloat(character.Location.O);
            manager.Send(verify);

            // Account Data Hash : REQUIRED
            PacketWriter accountdata = new PacketWriter(Sandbox.Instance.Opcodes[global::Opcodes.SMSG_ACCOUNT_DATA_MD5], "SMSG_ACCOUNT_DATA_MD5");

            accountdata.WriteInt32((int)DateTimeOffset.UtcNow.ToUnixTimeSeconds());
            accountdata.WriteUInt8(1);
            accountdata.WriteUInt32((uint)AccountDataMask.ALL);
            for (int i = 0; i < 8; i++)
            {
                accountdata.WriteUInt32(0);
            }
            manager.Send(accountdata);

            // Tutorial Flags : REQUIRED
            PacketWriter tutorial = new PacketWriter(Sandbox.Instance.Opcodes[global::Opcodes.SMSG_TUTORIAL_FLAGS], "SMSG_TUTORIAL_FLAGS");

            for (int i = 0; i < 8; i++)
            {
                tutorial.WriteInt32(-1);
            }
            manager.Send(tutorial);

            // send language spells so we can type commands
            PacketWriter spells = new PacketWriter(Sandbox.Instance.Opcodes[global::Opcodes.SMSG_INITIAL_SPELLS], "SMSG_INITIAL_SPELLS");

            spells.WriteUInt8(0);
            spells.WriteUInt16(2); // spell count
            spells.WriteUInt32(CharacterData.COMMON_SPELL_ID);
            spells.WriteUInt16(0);
            spells.WriteUInt32(CharacterData.ORCISH_SPELL_ID);
            spells.WriteUInt16(0);
            spells.WriteUInt16(0); // cooldown count
            manager.Send(spells);

            HandleQueryTime(ref packet, ref manager);

            manager.Send(character.BuildUpdate());

            // handle flying
            manager.Send(character.BuildFly(character.IsFlying));

            // Force timesync : REQUIRED
            PacketWriter timesyncreq = new PacketWriter(Sandbox.Instance.Opcodes[global::Opcodes.SMSG_TIME_SYNC_REQ], "SMSG_TIME_SYNC_REQ");

            timesyncreq.Write(0);
            manager.Send(timesyncreq);
        }
Esempio n. 11
0
        public static byte[] LogonProof(IPacketReader packet)
        {
            byte[] A   = packet.ReadBytes(32);
            byte[] kM1 = packet.ReadBytes(20);
            byte[] rA  = A.Reverse().ToArray();
            byte[] AB  = A.Concat(B.GetBytes(32).Reverse()).ToArray();

            if (new BigInteger(A) % new BigInteger(N) == 0)
            {
                return(new byte[1]);
            }

            SHA1 sha1 = new SHA1CryptoServiceProvider();

            byte[] rU = sha1.ComputeHash(AB).Reverse().ToArray();

            // SS_Hash
            BigInteger s = V.ModPow(new BigInteger(rU), new BigInteger(RN));

            s *= new BigInteger(rA);
            s  = s.ModPow(new BigInteger(RB), new BigInteger(RN));

            byte[] S1 = new byte[16];
            byte[] S2 = new byte[16];
            byte[] S  = s.GetBytes(32);
            byte[] rS = S.Reverse().ToArray();
            for (int t = 0; t < 16; t++)
            {
                S1[t] = rS[t * 2];
                S2[t] = rS[(t * 2) + 1];
            }

            byte[] hashS1  = sha1.ComputeHash(S1);
            byte[] hashS2  = sha1.ComputeHash(S2);
            byte[] ss_hash = new byte[hashS1.Length + hashS2.Length];
            for (int t = 0; t < hashS1.Length; t++)
            {
                ss_hash[t * 2]       = hashS1[t];
                ss_hash[(t * 2) + 1] = hashS2[t];
            }

            // calc M1
            byte[] M1;
            byte[] NHash   = sha1.ComputeHash(N);
            byte[] GHash   = sha1.ComputeHash(G.GetBytes());
            byte[] NG_Hash = new byte[20];

            for (int t = 0; t < 20; t++)
            {
                NG_Hash[t] = (byte)(NHash[t] ^ GHash[t]);
            }

            var tmp = NG_Hash.Concat(sha1.ComputeHash(BUsername))
                      .Concat(Salt)
                      .Concat(A)
                      .Concat(B.GetBytes(32).Reverse())
                      .Concat(ss_hash);

            M1 = sha1.ComputeHash(tmp.ToArray());

            // calc M2
            byte[] M2;
            tmp = A.Concat(M1).Concat(ss_hash);
            M2  = sha1.ComputeHash(tmp.ToArray());
            sha1.Dispose();

            // instantiate coders/cryptors
            PacketCrypt = new PacketCrypt(ss_hash, ClientBuild);

            // additional information, always zeroed
            int extradata = 0;

            if (ClientBuild < 6178 || ClientBuild == 6180)
            {
                extradata = 04; // uint unk
            }
            else if (ClientBuild < 8089)
            {
                extradata = 06; // uint unk, ushort unkFlags
            }
            else
            {
                extradata = 10; // uint account flag, uint surveyId, ushort unkFlags
            }
            byte[] result = new byte[22 + extradata];
            result[0] = 1;
            Array.Copy(M2, 0, result, 2, M2.Length);
            return(result);
        }
Esempio n. 12
0
        public void HandleCharEnum(ref IPacketReader packet, ref IWorldManager manager)
        {
            var account = manager.Account;
            var result  = account.Characters.Where(x => x.Build == Sandbox.Instance.Build);

            PacketWriter writer    = new PacketWriter(Sandbox.Instance.Opcodes[global::Opcodes.SMSG_CHAR_ENUM], "SMSG_CHAR_ENUM");
            BitPacker    bitPacker = new BitPacker(writer);

            bitPacker.Write(1);
            bitPacker.Write(0, 23);
            bitPacker.Write(result.Count(), 17);

            foreach (Character c in result)
            {
                bitPacker.Write(0, 3);
                bitPacker.Write(c.Guid & 0xFF);
                bitPacker.Write((c.Guid >> 8) & 0xFF);
                bitPacker.Write(0);
                bitPacker.Write(c.Name.Length, 7);
                bitPacker.Write(0, 4);
                bitPacker.Write((c.Guid >> 16) & 0xFF);
                bitPacker.Write((c.Guid >> 24) & 0xFF);
                bitPacker.Write(0, 5);
            }

            bitPacker.Flush();

            foreach (Character c in result)
            {
                writer.WriteUInt8(c.Gender);
                writer.WriteUInt8((byte)c.Level);

                // items
                for (int i = 0; i < 0x17; i++)
                {
                    writer.WriteUInt32(0);
                    writer.WriteUInt32(0);
                    writer.WriteUInt8(0);
                }

                writer.WriteGUIDByte(c.Guid, 0);
                writer.WriteFloat(c.Location.Z);
                writer.WriteUInt8(c.HairColor);
                writer.WriteUInt32(c.Zone);
                writer.WriteGUIDByte(c.Guid, 3);
                writer.WriteGUIDByte(c.Guid, 1);
                writer.WriteUInt32(0);
                writer.WriteFloat(c.Location.X);
                writer.WriteUInt8(0);
                writer.WriteUInt8(c.HairStyle);
                writer.WriteUInt32(c.Location.Map);
                writer.WriteUInt8(c.Face);
                writer.WriteUInt8(c.Skin);
                writer.Write(System.Text.Encoding.ASCII.GetBytes(c.Name));
                writer.WriteUInt8(c.FacialHair);
                writer.WriteUInt8(c.Class);
                writer.WriteUInt32(0);
                writer.WriteUInt8(c.Race);
                writer.WriteFloat(c.Location.Y);
                writer.WriteGUIDByte(c.Guid, 2);
                writer.WriteUInt32(0); // customise flags
                writer.WriteUInt32(0); // char flags
                writer.WriteUInt32(0);
            }

            manager.Send(writer);
        }
Esempio n. 13
0
        protected override async Task Handle(
            GameStageUser stageUser,
            IFieldObjUser controller,
            IFieldObjMob controlled,
            IPacketReader packet
            )
        {
            if (controlled.HP <= 0)
            {
                return;
            }

            var mobCtrlSN = packet.ReadShort();
            var v7        = packet.ReadByte();         //v85 = nDistance | 4 * (v184 | 2 * ((unsigned __int8)retaddr | 2 * v72)); [ CONFIRMED ]

            var oldSplit           = (v7 & 0xF0) != 0; //this is a type of CFieldSplit
            var mobMoveStartResult = (v7 & 0xF) != 0;

            var curSplit        = packet.ReadByte();
            var illegalVelocity = packet.ReadInt();
            var v8 = packet.ReadByte();

            var cheatedRandom   = (v8 & 0xF0) != 0;
            var cheatedCtrlMove = (v8 & 0xF) != 0;

            var multiTargetForBall = packet.ReadInt();

            for (var i = 0; i < multiTargetForBall; i++)
            {
                packet.ReadLong();                                          // int, int
            }
            var randTimeForAreaAttack = packet.ReadInt();

            for (var i = 0; i < randTimeForAreaAttack; i++)
            {
                packet.ReadInt();
            }

            packet.ReadInt(); // HackedCode
            packet.ReadInt(); // idk
            packet.ReadInt(); // HackedCodeCrc
            packet.ReadInt(); // idk

            var path = packet.Read(new MovePath());

            await controlled.Move(path);

            var response = new UnstructuredOutgoingPacket(PacketSendOperations.MobCtrlAck);

            response.WriteInt(controlled.ID);
            response.WriteShort(mobCtrlSN);
            response.WriteBool(mobMoveStartResult);
            response.WriteShort((short)controlled.MP); // nMP
            response.WriteByte(0);                     // SkillCommand
            response.WriteByte(0);                     // SLV

            await controller.Dispatch(response);

            var movement = new UnstructuredOutgoingPacket(PacketSendOperations.MobMove);

            movement.WriteInt(controlled.ID);
            movement.WriteBool(false); // NotForceLandingWhenDiscard
            movement.WriteBool(false); // NotChangeAction
            movement.WriteBool(false); // NextAttackPossible
            movement.WriteBool(false); // Left
            movement.WriteInt(illegalVelocity);

            movement.WriteInt(0); // MultiTargetForBall
            movement.WriteInt(0); // RandTimeForAreaAttack

            movement.Write(path);

            await controlled.Field.Dispatch(controller, movement);
        }
Esempio n. 14
0
 public Reader(string fileName, string originalFileName)
 {
     FileName     = originalFileName;
     PacketReader = GetPacketReader(fileName, originalFileName);
 }
Esempio n. 15
0
 protected abstract void ReadData(IPacketReader reader);
Esempio n. 16
0
 public void ReadFromPacket(IPacketReader reader)
 {
     ReadData(reader);
 }
Esempio n. 17
0
 protected AbstractMoveFragment(MoveFragmentAttribute attribute, IPacketReader reader)
 {
     Attribute = attribute;
     ReadFromPacket(reader);
 }
Esempio n. 18
0
        protected override async Task Handle(GameStageUser stageUser, IFieldObjUser user, IPacketReader packet)
        {
            _ = packet.ReadInt();

            var type = (GroupMessageType)packet.ReadByte();

            var recipientCount = packet.ReadByte();
            var recipients     = new int[recipientCount];

            for (var i = 0; i < recipientCount; i++)
            {
                recipients[i] = packet.ReadInt();
            }

            var text = packet.ReadString();

            switch (type)
            {
            case GroupMessageType.Party:
            {
                if (user.Party == null)
                {
                    return;
                }

                var partyChat = new UnstructuredOutgoingPacket(PacketSendOperations.GroupMessage);

                partyChat.WriteByte((byte)GroupMessageType.Party);
                partyChat.WriteString(user.Character.Name);
                partyChat.WriteString(text);

                var dispatchRequest = new DispatchToCharactersRequest {
                    Data = ByteString.CopyFrom(partyChat.Buffer)
                };

                dispatchRequest.Characters.Add(user.Party.Members
                                               .Select(m => m.ID)
                                               .Where(m => m != user.ID)
                                               );

                await stageUser.Stage.DispatchService.DispatchToCharacters(dispatchRequest);

                break;
            }

            default:
                stageUser.Stage.Logger.LogWarning($"Unhandled group message type: {type}");
                break;
            }
        }
Esempio n. 19
0
 static void onErrorServerInternal(IPacketReader r)
 {
     r.Read(out ushort errorCode);
     serverError.Handle(errorCode, r);
 }
Esempio n. 20
0
 static void onErrorClientInternal(IPacketReader r)
 {
     r.Read(out ushort errorCode);
     clientError.Handle(errorCode, r);
 }
Esempio n. 21
0
 public FriendRequestData(IPacketReader packet)
 {
     UserId   = packet.NextInt();
     Username = packet.NextString();
     Figure   = packet.NextString();
 }
Esempio n. 22
0
 public void HandleWorldTeleportAck(ref IPacketReader packet, ref IWorldManager manager)
 {
 }
Esempio n. 23
0
 private static void HandleAuthChallenge(ref IPacketReader packet, ref IWorldManager manager)
 {
     WorldServer.Sandbox.AuthHandler.HandleAuthChallenge();
 }
Esempio n. 24
0
 public override Task Handle(TUser user, IPacketReader packet)
 => user.TryRecvAliveAck();
Esempio n. 25
0
 public PacketFactory(IPacketReader packetReader)
 {
     _packetReader = packetReader;
 }
Esempio n. 26
0
        protected override async Task Handle(GameStageUser stageUser, IFieldObjUser user, IPacketReader packet)
        {
            _ = packet.ReadInt();
            var type   = (ItemInventoryType)packet.ReadByte();
            var from   = packet.ReadShort();
            var to     = packet.ReadShort();
            var number = packet.ReadShort();

            if (to == 0)
            {
                await user.ModifyInventory(exclRequest : true); // TODO: drops

                return;
            }

            // TODO: checks
            await user.ModifyInventory(i => i[type].Move(from, to), true);
        }
Esempio n. 27
0
 public void Read(IPacketReader reader)
 {
     Username = reader.ReadString().ToString();
 }
 public FriendCategoryData(IPacketReader packet)
 {
     Id   = packet.NextInt();
     Name = packet.NextString();
 }
Esempio n. 29
0
 public readonly void Read(IPacketReader reader)
 {
     // no fields
 }
Esempio n. 30
0
 public Reader(string fileName, SniffType type)
 {
     FileName     = fileName;
     PacketReader = GetPacketReader(fileName, type);
 }
Esempio n. 31
0
 public void HandleWorldTeleport(ref IPacketReader packet, ref IWorldManager manager)
 {
     throw new NotImplementedException();
 }
Esempio n. 32
0
        private void OpenMenu_Click(object sender, EventArgs e)
        {
            if (_openDialog.ShowDialog() != DialogResult.OK)
                return;

            textBox1.Clear();
            textBox2.Clear();
            _list.Items.Clear();
            _listCache.Clear();

            _statusLabel.Text = "Loading...";
            var file = _openDialog.FileName;
            packetViewer = PacketReaderFactory.Create(Path.GetExtension(file));

            if (!Loaded())
                return;

            packets = packetViewer.ReadPackets(file).ToList();

            _list.VirtualMode = true;
            _list.VirtualListSize = packets.Count;

            _statusLabel.Text = String.Format("Done. Client Build: {0}", packetViewer.Build);
        }
Esempio n. 33
0
 public void HandleZoneUpdate(ref IPacketReader packet, ref IWorldManager manager)
 {
     manager.Account.ActiveCharacter.Zone = packet.ReadUInt32();
 }
Esempio n. 34
0
        protected override async Task Handle(GameStageUser stageUser, IFieldObjUser user, IPacketReader packet)
        {
            var contimove = await stageUser.Stage.ContiMoveRepository.RetrieveByField(user.Field);

            if (contimove == null)
            {
                return;
            }

            var response = new UnstructuredOutgoingPacket(PacketSendOperations.CONTISTATE);

            response.WriteByte((byte)contimove.State);
            response.WriteBool(contimove.State == ContiMoveState.Event);

            await user.Dispatch(response);
        }
Esempio n. 35
0
 public override Task Handle(GameStageUser user, IPacketReader packet)
 => Handle(user, user.FieldUser, packet);
Esempio n. 36
0
        protected override async Task Handle(GameStageUser stageUser, IFieldObjUser user, IPacketReader packet)
        {
            _ = packet.ReadInt();
            var type     = (ItemInventoryType)packet.ReadByte();
            var response = new UnstructuredOutgoingPacket(PacketSendOperations.SortItemResult);

            response.WriteBool(false);
            response.WriteByte((byte)type);

            await user.ModifyInventory(i => i[type].Sort(), true);

            await user.Dispatch(response);
        }
Esempio n. 37
0
 protected abstract Task Handle(GameStageUser stageUser, IFieldObjUser user, IPacketReader packet);
Esempio n. 38
0
 public void SetPacketReader(IPacketReader reader)
 {
     this.reader = reader;
 }