Exemplo n.º 1
0
        protected override void Encode(IChannelHandlerContext context, MaplePakcet message, IByteBuffer output)
        {
            using (message)
            {
                CMapleClient client = context.GetAttribute <CMapleClient>(CMapleClient.attributeKey).Get();
                if (client == null)
                {
                    output.WriteBytes(message.ToArray());
                }
                else
                {
                    //加密
                    using (MapleBuffer buffer = new MapleBuffer())
                    {
                        byte[] header = new byte[4];
                        client.m_SendIv.GetHeaderToClient(message.ToArray().Length, header);
                        client.m_SendIv.Transform();
                        buffer.add(header);
                        buffer.add(message.ToArray());

                        System.Console.WriteLine("发送封包:{0}", HexTool.toString(message.ToArray()));
                        output.WriteBytes(buffer.ToArray());
                    }
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Save log file button, opens save dialog to save all logged packets.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnSave_Click(object sender, EventArgs e)
        {
            SaveLogDialog.FileName = DateTime.Now.ToString("yyyyMMdd_HHmmss");

            if (SaveLogDialog.ShowDialog() == DialogResult.Cancel)
            {
                return;
            }

            try
            {
                using (var stream = SaveLogDialog.OpenFile())
                    using (var sw = new StreamWriter(stream))
                    {
                        for (int i = LstPackets.Items.Count - 1; i >= 0; --i)
                        {
                            var palePacket = (PalePacket)LstPackets.Items[i].Tag;

                            var method    = palePacket.Received ? "Recv" : "Send";
                            var time      = palePacket.Time.ToString("hh:mm:ss.fff");
                            var packetStr = HexTool.ToString(palePacket.Packet.GetBuffer());

                            sw.WriteLine(method + "@" + time + " " + packetStr);
                        }

                        LblCurrentFileName.Text = Path.GetFileName(SaveLogDialog.FileName);
                    }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Failed to save file (" + ex.Message + ").", Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Loads log file and adds packets to list.
        /// </summary>
        /// <param name="path"></param>
        private void LoadFile(string path)
        {
            var newPackets = new List <PalePacket>();

            using (var sr = new StreamReader(path))
            {
                string line;
                while ((line = sr.ReadLine()) != null)
                {
                    line = line.Trim();
                    var recv = false;

                    if (string.IsNullOrWhiteSpace(line) || (!line.StartsWith("Send") && !(recv = line.StartsWith("Recv"))))
                    {
                        continue;
                    }

                    var spaceIdx = line.IndexOf(' ');

                    var date = DateTime.MinValue;
                    if (line[4] == '@')
                    {
                        date = DateTime.Parse(line.Substring(5, spaceIdx - 5));
                    }

                    var packetStr  = line.Substring(spaceIdx + 1, line.Length - spaceIdx - 1);
                    var packetArr  = HexTool.ToByteArray(packetStr);
                    var packet     = new Packet(packetArr, 0);
                    var palePacket = new PalePacket(packet, date, recv);

                    newPackets.Insert(0, palePacket);
                }
            }

            LstPackets.BeginUpdate();

            foreach (var palePacket in newPackets)
            {
                AddPacketToFormList(palePacket, false);
            }

            LstPackets.EndUpdate();

            UpdateCount();

            foreach (var palePacket in newPackets)
            {
                if (palePacket.Received)
                {
                    pluginManager.OnRecv(palePacket);
                }
                else
                {
                    pluginManager.OnSend(palePacket);
                }
            }
        }
Exemplo n.º 4
0
        /// <param name="packet">Packet to test.</param>
        /// <param name="opNames">Definitions pairing opcodes with their human-readable name.</param>
        /// <returns>Whether <paramref name="packet"/> matches against this SearchParametres object.</returns>
        /// <exception cref="InvalidOperationException">Thrown if this SearchParametres object has its search mode set to 'NoOp'.</exception>
        public bool IsMatch(PalePacket packet, Dictionary <int, string> opNames)
        {
            // Handle obvious mismatches
            if (this.SearchMode == SearchModes.NoOp)
            {
                throw new InvalidOperationException("This object has its search mode set to 'NoOp'. Cannot evaluate packet.");
                return(false);
            }

            if (!this.PacketBounds.HasFlag(packet.Received ? SendOrRecv.Recv : SendOrRecv.Send))
            {
                return(false);
            }



            // Begin probing packet
            if (this.SearchMode == SearchModes.Hexadecimal)
            {
                return(HexTool.ToString(packet.Packet.GetBuffer()).IndexOf(this.StringQuery, StringComparison.OrdinalIgnoreCase) >= 0);
            }
            else             //if (this.SearchMode == SearchModes.String)
            {
                StringComparison comp = this.CaseSensitive ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase;

                if (this.LookAt.HasFlag(LookAtCandidates.Ops))
                {
                    if ((opNames.ContainsKey(packet.Op) && opNames[packet.Op].IndexOf(this.StringQuery, comp) >= 0) ||                  // Try op name
                        (packet.Op.ToString("X8").IndexOf(this.StringQuery, StringComparison.OrdinalIgnoreCase) >= 0))                            // Try op code
                    {
                        return(true);
                    }
                }

                if (this.LookAt.HasFlag(LookAtCandidates.Ids))
                {
                    if (packet.Id.ToString("X16").IndexOf(this.StringQuery, StringComparison.OrdinalIgnoreCase) >= 0)
                    {
                        return(true);
                    }
                }

                if (this.LookAt.HasFlag(LookAtCandidates.Data_String))
                {
                    if (packet.ToString().IndexOf(this.StringQuery, comp) >= 0)
                    {
                        return(true);
                    }
                }

                return(false);
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// Copies selected packet's buffer as hex string.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnMenuPacketsCopyHex_Click(object sender, EventArgs e)
        {
            var selected = GetSelectedPacket();

            if (selected == null)
            {
                return;
            }

            var str = HexTool.ToString(selected.Packet.GetBuffer());

            Clipboard.SetText(str);
        }
Exemplo n.º 6
0
        /// <param name="packet">Packet to test.</param>
        /// <param name="opNames">Definitions pairing opcodes with their human-readable name.</param>
        /// <returns>Whether <paramref name="packet"/> matches against this SearchParametres object.</returns>
        /// <exception cref="InvalidOperationException">Thrown if this SearchParametres object has its search mode set to 'NoOp'.</exception>
        public bool IsMatch(PalePacket packet, Dictionary <int, string> opNames)
        {
            // Handle obvious mismatches
            if (this.SearchMode == SearchModes.NoOp)
            {
                throw new InvalidOperationException("This object has its search mode set to 'NoOp'. Cannot evaluate packet.");
                return(false);
            }

            if (!this.PacketBounds.HasFlag(packet.Received ? SendOrRecv.Recv : SendOrRecv.Send))
            {
                return(false);
            }



            // Begin probing packet
            if (this.SearchMode == SearchModes.Hexadecimal)
            {
                return(HexTool.ToString(packet.Packet.GetBuffer()).Contains(this.StringQuery));
            }
            else             //if (this.SearchMode == SearchModes.String)
            {
                if (this.LookAt.HasFlag(LookAtCandidates.Ops))
                {
                    if (opNames.ContainsKey(packet.Op) && opNames[packet.Op].Contains(this.StringQuery))
                    {
                        return(true);
                    }
                }

                if (this.LookAt.HasFlag(LookAtCandidates.Ids))
                {
                    if (packet.Id.ToString("X16").Contains(this.StringQuery.ToUpper()))
                    {
                        return(true);
                    }
                }

                if (this.LookAt.HasFlag(LookAtCandidates.Data_String))
                {
                    if (packet.ToString().Contains(this.StringQuery))
                    {
                        return(true);
                    }
                }

                return(false);
            }
        }
Exemplo n.º 7
0
        private void button_SendPacket_Click(object sender, EventArgs e)
        {
            string sendPacketText = textBox_SendPacket.Text.Trim();

            byte[] packetBytes = HexTool.ToBytes(sendPacketText);

            var p = new PacketWriter();

            p.WriteByte(packetBytes[0]);
            p.WriteByte(packetBytes[1]);
            p.WriteBytes(packetBytes);

            Client.session.SendPacket(p);
        }
Exemplo n.º 8
0
        public new void SendPacket(COutPacket packet)
        {
            var buffer = packet.ToArray();
            var opcode = (SendOps)BitConverter.ToInt16(buffer, 0);

            if (Constants.FilterSendOpCode(opcode) == false)
            {
                var name = Enum.GetName(typeof(SendOps), opcode);
                var str  = HexTool.ToString(buffer);

                Log.InfoFormat("Send [{0}] {1}", name, str);
            }

            base.SendPacket(packet);
        }
Exemplo n.º 9
0
        protected override void HandlePacket(TClient client, CInPacket packet)
        {
            var buffer = packet.ToArray();
            var opcode = (RecvOps)BitConverter.ToInt16(buffer, 0);

            if (Constants.FilterRecvOpCode(opcode) == false)
            {
                var name = Enum.GetName(typeof(RecvOps), opcode);
                var str  = HexTool.ToString(buffer);

                Log.InfoFormat("Recv [{0}] {1}", name, str);
            }

            PacketHandler.Handle(client, packet);
        }
Exemplo n.º 10
0
        private void BtnParseHexPacket_Click(object sender, EventArgs e)
        {
            try
            {
                var packetHex = Clipboard.GetText();
                var bytes     = HexTool.ToByteArray(packetHex.Replace(" ", "").Replace("-", ""));
                var packet    = new Packet(bytes, 0);

                this.ParsePacketToInput(packet);
            }
            catch
            {
                MessageBox.Show("The text in your clipboard is not a valid packet.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
Exemplo n.º 11
0
        private void BtnConvert_Click(object sender, EventArgs e)
        {
            if (TxtHex.Text.Length < 4 + 8 + 3)
            {
                return;
            }

            try
            {
                var packetStr = TxtHex.Text.Replace(" ", "").Replace("-", "").Replace("\r", "").Replace("\n", "");
                var packetArr = HexTool.ToByteArray(packetStr);
                var packet    = new Packet(packetArr, 0);
                TxtPacket.Text = packet.ToString();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error: " + ex.Message, Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
Exemplo n.º 12
0
        private void Handle_ClientDumpLog(WvsLoginClient c, CInPacket p)
        {
            //Thank you to Mordred for this handler!

            var callType         = p.Decode2();
            var errorCode        = p.Decode4();
            var backupBufferSize = p.Decode2();
            var rawSeq           = p.Decode4();
            var type             = p.Decode2();
            var backupBuffer     = p.DecodeBuffer(backupBufferSize - 6);

            var callTypeName = Enum.GetName(typeof(CrashCallType), callType);
            var logTypeName  = Enum.GetName(typeof(SendOps), type);

            Log.DebugFormat(
                "RawSeq: {0} CallType: {1} ErrorCode: {2} BackupBufferSize: {3} Type: {4} - {5} Packet: {6}",
                rawSeq, callTypeName, errorCode, backupBufferSize,
                type, logTypeName,
                HexTool.ToString(backupBuffer)
                );
        }
        private void SetDefaultTextBoxAESUserKey()
        {
            byte[] AESUserKey = MapleCryptoConstants.MAPLESTORY_USERKEY_DEFAULT;

            textBox_AESUserKey1.Text  = HexTool.ToString(AESUserKey[0 * 4]);
            textBox_AESUserKey2.Text  = HexTool.ToString(AESUserKey[1 * 4]);
            textBox_AESUserKey3.Text  = HexTool.ToString(AESUserKey[2 * 4]);
            textBox_AESUserKey4.Text  = HexTool.ToString(AESUserKey[3 * 4]);
            textBox_AESUserKey5.Text  = HexTool.ToString(AESUserKey[4 * 4]);
            textBox_AESUserKey6.Text  = HexTool.ToString(AESUserKey[5 * 4]);
            textBox_AESUserKey7.Text  = HexTool.ToString(AESUserKey[6 * 4]);
            textBox_AESUserKey8.Text  = HexTool.ToString(AESUserKey[7 * 4]);
            textBox_AESUserKey9.Text  = HexTool.ToString(AESUserKey[8 * 4]);
            textBox_AESUserKey10.Text = HexTool.ToString(AESUserKey[9 * 4]);
            textBox_AESUserKey11.Text = HexTool.ToString(AESUserKey[10 * 4]);
            textBox_AESUserKey12.Text = HexTool.ToString(AESUserKey[11 * 4]);
            textBox_AESUserKey13.Text = HexTool.ToString(AESUserKey[12 * 4]);
            textBox_AESUserKey14.Text = HexTool.ToString(AESUserKey[13 * 4]);
            textBox_AESUserKey15.Text = HexTool.ToString(AESUserKey[14 * 4]);
            textBox_AESUserKey16.Text = HexTool.ToString(AESUserKey[15 * 4]);
            textBox_AESUserKey17.Text = HexTool.ToString(AESUserKey[16 * 4]);
            textBox_AESUserKey18.Text = HexTool.ToString(AESUserKey[17 * 4]);
            textBox_AESUserKey19.Text = HexTool.ToString(AESUserKey[18 * 4]);
            textBox_AESUserKey20.Text = HexTool.ToString(AESUserKey[19 * 4]);
            textBox_AESUserKey21.Text = HexTool.ToString(AESUserKey[20 * 4]);
            textBox_AESUserKey22.Text = HexTool.ToString(AESUserKey[21 * 4]);
            textBox_AESUserKey23.Text = HexTool.ToString(AESUserKey[22 * 4]);
            textBox_AESUserKey24.Text = HexTool.ToString(AESUserKey[23 * 4]);
            textBox_AESUserKey25.Text = HexTool.ToString(AESUserKey[24 * 4]);
            textBox_AESUserKey26.Text = HexTool.ToString(AESUserKey[25 * 4]);
            textBox_AESUserKey27.Text = HexTool.ToString(AESUserKey[26 * 4]);
            textBox_AESUserKey28.Text = HexTool.ToString(AESUserKey[27 * 4]);
            textBox_AESUserKey29.Text = HexTool.ToString(AESUserKey[28 * 4]);
            textBox_AESUserKey30.Text = HexTool.ToString(AESUserKey[29 * 4]);
            textBox_AESUserKey31.Text = HexTool.ToString(AESUserKey[30 * 4]);
            textBox_AESUserKey32.Text = HexTool.ToString(AESUserKey[31 * 4]);
        }
Exemplo n.º 14
0
        /// <summary>
        /// Loads log file and adds packets to list.
        /// </summary>
        /// <param name="path"></param>
        private void LoadFile(string path)
        {
            var newPackets = new List <PalePacket>();

            using (var sr = new StreamReader(path))
            {
                string line;
                for (int ln = 1; (line = sr.ReadLine()) != null; ++ln)
                {
                    try
                    {
                        line = line.Trim();
                        var recv = false;

                        if (string.IsNullOrWhiteSpace(line) || (!line.StartsWith("Send ") && !(recv = line.StartsWith("Recv "))))
                        {
                            continue;
                        }

                        var tabIndex = line.IndexOf('\t');
                        var split    = line.Substring(0, tabIndex).Split(' ');

                        PacketType type;
                        DateTime   date;
                        string     name;
                        int        length = -1;

                        if (split.Length == 3)
                        {
                            type = (split[0] == "Send" ? PacketType.ClientServer : PacketType.ServerClient);
                            date = DateTime.Parse(split[1]);
                            name = split[2];
                        }
                        else if (split.Length == 4)
                        {
                            type   = (split[0] == "Send" ? PacketType.ClientServer : PacketType.ServerClient);
                            date   = DateTime.Parse(split[1]);
                            name   = split[2];
                            length = Convert.ToInt32(split[3]);
                        }
                        else
                        {
                            continue;
                        }

                        var packetStr  = line.Substring(tabIndex + 1, line.Length - tabIndex - 1);
                        var packetArr  = HexTool.ToByteArray(packetStr);
                        var packet     = new Packet(packetArr, type);
                        var palePacket = new PalePacket(name, length, packet, date, recv);

                        newPackets.Insert(0, palePacket);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Error on line " + ln + ": " + ex.Message, Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }

            LstPackets.BeginUpdate();

            foreach (var palePacket in newPackets)
            {
                AddPacketToFormList(palePacket, false);
            }

            LstPackets.EndUpdate();

            UpdateCount();

            foreach (var palePacket in newPackets)
            {
                if (palePacket.Received)
                {
                    pluginManager.OnRecv(palePacket);
                }
                else
                {
                    pluginManager.OnSend(palePacket);
                }
            }
        }
Exemplo n.º 15
0
 public override string ToString()
 {
     return(HexTool.toString(ToArray()));
 }
Exemplo n.º 16
0
        private Packet GetPacketFromInput()
        {
            if (!this.TryParseNumber(TxtOp.Text, out var op))
            {
                MessageBox.Show("Invalid OP code.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return(null);
            }

            if (!this.TryParseNumber(TxtId.Text, out var id))
            {
                MessageBox.Show("Invalid id.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return(null);
            }

            var packet = new Packet((int)op, id);

            var i = 0;

            foreach (var line in this.TxtData.Lines)
            {
                i++;

                if (string.IsNullOrWhiteSpace(line))
                {
                    continue;
                }

                var index = line.IndexOf(':');
                if (index == -1)
                {
                    MessageBox.Show($"Invalid data on line {i}: '{line}'.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return(null);
                }

                var typeStr = line.Substring(0, index).Trim();
                var dataStr = line.Substring(index + 1).Trim();

                try
                {
                    switch (typeStr.ToLowerInvariant())
                    {
                    case "byte": packet.PutByte((byte)ParseNumber(dataStr)); break;

                    case "short": packet.PutShort((short)ParseNumber(dataStr)); break;

                    case "ushort": packet.PutUShort((ushort)ParseNumber(dataStr)); break;

                    case "int": packet.PutInt((int)ParseNumber(dataStr)); break;

                    case "uint": packet.PutUInt((uint)ParseNumber(dataStr)); break;

                    case "long": packet.PutLong((long)ParseNumber(dataStr)); break;

                    case "ulong": packet.PutULong((ulong)ParseNumber(dataStr)); break;

                    case "float": packet.PutFloat(float.Parse(dataStr)); break;

                    case "string": packet.PutString(dataStr.Replace("\\n", "\n").Replace("\\t", "\t")); break;

                    case "bin": packet.PutBin(HexTool.ToByteArray(dataStr.Replace(" ", "").Replace("-", ""))); break;

                    default: throw new Exception("Invalid type.");
                    }
                }
                catch
                {
                    MessageBox.Show($"Invalid data on line {i}: '{line}'.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return(null);
                }
            }

            return(packet);
        }
Exemplo n.º 17
0
 public void WriteHexString(string value)
 {
     WriteBytes(HexTool.ToBytes(value, true));
 }