Laden...

Schulaufgabe Bruteforce Problem mit webBrowser

Erstellt von Sgrab vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.523 Views
Thema geschlossen
Hinweis von MarsStein vor 12 Jahren

Verschoen aus Webtechnologien: WebBrowser-Fragen bitte im entsprechenden GUI-Bereich stellen.

S
Sgrab Themenstarter:in
22 Beiträge seit 2010
vor 12 Jahren
Schulaufgabe Bruteforce Problem mit webBrowser

Dies ist eine Schulaufgabe, es geht um Bruteforce.
Und zwar soll solange auf Passwörter gefragt werden, bis eine bestimme Seite erreicht wird, dann soll das Passwort ausgegeben werden.

Der Ablauf soll so aussehen.

  1. passwort string zusammen stückeln.
  2. versuch auf seite einzuloggen
  3. passwort ausgabe

        public string strPW;

        private void button1_Click(object sender, EventArgs e)
        {
            string strEmail = textBox1.Text;

            char[] cTest = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k',
                            'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
                            'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
                            'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
                            'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2',
                            '3', '4', '5', '6', '7', '8', '9'};

            int length = 5; 
            int charactersLength = cTest.Length;
            int[] odometer = new int[length];
            long size = (long)Math.Pow(charactersLength, length);

            for (int i = 0; i < size; i++)
            {
                strPW = GetString(odometer, cTest);
                webBrowser1.Navigate("www.example.com");
                webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
                int position = 0;
                do
                {
                    odometer[position] += 1;
                    odometer[position] %= charactersLength;
                } while (odometer[position++] == 0 && position < length);
            }

        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            string strEmail = textBox1.Text;
            string s = webBrowser1.DocumentText;
            HtmlElement ele = webBrowser1.Document.GetElementById("email");
            if (ele != null)
                ele.InnerText = strEmail;

            ele = webBrowser1.Document.GetElementById("pass");
            if (ele != null)
                ele.InnerText = strPW;

            ele = webBrowser1.Document.GetElementById("Login");
            if (ele != null)
                ele.InvokeMember("click");
            string strNewUrl = webBrowser1.Url.ToString();
            if (strNewUrl == "www.example.com/erfolg.php")
            {
                MessageBox.Show("jeaaahaaa");
            }
        }

        private static string GetString(int[] odometer, char[] characters)
        {
            char[] c = new char[5];
            int iTest = odometer.Length - 1;
            for (int i = 0; i <= odometer.Length - 1; i++)
            {
                c[iTest] = characters[odometer[i]];
                iTest--;
            }
            string strAusgabe = new string(c);
            return strAusgabe;
        }

So viel hab ich bisher, aber ich weiß nicht wie ich meine Schleife anhalten kann, um zu testen ob das Passwort korrekt ist oder nicht.

Hoffe hier kann mir jm. helfen.

Mfg

3.170 Beiträge seit 2006
vor 12 Jahren

Hallo,

aber ich weiß nicht wie ich meine Schleife anhalten kann

In einer boolschen (Member)variablen merken, wenn du durchgekommen bist, und diese in die Abbruchbedingung mit aufnehmen.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

1.130 Beiträge seit 2007
vor 12 Jahren
  
                webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);  

Du bist gleich in 2 fettnäpfchen auf einmal getreten:
1.) Das event sollte man nur einmal abbonieren, sonst wird der handler mehrfach ausgeführt
2.) Du abbonierst erst NACH dem navigate

Bist du sicher, dass es so schlau ist, soviele navigates hintereinander zu machen? Ich würde das eher im completed-handler machen.

In einer boolschen (Member)variablen merken, wenn du durchgekommen bist, und diese in die Abbruchbedingung mit aufnehmen.

break; bzw. return; ?(

for(int stelle=0;;stelle++)
{
    if(stelle>=odometer.Length)return;
    if(++odometer[stelle]>=charactersLength)
        odometer[stelle]=0;
    else
        break;
}

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!

3.170 Beiträge seit 2006
vor 12 Jahren

Hallo Floste,

Du bist gleich in 2 fettnäpfchen auf einmal getreten:

So genau hatte ich den Code gar nicht angesehen - hätte ich wohl tun sollen.

break; bzw. return;

Ich dachte es ginge darum, die äußere for-Schleife abzubrechen (in der GetString aufgerufen wird)...
Aber die ist bei näherem Hinsehen, wie Du richtig schreibst, ja auch schon Unsinn, weil man erst mal das Laden der Seite abwarten sollte, bevor man neu navigiert 🤔

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo Sgrab,

wie schon angedeutet arbeitet Windows Forms ereignisbasiert. Man kann nicht einfach eine Schleife programmieren. Schon alleine wegen [FAQ] Warum blockiert mein GUI? nicht. Die Alternative hier ist allerdings nicht, die Verarbeitung in Threads auszulagern, weil das WebBrowser-Control intern sowieso schon Threads verwendet. Es reicht, den nächsten Schritt im DocumentCompleted-Event für den vorigen Schritt anzustoßen. Ich kann mir allerdings nicht vorstellen, dass ihr eine solche Aufgabe bekommt, ohne diesen Umstand oder zumindest die Ereignisbasierung von Windows Forms vorher durchzusprechen.

Insofern fällt das also unter Grundlagen. Siehe dazu [Hinweis] Wie poste ich richtig? Punkt 1.1.1.

herbivore

Thema geschlossen