Verschoen aus Webtechnologien: WebBrowser-Fragen bitte im entsprechenden GUI-Bereich stellen.
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.
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
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
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;
}
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
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