Exemple #1
0
        /// <summary>
        /// Create the Mask Table the PayloadMasker will use
        /// </summary>
        /// <param name="Seed">The seed will be used to randomize the start position</param>
        /// <param name="MaxLength">The maximum length in bytes to bruteforce</param>
        /// <param name="OutStream">The stream for writing the output</param>
        public static void CreateMaskTable(int Seed, ushort MaxLength, Stream OutStream)
        {
            if (!OutStream.CanWrite)
            {
                throw new Exception("OutStream does not have Write");
            }
            if (MaxLength <= 0)
            {
                throw new Exception("MaxLength should be atleast 1 or higher");
            }

            Stopwatch     sw           = Stopwatch.StartNew();
            ulong         Speed        = 0;
            double        PrevVal      = 0;
            double        MaxVal       = 0;
            List <double> Digits       = new List <double>();
            DataShuffler  dataShuffler = new DataShuffler(Seed);

            for (double i = 0, h = 8; i < MaxLength; i++, h += 8)
            {
                int ByteIndex = (int)i + 1;
                PrevVal = MaxVal;
                MaxVal  = Math.Pow(2, h);
                ProgressHelper progressHelper = new ProgressHelper((ulong)(MaxVal - PrevVal));

                for (double j = PrevVal; j < MaxVal; j++)
                {
                    byte[] num = BitConverter.GetBytes((ulong)j);
                    Speed++;
                    Digits.Add(j);
                    progressHelper.Update(1);

                    if (Digits.Count > 10000000)
                    {
                        SaveMaskTable(ref Digits, ref dataShuffler, ByteIndex, ref OutStream);
                    }

                    if (sw.ElapsedMilliseconds >= 1000)
                    {
                        Console.WriteLine(num[0].ToString("X4") + " " +
                                          num[1].ToString("X4") + " " +
                                          num[2].ToString("X4") + " " +
                                          num[3].ToString("X4") + " " +
                                          num[4].ToString("X4") + " " +
                                          num[5].ToString("X4") + " " +
                                          num[6].ToString("X4") + " " +
                                          num[7].ToString("X4"));
                        TimeSpan ETA = progressHelper.TimeLeft;
                        Console.WriteLine("Speed " + Speed + " a second, current byte length: " + ByteIndex + ", " + progressHelper.Progress + "% done, Time Left:" + ETA.Hours.ToString("D2") + ":" + ETA.Minutes.ToString("D2") + ":" + ETA.Seconds.ToString("D2"));
                        Speed = 0;
                        sw    = Stopwatch.StartNew();
                    }
                }
                SaveMaskTable(ref Digits, ref dataShuffler, ByteIndex, ref OutStream);
            }
        }
Exemple #2
0
        private static void SaveMaskTable(ref List <double> Digits, ref DataShuffler dataShuffler, int ByteIndex, ref Stream OutStream)
        {
            if (Digits.Count == 0)
            {
                return;
            }

            Console.WriteLine("Digits:" + Digits.Count);
            PayloadWriter pw = new PayloadWriter();

            double[] Shuffled = dataShuffler.Shuffle <double>(Digits.ToArray(), 1, (double progress, TimeSpan TimeLeft, int speed) =>
            {
                if ((int)progress % 5 == 0.0F)
                {
                    Console.WriteLine("Shuffle progress:" + progress + ", Speed: " + speed + ", Time Left: " + TimeLeft.Hours.ToString("D2") + ":" + TimeLeft.Minutes.ToString("D2") + ":" + TimeLeft.Seconds.ToString("D2"));
                }
            });

            for (int k = 0; k < Shuffled.Length; k++)
            {
                int Target = (int)Shuffled[k];

                pw.WriteByte((byte)ByteIndex);        //byte length

                if (ByteIndex >= 1 || ByteIndex <= 3) //play it safe
                {
                    pw.WriteUInteger((uint)Target);
                }
                else
                {
                    pw.WriteDecimal(Target);
                }

                if (pw.Length >= 65535)
                {
                    OutStream.Write(pw.GetBuffer(), 0, pw.Length);
                    OutStream.Flush();
                    pw = new PayloadWriter();
                }
            }
            if (pw.Length > 0)
            {
                OutStream.Write(pw.GetBuffer(), 0, pw.Length);
                OutStream.Flush();
            }
            pw.Dispose();
            Digits.Clear();
        }