Programme freeze, aide ajouter thread

Résolu
deli2025 Messages postés 40 Date d'inscription vendredi 14 mars 2008 Statut Membre Dernière intervention 4 mai 2020 - 19 avril 2011 à 16:42
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 - 19 avril 2011 à 17:41
Bonjour, je suis nouveau dans le domaine de c# et j'apprends sur le tas^^

Je viens de créer un petit programme qui hash du texte en sha1 ou md5 et maintenant je me suis lancé dans un programme de BruteForce.

Le problème est donc que le programme va utiliser une boucle pour tester les toutes les combinaisons possibles et que cela le fige...

Je me suis un peu renseigné et je pense que la solution est la création de Threads.

J'ai également trouvé le tuto du site du zéro ici : <lien url="http://www.siteduzero.com/tutoriel-3-275673-les-threads-en-c.html">http://www.siteduzero.com/tutoriel-3-275673-les-threads-en-c.html</lien>

Mais je n'y arrive pas à l'adapter à mon code...

Voici le code du bouton pour lancer l'application :



<code type="csharp">
//Bouton "Brute force"
        //===================================================================
        private void button1_Click(object sender, EventArgs e)
        {

            //Si l'input du hash est vide
            if (textBox1.Text.Length <= 0)
            {
                MessageBox.Show("Vous devez entrez un hash avant de lance le programme !", "Brute-Tools By D3L1");
            }
            //Si l'input du hash est checked et MD5 est plus petit ou plus grand que 32
            else if (radioButton1.Checked & textBox1.Text.Length != 32)
            {
                MessageBox.Show("Une chaine hacher en MD5 doit faire 32 caractères de long !", "Brute-Tools By D3L1");
            }
            //Si le hash est correct alors on commence
            else
            {
                             
                enCour = 0;
                
                //Récupère la valeur du hash
                string hash = textBox1.Text;

                //Récupère la valeur de la chaine de caractères "ABCD...."
                String lowerAlpha = textBox2.Text;

                //La longeur minimal du password en clair
                int passLengthMin = 1;

                //La longeur maximal du password en clair
                int passLengthMax = 30;

                //Calcul la longeur du hash et appel la fonction BruteForce
                for(int i = passLengthMin; i <= passLengthMax; i++)
                {
                    if (enCour == 0)
                    {
                        BruteForce(lowerAlpha, i, hash);                    
                    }
                    else
                    {
                        i = passLengthMax;
                    }
                }

            }
            
        }


Cela appel donc plusieurs fois la fonction

<code type="csharp">
//Fonction de Brute Force 
//===================================================================
private void BruteForce(String charset, int wordLength, string pass)
{
   ....
}


Qui elle même appel plusieurs fois la fonction

<code type="csharp">
//Fonction de hachage MD5
//===================================================================
private string GetMD5Hash(string str)
{
   ....
}


Le Programme fonctionne parfaitement si la valeur de "passLengthMax" ne dépasse pas 4. Au delà sa se fige...

Donc maintenant je tente de créer un thread, j'ajoute la bibli ---> using System.Threading; et je le crée :

//On crée le thread.
Thread t1 = new Thread(new ThreadStart(BruteForce(lowerAlpha, i, hash)));

//Puis on le lance !
t1.Start();

mais je ne sais pas ou le mettre et si c'est correct

Merci d'avance pour votre aide...

8 réponses

LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
19 avril 2011 à 17:01
Salut,

Le mieux serait d'inclure ta boucle dans le traitement du Thread...
...
}
//Si le hash est correct alors on commence
else
{
    // Lancement du thread
    Thread thread = new Thread( new ThreadStart( DoTask ) );
    thread.Start();
}


et tu ajoutes la méthode suivante :
private void DoTask()
{
    enCour = 0;

    //Récupère la valeur du hash
    string hash = textBox1.Text;

    //Récupère la valeur de la chaine de caractères "ABCD...."
    String lowerAlpha = textBox2.Text;

    //La longeur minimal du password en clair
    int passLengthMin = 1;

    //La longeur maximal du password en clair
    int passLengthMax = 30;

    //Calcul la longeur du hash et appel la fonction BruteForce
    for(int i = passLengthMin; i <= passLengthMax; i++)
    {
        if (enCour == 0)
        {
            BruteForce(lowerAlpha, i, hash);                    
        }
        else
        {
            i = passLengthMax;
        }
    }
}


Après je ne sais pas où tu stockes le résultat de ton traitement...
Mais si tu as d'autres questions; n'hésites pas
3
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
19 avril 2011 à 17:25
Si !!

Au lieu de modifier ton textBox3 directement, tu exécutes ceci :
Invoke( new Action<string>( ChangeTextBox3 ), "la nouvelle valeur de textBox3" );


et tu rajoutes la méthode suivante :
private void ChangeTextBox3( string text )
{
    textBox3.Text = text;
}


Cordialement ;)
3
deli2025 Messages postés 40 Date d'inscription vendredi 14 mars 2008 Statut Membre Dernière intervention 4 mai 2020
19 avril 2011 à 17:04
Je teste et je te dis quoi ^^ Merci en tout cas
0
deli2025 Messages postés 40 Date d'inscription vendredi 14 mars 2008 Statut Membre Dernière intervention 4 mai 2020
19 avril 2011 à 17:11
J'ai un message d'erreur :

Opération inter-threads non valide : le contrôle 'textBox3' a fait l'objet d'un accès à partir d'un thread autre que celui sur lequel il a été créé.

En fait une fois que la fonction BruteForce trouve la correspondance du mot hacher elle l'affiche dans un textBox
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
19 avril 2011 à 17:13
OK !

C'est parce que tu modifies TexteBox3 durant le traitement...
Alors utilises plutôt un BackgroundWorker!

Tu devrais trouver ton bonheur avec ça...
0
deli2025 Messages postés 40 Date d'inscription vendredi 14 mars 2008 Statut Membre Dernière intervention 4 mai 2020
19 avril 2011 à 17:18
Il n'y a pas moyen de contourner le problème et garder le Thread plutôt que d'utiliser BackgroundWorker ?
0
deli2025 Messages postés 40 Date d'inscription vendredi 14 mars 2008 Statut Membre Dernière intervention 4 mai 2020
19 avril 2011 à 17:37
Un grand merci pour ton aide !!
0
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
19 avril 2011 à 17:41
De rien ;)
0
Rejoignez-nous