Пример #1
0
        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}";
                }));
            });
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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);
                }
        }