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()); } } } }
/// <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); } }
/// <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); } } }
/// <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); } }
/// <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); }
/// <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); } }
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); }
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); }
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); }
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); } }
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); } }
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]); }
/// <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); } } }
public override string ToString() { return(HexTool.toString(ToArray())); }
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); }
public void WriteHexString(string value) { WriteBytes(HexTool.ToBytes(value, true)); }