Entwickler-Ecke
Internet / Netzwerk - über delphi, online einen account einloggen
ppl - So 08.06.08 10:57
Titel: über delphi, online einen account einloggen
Guten Morgen,
ich stehe nun vor einer neuen herrausforderung, ich versuche so einen kleinen account checker zu machen
nur habe ich keine ahnung wie ich es schaffen soll mich über delphi dort:
https://steamcommunity.com/ einzuloggen,...
könnt ihr mir villt anregungen tipps oder schon andere sources geben, die ich nur noch ändern und verstehen muss?
mfg
ppl
EDIT: das wichtigste habe ich vergessen, es soll ne meldung kommeen wie einloggen möglich oder einloggen nicht möglich,... mehr nicht
Moderiert von
Christian S.: Topic aus VCL (Visual Component Library) verschoben am So 08.06.2008 um 11:45
GTA-Place - So 08.06.08 11:10
Mit
Indy [
http://www.indyproject.org/index.de.aspx] und IdHTTP.Post() schickst du die nötigen Daten an
http://steamcommunity.com
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| <form enctype="multipart/form-data" action="https://steamcommunity.com/" method="POST" name="loginForm" id="loginForm"> <input type="hidden" name="action" value="doLogin" /> <input type="hidden" name="goto" value="" /> <label for="steamAccountName">Steam Username:</label> <input class="textField" type="text" name="steamAccountName" id="steamAccountName" /> <label for="steamPassword">Password:</label> <input class="textField" type="password" name="steamPassword" id="steamPassword" autocomplete="off" /> <input class="subImage" type="image" id="imageLogin" onMouseover="iSwap('imageLogin','skin_1/buttonLoginOver.gif')" onMouseout="iSwap('imageLogin','skin_1/buttonLogin.gif')" src="https://steamcommunity.com/public/images/skin_1/buttonLogin.gif" width="104" height="25" border="0"/> </form> |
Der Rückgabewert der Funktion entspricht der Antwort der Seite. Da musst du dann nur mit Pos(); nach der Erfolgsmeldung suchen.
(Das mit Post geht dann ungefähr so:
http://www.delphi-forum.de/viewtopic.php?t=74676 Evtl. auch den Type umstellen.)
Blawen - So 08.06.08 13:07
Titel: Re: über delphi, online einen account einloggen
ppl hat folgendes geschrieben: |
EDIT: das wichtigste habe ich vergessen, es soll ne meldung kommeen wie einloggen möglich oder einloggen nicht möglich,... mehr nicht |
Ähmmm....
Du willst Dich doch nicht als "Hacker" betätigen :roll:
ppl - So 08.06.08 20:32
Titel: Re: über delphi, online einen account einloggen
Blawen hat folgendes geschrieben: |
Du willst Dich doch nicht als "Hacker" betätigen :roll: |
verstehe nicht ganz, wieso hacken? o.O
Moderiert von
Narses: Zitat gekürzt
Blawen - So 08.06.08 21:50
Titel: Re: über delphi, online einen account einloggen
ppl hat folgendes geschrieben: |
verstehe nicht ganz, wieso hacken? o.O |
Klingt irgendwie nach "mal schauen, wer alles noch das Standard-PW gesetzt hat"...
Moderiert von
Narses: Zitat gekürzt
ppl - Mo 09.06.08 20:47
Titel: Re: über delphi, online einen account einloggen
Blawen hat folgendes geschrieben: |
Klingt irgendwie nach "mal schauen, wer alles noch das Standard-PW gesetzt hat"... |
xD hört sich gut an ^^ , aber wo gibts den standart pws,.... ^^
Moderiert von
Narses: Zitat gekürzt
Blawen - Mo 09.06.08 22:13
Titel: Re: über delphi, online einen account einloggen
ppl hat folgendes geschrieben: |
xD hört sich gut an ^^ , aber wo gibts den standart pws,.... ^^ |
Diese gibts mehr als man vermuten würde....
Delacroix - Di 19.08.08 02:43
Sorry, dass ich den Thread nochmal ausgrabe, aber bevor ich einen neuen aufmache poste ich lieber hier rein, da ich genau das selber Problem nur mit einem anderen Code habe.
Funktioniert das was GTA-Place gesagt hat auch mit dem Login in dieser Form?
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| <div class="inputFeld"> <p class="lgbox" style="margin-left: 5px !important; margin-left: 3px; "><b>Benutzernummer:</b></p> <input type="text" name="Login" value="" maxlength="50" style="width:140px;" size="14"> <input type = "hidden" name = "Input_Login_Mandatory" value = "Yes"> <div style="height:1px;font-size:1px; clear:both"></div> <p class="lgbox" style="margin-left: 5px !important; margin-left: 3px; "><b>Passwort:</b></p> <input type="password" name="Password" maxlength="50" style="width:140px;font-size=12px;" size="14"> <input type = "hidden" name = "Input_Password_Mandatory" value = "Yes"> <div style="height:1px;font-size:1px; clear:both"></div> <input type="image" src="https://www.testseite.de/login.gif"> </div> |
Wäre super wenn jemand eine Antwort, einen Lösungsvorschlag oder am besten einen Codeschnipsel für mich hätte.
Mit Freundlichen Grüßen
Delacroix
BenBE - Di 19.08.08 14:45
Delacroix hat folgendes geschrieben: |
Funktioniert das was GTA-Place gesagt hat auch mit dem Login in dieser Form? |
Ja ... Schau doch einfach mal, was GTA-Place oben gemacht hat ...
Delacroix hat folgendes geschrieben: |
XML-Daten 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| <div class="inputFeld"> <p class="lgbox" style="margin-left: 5px !important; margin-left: 3px; "><b>Benutzernummer:</b></p> <input type="text" name="Login" value="" maxlength="50" style="width:140px;" size="14"> <input type = "hidden" name = "Input_Login_Mandatory" value = "Yes"> <div style="height:1px;font-size:1px; clear:both"></div> <p class="lgbox" style="margin-left: 5px !important; margin-left: 3px; "><b>Passwort:</b></p> <input type="password" name="Password" maxlength="50" style="width:140px;font-size=12px;" size="14"> <input type = "hidden" name = "Input_Password_Mandatory" value = "Yes"> <div style="height:1px;font-size:1px; clear:both"></div> <input type="image" src="https://www.testseite.de/login.gif"> </div> | |
Irgendwo dazu gibt's noch nen Form-Tag wo auch die Zieladresse drinsteht.
Delacroix - Di 19.08.08 21:08
Quelltext
1: 2:
| <form name="LoginForm" action="https://www.testseite.de/de_DE/ViewLogin-Process?Next=" method="POST"> <input type="hidden" name="NextPipeline" value=""> |
Das wäre dann die Zieladresse, wenn ich jedoch folgendes in den Browser eingebe findet kein Login statt, bin ich jetzt nur durcheinander oder unterscheidet sich der POST Befehl vollkommen von der Eingabe in der Adressleiste.
Quelltext
1:
| https://www.testseite.de/de_DE/ViewLogin-Process?Next=&Input_Login_Mandatory=Test&Input_Password_Mandatory=Testpass |
the-kecks - Do 09.07.09 23:00
sry, dass ich den thread hier nochmal ausgrabe aber ich habe genau bei dieser prozedur ein problem
ich mache es genauso wie GTA-Place es beschrieben hat, aber ich kriege immer die Exception "EIdHTTPProtocolException '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">'"
ich hab mal danach gegooglet und dort heißt es, dass der server sich weigert auf einen eigentlich gültigen request zu antworten.
Den Cookie krieg ich schon also ist der login erfolgreich.
PS: das mit dem Content type hab ich schon versucht, immernoch der gleiche fehler.
mfg
jaenicke - Do 09.07.09 23:30
Wie sieht denn dein Code derzeit aus?
the-kecks - Do 09.07.09 23:52
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| var Params : TStringList; HTMLCode : string; ... Params := TStringList.Create; Params.Add('action=doLogin'); Params.Add('goto='); Params.Add('steamAccountName=' + Memo1.Lines[i]); Params.Add('steamPassword=' + Memo2.Lines[i]); ... HTMLCode:=IdHTTP1.Post('https://steamcommunity.com/', Params); |
einstellungen
IdSSLIOHandlerSocketOpenSSL1:
- defaultport: 443
- Method: SSL v3
- Mode: Client
IdHTTP:
- handleRedirects: true
- cookiemanager
- IOHandler: IdSSLIOHandlerSocketOpenSSL1
- userAgent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10
mfg
jaenicke - Fr 10.07.09 00:50
Was mir auffällt: Bei einem Login via Browser werden auch noch die Parameter x und y mitgegeben. Siehe HttpFox.
Dann wird die Seite im Browser im UTF-8 Unicode Format zurückgegeben, du benutzt aber nicht Utf8ToAnsi oder Utf8Decode.
Dann steht da als Transfer-Encoding chunked, aber ich vermute das regelt Indy selbst.
the-kecks - Fr 10.07.09 01:25
ja das mit x und y ist mir auch aufgefallen, nur woher soll ich wissen welchen wert diese haben?
das mit utf8decode meinst du so oder?
Delphi-Quelltext
1: 2:
| HTMLCode:=utf8decode(HTMLCode); |
mfg
jaenicke - Fr 10.07.09 06:40
the-kecks hat folgendes geschrieben : |
ja das mit x und y ist mir auch aufgefallen, nur woher soll ich wissen welchen wert diese haben? |
Nimm doch einfach einen Wert und versuche es. Wenn der Server abfragt, ob diese gesetzt sind, dann klappt das sonst nicht.
Und welchen Wert die haben, musst du schon selbst feststellen, indem du in den Quelltext der Seite schaust. Vielleicht die Mausposition beim Klicken oder so.
the-kecks hat folgendes geschrieben : |
das mit utf8decode meinst du so oder? |
Ja.
the-kecks - Fr 10.07.09 14:55
die maus position kann nicht sein, dafür ist der button viel zu weit rechts (kommt nie ein wert über 100 in Live HTTP Headers)
im quelltext ist auch nix davon zu sehen. und wenn ich einfach nen wert nehm der bei live HTTP headers stand funzt es auch nicht
mfg
BenBE - Fr 10.07.09 14:58
X und Y sind die Koordinaten des Mausklicks relativ zum Bild. 0,0 ist die linke obere Ecke des Bildes ...
the-kecks - Fr 10.07.09 15:41
hab die variablen x, y jetz mal der cursorposition angepasst, geht aber immernoch nicht
PS: bei einer anderen seite habe ich eine information, die über 255 zeichen lang ist, was soll ich da nehmen um die daten zu speichern (geht ja nicht nur mit einer stringlist)?
mfg
Andreas L. - Fr 10.07.09 16:09
the-kecks hat folgendes geschrieben : |
hab die variablen x, y jetz mal der cursorposition angepasst, geht aber immernoch nicht
PS: bei einer anderen seite habe ich eine information, die über 255 zeichen lang ist, was soll ich da nehmen um die daten zu speichern (geht ja nicht nur mit einer stringlist)?
|
Warum sollte das nicht funktionieren?
Delphi-Quelltext
1:
| DeineStringList.text := |
sollte soviele Zeichen aufnehmen können wie freier Arbeitsspeicher verfügbar ist.
the-kecks - Sa 11.07.09 00:32
danke andreas!
aber der login bei steam funktioniert immernoch nicht. hat jmd vll schonmal so etwas gemacht wo man sich dort einloggen muss? verstehe den fehler nämlich irgendwie nicht :(
mfg
---
Moderiert von
Narses: Beiträge zusammengefasst---
weiß niemand wie man sich da einloggt? :(
mfg
Andreas L. - So 12.07.09 22:32
the-kecks hat folgendes geschrieben : |
weiß niemand wie man sich da einloggt? :(
|
Hast du dir die Seite mal angesehen? Da muss man einen Captcha-Code eingeben (Die Zeichen aus dem Bild). Das auszulesen wird wohl schwierig werden, und wie es da rechtlich aussieht....
the-kecks - So 12.07.09 22:42
man muss den captcha nur eingeben, wenn man mehrmals falsch lag mit seinen eingaben (vermutlich wegen bruteforcing)
mfg
---
Moderiert von
Narses: Beiträge zusammengefasst---
hab jetzt mal einige einstellungen geändert und jetzt bekomme ich nur die login seite augegeben nach dem post:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| Params:=TStringlist.create; Params.Add('action=doLogin'); Params.Add('goto='); Params.Add('steamAccountName=' + Memo1.Lines[i]); Params.Add('steamPassword=' + Memo2.Lines[i]); Params.Add('x=35'); Params.Add('y=14');
IdHTTP1.Request.Referer := 'https://steamcommunity.com/?action=doLogout'; IdHTTP1.Request.Host := 'steamcommunity.com'; IdHTTP1.Request.ContentType := 'multipart/form-data;'; IdHTTP1.Request.Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'; IdHTTP1.Request.AcceptCharSet := 'ISO-8859-1,utf-8;q=0.7,*;q=0.7'; IdHTTP1.Request.AcceptEncoding := 'gzip,deflate'; IdHTTP1.Request.AcceptLanguage := 'de-de,de;q=0.8,en-us;q=0.5,en;q=0.3';
HTMLCode:=IdHTTP1.Post('https://steamcommunity.com/', Params); |
mfg
Xentar - Mo 13.07.09 17:51
Hast du dir Params mal angesehen, bzw. anzeigen lassen? Nur so, was da überhaupt übertragen wird. Vielleicht nimmt er das falsche Passwort oder so.
Und warum verwendest du als Login und Passwort ein Memo, und kein Edit Feld? Und dann noch mit einer (Schleifen-)Variable..
Andreas L. - Mo 13.07.09 18:01
Xentar hat folgendes geschrieben : |
Und warum verwendest du als Login und Passwort ein Memo, und kein Edit Feld? Und dann noch mit einer (Schleifen-)Variable.. |
Irritiert mich auch :?
@the-kecks: Probiers mal so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| var HTMLCode: String;
...
var Params: TStrings; begin Params := TStringlist.Create; try Params.Add('action=doLogin'); Params.Add('goto='); Params.Add('steamAccountName=' + EditAccount.Text); Params.Add('steamPassword=' + EditPassword.Text); Params.Add('x=35'); Params.Add('y=14');
IdHTTP1.Request.Host := 'steamcommunity.com'; IdHTTP1.Request.UserAgent := 'Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.1) Gecko/20090624 Firefox/3.5 (.NET CLR 3.5.30729)';
try HTMLCode := IdHTTP1.Post('https://steamcommunity.com/', Params); except on E: Exception do ShowMessage(E.ToString + sLineBreak + E.Message); end; finally Params.Free; end; end; |
the-kecks - Mo 13.07.09 18:41
geht leider immrnoch nicht. bekomme weiterhin die login seite augegeben.
PS: der protokoll error kam weil ich den content type nicht auf multipart/form-data; gestellt hatte
mfg
Andreas L. - Mo 13.07.09 18:55
the-kecks hat folgendes geschrieben : |
geht leider immrnoch nicht. bekomme weiterhin die login seite augegeben.
PS: der protokoll error kam weil ich den content type nicht auf multipart/form-data; gestellt hatte
mfg |
Sehe es erst jetzt: Du möchtest dich ja über http
s einloggen, dazu musst du noch einen TIdSSLIOHandlerSocketOpenSSL auf dein Form ziehen und der Eigenchaft IOHandler von IdHttp zuweisen.
the-kecks - Mo 13.07.09 19:29
ja hab ich schon lang, hab auch den port auf 443, method auf v3 und mode auf client gesetzt
mfg
Andreas L. - Mo 13.07.09 19:33
Wie wärs wenn du mal alle Einstellungen die du im Objekt-Inspektor an den betreffenden Komponenten vorgenommen hast und deinen aktuellen Code hier posten würdest? Irgendwo muss da der Wurm drin sein ....
the-kecks - Mo 13.07.09 19:45
the-kecks hat folgendes geschrieben : |
einstellungen
IdSSLIOHandlerSocketOpenSSL1:
- defaultport: 443
- Method: SSL v3
- Mode: Client
IdHTTP:
- handleRedirects: true
- cookiemanager
- IOHandler: IdSSLIOHandlerSocketOpenSSL1
- userAgent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10
mfg |
eine seite zurückblättern...
PS: alles was nicht da steht oder im code oben steht ist auf standart
mfg
Andreas L. - Mo 13.07.09 20:03
Versuchs mal mit Default-Port 80. Außerdem kannst das OnStatus-Ereignis von SSLIOHandler auswerten, am besten mit einer ListBox. Nach wie vor bleibt die Frage was "Memo1.Lines[i]" soll. Wo wird i definiert? Hast du dir das schon mal mit ShowMessage(Memo1.Lines[i]) ausgeben lassen?
the-kecks - Mo 13.07.09 20:19
das prog soll am ende ein account checker werden.
d. h. man gibt die daten in 2 memos ein. 1 memo für den username, die andere memo fürs pw. in einer 3ten memo sollen dann die informationen über den acc (welche spiele etc.) ausgegeben.
PS: mit default port auf 80 gehts auch nicht :(
mfg
Andreas L. - Di 14.07.09 10:35
the-kecks hat folgendes geschrieben : |
das prog soll am ende ein account checker werden.
d. h. man gibt die daten in 2 memos ein. 1 memo für den username, die andere memo fürs pw. in einer 3ten memo sollen dann die informationen über den acc (welche spiele etc.) ausgegeben.
PS: mit default port auf 80 gehts auch nicht :(
mfg |
Warum verwendest du nicht 2 Editfelder für die Eingaben? Und nochmal: Wo bzw. welchen Wert weist du der Variable i zu? Möglicherweise sind noch Steuerzeichen im Memo.Lines[i] enthalten, versuch mal das:
Trim(Memo1.Lines[i]) Auf Groß- und Kleinschreibung achtest du schon beim User und PW eingeben? Zeig doch mal die komplette Unit...
the-kecks - Di 14.07.09 18:00
also nochmal:
es soll ein checker werden, der verschiedene accounts checkt. die account daten werden in 2 memos eingeben und dann checkt das programm diese nacheinander (deswegen i, löse das mit einer for schleife die jede zeile abarbeitet). und außerdem hab ich es schon ohne memo versucht und die login daten direkt in die stringlist gesetzt. funktioniert auch nicht.
ich jetz mal ein programm gemacht, dass sich auch bei steam einzuloggen versucht. da könnt ihr euch alles anschauen was ich mache :)
mfg
Andreas L. - Di 14.07.09 19:07
Du brauchst mir nicht mehrmals erklären was für ein Programm du machen willst, das habe ich verstanden!
Im folgenden Teil ist im String ein Semikolon, probiers mal ohne.
Delphi-Quelltext
1:
| IdHTTP1.Request.ContentType := 'multipart/form-data;'; |
Außerdem ist die dortige Angabe ein Encoding, kein Content-Type. Verwende die Eigenschaft Request.ContentEncoding
Du gibst als Referer das hier an:
Delphi-Quelltext
1:
| IdHTTP1.Request.Referer := 'https://steamcommunity.com/?action=doLogout'; |
Macht wenig Sinn, oder? Lass den Referer mal komplett weg oder probiers mit
https://steamcoummunity.com/ oder
https://steamcoummunity.com/index.php
Auch bei HTMLCode :=
IdHTTP1.Post('https://steamcommunity.com/', Params); kannst du mal index.php dranhängen.
Außerdem würde ich das ganze Zeug hier weglassen:
Delphi-Quelltext
1: 2: 3: 4:
| IdHTTP1.Request.Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'; IdHTTP1.Request.AcceptCharSet := 'ISO-8859-1,utf-8;q=0.7,*;q=0.7'; IdHTTP1.Request.AcceptEncoding := 'gzip,deflate'; IdHTTP1.Request.AcceptLanguage := 'de-de,de;q=0.8,en-us;q=0.5,en;q=0.3'; |
Ich würd ja selber mal ausprobieren wie man sich da einloggt, hab dort aber keinen UserAccount und werd mir auch keinen holen.
the-kecks - Di 14.07.09 19:55
so, ich habs zum laufen gebracht. ist zwar nicht sehr elegant, aber naja...es geht :)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53:
| procedure TForm1.Button1Click(Sender: TObject); var HTMLCode : String; Params : TStringlist; begin Params := TStringlist.Create; try Params.Add('action=doLogin'); Params.Add('goto='); Params.Add('steamAccountName=' + Edit1.Text); Params.Add('steamPassword=' + Edit2.Text); Params.Add('x=35'); Params.Add('y=14');
IdHTTP1.Request.Referer := 'steamcommunity.com/index.php'; IdHTTP1.Request.Host := 'steamcommunity.com'; IdHTTP1.Request.UserAgent := 'Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.1) Gecko/20090624 Firefox/3.5 (.NET CLR 3.5.30729)';
try HTMLCode := IdHTTP1.Post('https://steamcommunity.com/', Params); except on E: Exception do begin if E.Message='<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">' then begin URL:=Stringreplace(URL, ':443', '', [rfReplaceAll]); HTMLCode:=IdHTTP1.Get(URL); Memo2.Text:=Memo2.Text + HTMLCode; end else ShowMessage('Login fehlgeschlagen: "' + E.Message + '"'); end; end; finally Params.Free; end; end;
...
procedure TForm1.IdHTTP1Redirect(Sender: TObject; var dest: String; var NumRedirect: Integer; var Handled: Boolean; var VMethod: TIdHTTPMethod); begin if (VMethod = hmPost) then VMethod :=hmGet; memo1.Lines.Add('Redirect:'); memo1.Lines.Add(' Dest: '+dest); URL:=dest; memo1.Lines.Add(' NumRedirect: '+IntToStr(NumRedirect)); memo1.Lines.Add(' Handled: '+IntToStr(Integer(Handled))); memo1.Lines.Add(' Method: '+IntToStr(Integer(VMethod))); memo1.Lines.Add(''); end; |
der protokoll fehler kam wegen dem port...hab den entfernt und jetzt geht es :)
mfg
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!