Esempio n. 1
0
        /// <summary>
        /// Metoda bežící ve vlákně
        /// </summary>
        /// <param name="inf">Informace předávané dovnitř vlákna</param>
        private void Cracker(object inf)
        {
            CrackerInfo Info = (CrackerInfo)inf;

            // Data z předané struktury
            short  CharsetLength = (short)Info.Charset.Length;
            int    MaximumLength = Info.MaxLength;
            UInt64 Combinations  = (UInt64)Math.Pow((double)CharsetLength, (double)MaximumLength);

            string Test = String.Empty;

            for (Progress = 0; Progress < Combinations; Progress++)
            {
                // Pokračuj jen v případě, že se podaří získat vlastictví uzamykacího objektu, jinak na něj čekej.
                lock (LockObject)
                {
                    Test = String.Empty;
                    int[] Digits = ConvertToBase(Progress, CharsetLength); // Převeď číslo do daného číselného základu

                    // Vytvoř z čísla v daném základu text
                    for (int j = 0; j < Digits.Length; j++)
                    {
                        Test += Info.Charset[Digits[j]];
                    }

                    // Porovnej zahashovaný text se vstupem
                    if (Info.Hash.ToLower() == Info.F(Test).ToLower())
                    {
                        FoundPassword = Test;
                        break;
                    }
                }
            }
        }
Esempio n. 2
0
        private void buttonStartStop_Click(object sender, EventArgs e)
        {
            if (CrackingThread == null)
            {
                // Vytvoř a naplň strukturu CrackerInfo pro vlákno které bude crackovat
                CrackerInfo Info = new CrackerInfo();
                Info.Hash      = textHash.Text;
                Info.Charset   = textCharset.Text;
                Info.MaxLength = (int)numericLength.Value;

                // Vyber delegát daného hashovacího algoritmu podle toho co uživatel vybral v políčku Algoritmus
                switch (comboAlgo.SelectedIndex)
                {
                case 0: Info.F = new HashFunction(MD5Hash); break;

                case 1: Info.F = new HashFunction(SHA1Hash); break;

                case 2: Info.F = new HashFunction(SHA256Hash); break;

                case 3: Info.F = new HashFunction(RIPEMD160Hash); break;

                default: Info.F = new HashFunction(MD5Hash); break;
                }

                labelResult.Visible = false;
                FoundPassword       = null;

                // Vytvoř a spusť vlákno
                CrackingThread = new Thread(new ParameterizedThreadStart(Cracker));
                CrackingThread.Start(Info);

                groupInput.Enabled   = false;
                buttonStartStop.Text = "Pozastavit";
            }
            else if (CrackingThread.ThreadState == ThreadState.Running)
            {
                // Získej vlastnictví uzamykacího objektu a pozastav tak vlákno
                buttonStartStop.Text = "Obnovit";
                Monitor.Enter(LockObject);
            }
            else if (CrackingThread.ThreadState == ThreadState.WaitSleepJoin)
            {
                // Uvolni vlastnictví uzakmykacího objektu a umožni vláknu pokračovat
                Monitor.Exit(LockObject);
                buttonStartStop.Text = "Pozastavit";
            }
        }
Esempio n. 3
0
        private void buttonStartStop_Click(object sender, EventArgs e)
        {
            if (CrackingThread == null)
            {
                // Vytvoř a naplň strukturu CrackerInfo pro vlákno které bude crackovat
                CrackerInfo Info = new CrackerInfo();
                Info.Hash = textHash.Text;
                Info.Charset = textCharset.Text;
                Info.MaxLength = (int)numericLength.Value;

                // Vyber delegát daného hashovacího algoritmu podle toho co uživatel vybral v políčku Algoritmus
                switch (comboAlgo.SelectedIndex)
                {
                    case 0: Info.F = new HashFunction(MD5Hash); break;
                    case 1: Info.F = new HashFunction(SHA1Hash); break;
                    case 2: Info.F = new HashFunction(SHA256Hash); break;
                    case 3: Info.F = new HashFunction(RIPEMD160Hash); break;

                    default: Info.F = new HashFunction(MD5Hash); break;
                }

                labelResult.Visible = false;
                FoundPassword = null;

                // Vytvoř a spusť vlákno
                CrackingThread = new Thread(new ParameterizedThreadStart(Cracker));
                CrackingThread.Start(Info);

                groupInput.Enabled = false;
                buttonStartStop.Text = "Pozastavit";
            }
            else if (CrackingThread.ThreadState == ThreadState.Running)
            {
                // Získej vlastnictví uzamykacího objektu a pozastav tak vlákno
                buttonStartStop.Text = "Obnovit";
                Monitor.Enter(LockObject);
            }
            else if (CrackingThread.ThreadState == ThreadState.WaitSleepJoin)
            {
                // Uvolni vlastnictví uzakmykacího objektu a umožni vláknu pokračovat
                Monitor.Exit(LockObject);
                buttonStartStop.Text = "Pozastavit";
            }
        }