private void LoadSniff(object sender, EventArgs e) { var fileDialog = new OpenFileDialog { Filter = @"PKT files|*.pkt" }; if (fileDialog.ShowDialog() != DialogResult.OK) { return; } Processor = new BinaryProcessor(); Processor.OnPacketParsed += PacketStore.Insert; Task.Factory.StartNew(() => { var stopwatch = new Stopwatch(); stopwatch.Start(); Processor.Process(fileDialog.FileName); stopwatch.Stop(); Invoke((MethodInvoker)(() => { _filterTextBox.AutoCompleteCustomSource.Clear(); _filterTextBox.AutoCompleteCustomSource.AddRange(Enum.GetNames(typeof(Opcodes))); _opcodeListView.Enabled = true; _opcodeListView.Objects = PacketStore.GetAvailablePackets(); _filterTextBox.Enabled = true; _sniffLoadProgressBar.Visible = false; toolStripStatusLabel1.Text = $"{Processor.Count} packets parsed in {stopwatch.Elapsed}"; })); }); }
public void TestFile() { using (var fs = File.OpenRead(@"C:\Users\verto\Desktop\Reversing\Sniffs\22996_2016-11-30_09-40-46.pkt")) { var sw = new Stopwatch(); sw.Start(); BinaryProcessor.Process(fs); sw.Stop(); Console.WriteLine("Parsed in {0}.", sw.Elapsed); } }
public void TestMethod1() { using (var ms = new MemoryStream()) using (var writer = new BinaryWriter(ms)) { #region PKT bullshit writer.Write(new byte[3 + 2 + 1]); writer.Write(20772); // Build writer.Write(System.Text.Encoding.UTF8.GetBytes("enUS")); // Locale writer.Write(new byte[40 + 4 + 4 + 4]); // Write a single dummy opcode writer.Write(0x47534D43u); // CMSG writer.Write(0); // Connection ID writer.Write(1489646141); // Timestamp writer.Write(0); // Opt. Data Length var sizeOffset = ms.Position; writer.Write(0); // placeholder writer.Write((int)OpcodeClient.CMSG_AUTH_SESSION); var ofsStart = ms.Position; #endregion writer.Write(1000ul); // DosResponse writer.Write((ushort)15595); // Build writer.Write((byte)1); // BuildType writer.Write((uint)2); // RegionID writer.Write((uint)3); // BattlegroundID writer.Write((uint)4); // RealmID // LocalChallenge foreach (var i in Enumerable.Range(0, 16)) { writer.Write((byte)i); // 0, 1, ..., 15 } // Digest foreach (var i in Enumerable.Range(100, 24)) { writer.Write((byte)i); // 100, 101, ..., 123 } // UsesIPv6 writer.Write((byte)0xFF); // all bits set, cheap, but just to make it work // RealmJoinTicket const string realmJoinTicket = "!Warpten:[email protected]"; writer.Write(realmJoinTicket.Length); writer.Write(System.Text.Encoding.UTF8.GetBytes(realmJoinTicket)); #region PKT stuff // Get actual data size, skip back to position, write size ofsStart = ms.Position - ofsStart; ms.Position = sizeOffset; writer.Write((int)ofsStart + 4); // Aaaand back to the start we go ms.Position = 0; #endregion BinaryProcessor.Process(ms); // Console.WriteLine("{0}", PacketStore.Count); } }