Ejemplo n.º 1
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);
            }
Ejemplo n.º 2
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;
            }