Example #1
0
 /// <summary>
 /// Obtiene los AllowedChars desde varias cadenas de strings
 /// </summary>
 /// <param name="alloweds">Caracteres permitidos</param>
 public static BruteForceAllowedChars[] SplitAllowed(params string[] alloweds)
 {
     BruteForceAllowedChars[] ar = new BruteForceAllowedChars[alloweds.Length];
     for (int x = 0; x < ar.Length; x++)
     {
         ar[x] = new BruteForceAllowedChars(alloweds[x]);
     }
     return(ar);
 }
Example #2
0
 /// <summary>
 /// Separa una palabra en todos los posibles caracteres que puede tener cada caracter
 /// </summary>
 /// <param name="word">Palabra a separar</param>
 public static BruteForceAllowedChars[] SplitWordMixed(string word, EMixCase mixCase)
 {
     BruteForceAllowedChars[] ar = new BruteForceAllowedChars[word.Length];
     for (int x = 0; x < ar.Length; x++)
     {
         ar[x] = new BruteForceAllowedChars(word[x], true, mixCase == EMixCase.All || (mixCase == EMixCase.OnlyFirst && x == 0));
     }
     return(ar);
 }
Example #3
0
     public BruteForceAllowedChars[] Get()
     {
         if (MixCase == BruteForceAllowedChars.EMixCase.None)
         {
             return new BruteForceAllowedChars[] { new BruteForceAllowedChars(Input) }
         }
         ;
         return(BruteForceAllowedChars.SplitWordMixed(Input, MixCase));
     }
 }
Example #4
0
            static bool Increment(int[] indexes, char[] current, BruteForceAllowedChars[] chars)
            {
                int position = indexes.Length - 1;

                while (position >= 0)
                {
                    indexes[position]++;
                    BruteForceAllowedChars ch = chars[position];
                    if (indexes[position] < ch.Allowed.Length)
                    {
                        current[position] = ch.Allowed[indexes[position]];
                        return(true);
                    }
                    indexes[position] = 0;
                    current[position] = ch.Allowed[0];
                    position--;
                }
                return(false);
            }
Example #5
0
 public check(string input, BruteForceAllowedChars.EMixCase mix)
 {
     Input = input; MixCase = mix;
 }
Example #6
0
 /// <summary>
 /// Separa una palabra en todos los posibles caracteres que puede tener cada caracter
 /// </summary>
 /// <param name="word">Palabra a separar</param>
 public static BruteForceAllowedChars[] SplitWordMixed(string word, EMixCase mixCase)
 {
     BruteForceAllowedChars[] ar = new BruteForceAllowedChars[word.Length];
     for (int x = 0; x < ar.Length; x++)
     {
         ar[x] = new BruteForceAllowedChars(word[x], true, mixCase == EMixCase.All || (mixCase == EMixCase.OnlyFirst && x == 0));
     }
     return ar;
 }
Example #7
0
 /// <summary>
 /// Obtiene los AllowedChars desde varias cadenas de strings
 /// </summary>
 /// <param name="alloweds">Caracteres permitidos</param>
 public static BruteForceAllowedChars[] SplitAllowed(params string[] alloweds)
 {
     BruteForceAllowedChars[] ar = new BruteForceAllowedChars[alloweds.Length];
     for (int x = 0; x < ar.Length; x++)
         ar[x] = new BruteForceAllowedChars(alloweds[x]);
     return ar;
 }
Example #8
0
            static bool Increment(int[] indexes, char[] current, BruteForceAllowedChars[] chars)
            {
                int position = indexes.Length - 1;

                while (position >= 0)
                {
                    indexes[position]++;
                    BruteForceAllowedChars ch = chars[position];
                    if (indexes[position] < ch.Allowed.Length)
                    {
                        current[position] = ch.Allowed[indexes[position]];
                        return true;
                    }
                    indexes[position] = 0;
                    current[position] = ch.Allowed[0];
                    position--;
                }
                return false;
            }
Example #9
0
            static IEnumerable<string> GetAllMatches(BruteForceAllowedChars[] chars, string prefix, string suffix)
            {
                int length = chars.Length;

                int[] indexes = new int[length];
                char[] current = new char[length];
                for (int i = 0; i < length; i++)
                    current[i] = chars[i].Allowed[0];

                do
                {
                    yield return prefix + new string(current) + suffix;
                }
                while (Increment(indexes, current, chars));
            }
Example #10
0
            /// <summary>
            /// Lanza el proceso de fuerza bruta
            /// </summary>
            /// <param name="length">Tamaño</param>
            /// <param name="prefix">Prefijo de la contraseña</param>
            /// <param name="suffix">Sufijo de la contraseña</param>
            /// <param name="threads">Hijos a lanzar</param>
            /// <param name="action">Acción a realizar</param>
            public static int Run(BruteForceAllowedChars[] length, string prefix, string suffix, int threads, IBruteForceAction action)
            {
                CancellationTokenSource cancel = new CancellationTokenSource();
                action.CancellationTokenTask = cancel;

                bool multiple = action.AllowMultiplePasswords;

                // Calculo total
                int lleva = 0, total = 1;
                foreach (BruteForceAllowedChars c in length) { total *= c.Allowed.Length; }

                // Contraseña
                IEnumerable<string> passwords = GetAllMatches(length, prefix, suffix);

                int founds = 0;
                // Tarea
                try
                {
                    ParallelLoopResult res =
                        Parallel.ForEach<string>(passwords,
                        new ParallelOptions()
                        {
                            MaxDegreeOfParallelism = threads,
                            CancellationToken = cancel.Token
                        },
                        password =>
                        {
                            // Progreso aumentado
                            Interlocked.Increment(ref lleva);
                            // Comprobar contraseña
                            if (action.CheckPassword(password))
                            {
                                if (multiple || Interlocked.Increment(ref founds) == 1)
                                {
                                    SystemSounds.Question.Play();
                                    action.Accept(password);
                                    if (!multiple) action.Cancel(true);
                                }
                            }
                            // Comprobar si se ha cancelado
                            action.CheckIfNeedCancel();
                        });
                }
                catch (Exception e)
                {
                }
                return lleva;
            }