Browsergame Bot trotz HTTPS bzw "urlencoded"

07/10/2017 23:27 Memphiisto#1
Hallo!

Ich wollte mich nun nach einiger Zeit wiedereinmal ans Programmieren wagen und etwas neues testen...
Daher habe ich mir Shadows altes aber gutes Tutorial geschnappt und wollte mir einen Packetbot für ein Browsergame basteln..
[Only registered and activated users can see links. Click Here To Register...]

Alles nach Anleitung gemacht und hat auch alles gepasst, nur habe ich nun das Problem (ich vermute dass das Problem hierrin liegt), dass heutzutage so gut wie alle Browsergame Websites HTTPS verwenden...
Wenn ich lt. Tutorial versuche mit dem Bot zu verbinden, bekomme ich leider nur die Meldung "Moved Permanently"

Jetzt ist es die Frage ob es immernoch eine Möglichkeit gibt, dennoch zu verbinden, oder müsste man hierzu zuerst die Verschlüsselung "knacken"?


Mein Code bisher(sieht logischerweise fast gleich aus wie im Tutorial nur für ein anderes Browsergame):
PHP Code:
#include<String.au3>

$name=InputBox("Accountname","Gib deinen Accountnamen ein")
$passwort=InputBox("Passwort","Gib dein Passwort ein")

TCPStartup()
$ip TCPNameToIP('de.forgeofempires.com')
TCPShutdown()

$post='login%5Buserid%5D='&Change($name)&'&login%5Bpassword%5D='&Change($passwort)&'&login%5Bremember_me%5D=false'
$source=TCPRequest($ip,'de.forgeofempires.com',0"glps/login_check",$post""'https://de.forgeofempires.com/glps/iframe-login')
$cookies=GetCookies($source)
MsgBox(0,"Testsource",$source)
MsgBox(0,"Testpost",$post)







Func GetCookies($sQuellcode)
    
Local $sCookies$i$aCookies
    $sCookies 
''
    
$aCookies _StringBetween($sQuellcode'Set-Cookie: '';'1)
    For 
$i 0 To UBound($aCookies) - 1
        $sCookies 
&= $aCookies[$i] & ';'
    
Next
    
Return $sCookies
EndFunc   
;==>GetCookies

Func TCPRequest
($sIp$sHost,$msg=0$sSeite ""$sPost ''$sCookies ''$sReferer ''$iMaxTime 10000)
    
Local $sPacket$iSocket$iTimer

    
If $sPost '' Then
        $sPacket 
'GET /' $sSeite ' HTTP/1.1' & @CRLF
    
Else
        
$sPacket 'POST /' $sSeite ' HTTP/1.1' & @CRLF
    
EndIf
    
$sPacket &= 'Host: ' $sHost & @CRLF _
            
'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)' & @CRLF _
            
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' & @CRLF _
            
'Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3' & @CRLF _
            
'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7' & @CRLF _
            
'Keep-Alive: 300' & @CRLF _
            
'Content-Type: application/x-www-form-urlencoded' & @CRLF _
            
'Connection: keep-alive' & @CRLF
    
If $sReferer <> '' Then
        $sPacket 
&= 'Referer: ' $sReferer & @CRLF
    
EndIf
    If 
$sCookies <> '' Then
        $sCookies
=StringStripCR($sCookies)
        
$sCookies=StringStripWS($sCookies,8)
        
$sPacket &= 'Cookie: ' $sCookies & @CRLF
    
EndIf
    If 
$sPost <> '' Then
        $sPacket 
&= 'Content-Length: ' StringLen($sPost) & @CRLF
    
EndIf
    
$sPacket &= @CRLF
    
If $sPost <> '' Then
        $sPacket 
&= $sPost
    
EndIf
    If 
$msg=1 Then
    MsgBox
(0,"Packet",$sPacket)
    EndIf
    
TCPStartup()
    If @
error Then Return SetError(10"")
    
$iSocket TCPConnect($sIp80)
    If @
error Then Return SetError(20"")
    
TCPSend($iSocket$sPacket)
    If @
error Then Return SetError(30"")
    
$iTimer TimerInit()
    Do
        
$sRecv TCPRecv($iSocket1024)
        If 
TimerDiff($iTimer) > $iMaxTime Then Return SetError(40"")
    
Until $sRecv <> ""
    
Do
        
$sRecv &= TCPRecv($iSocket1024)
    
Until @error Or StringInStr($sRecv'</html>')
    
TCPCloseSocket($iSocket)
    
TCPShutdown()
    Return 
$sRecv
EndFunc   
;==>TCPRequest

Func Change
($string)
    
$string StringReplace($string"%""%25")
        
$string StringReplace($string"†""%E2%80%A0")
    
$string StringReplace($string"ä""%C3%A4")
    
$string StringReplace($string"ö""%C3%B6")
    
$string StringReplace($string"ü""%C3%BC")
    
$string StringReplace($string"!""%21")
    
$string StringReplace($string'"'"%22")
    
$string StringReplace($string"§""%C2%A7")
    
$string StringReplace($string"$""%24")
    
$string StringReplace($string"&""%26")
    
$string StringReplace($string"/""%2F")
    
$string StringReplace($string"+""%2B")
    
$string StringReplace($string" ""+")
    
$string StringReplace($string"(""%28")
    
$string StringReplace($string")""%29")
    
$string StringReplace($string"=""%3D")
    
$string StringReplace($string"?""%3F")
    
$string StringReplace($string"[""%5B")
    
$string StringReplace($string"]""%5D")
    
$string StringReplace($string"{""%7B")
    
$string StringReplace($string"}""%7D")
    
$string StringReplace($string"ß""%C3%9F")
    
$string StringReplace($string",""%2C")
    
$string StringReplace($string":""%3A")
    
$string StringReplace($string";""%3B")
    
$string StringReplace($string"#""%23")
    
$string StringReplace($string"~""%7E")
    
$string StringReplace($string"²""%C2%B2")
    
$string StringReplace($string"³""%C2%B3")
    
$string StringReplace($string"<""%3C")
    
$string StringReplace($string">""%3E")
    
$string StringReplace($string"|""%7C")
    
$string StringReplace($string"^""%5E")
    
$string StringReplace($string"°""%C2%B0")
    
$string StringReplace($string"´""%C2%B4")
    
$string StringReplace($string"@""%40")
    
$string StringReplace($string"€""%E2%82%AC")
    Return 
$string
EndFunc   
;==>Change 


Ansonsten kenne ich mich in AutoIt einigermaßen gut aus nur habe ich noch nie einen Packet Bot gemacht!

Würde mich sehr über eine Antwort freuen!

lg Memphiisto


Edit: 11.07.2017

Hier im Anhang noch ein Bild des Post Packages wenn ich mich über Firefox anmelde..

[Only registered and activated users can see links. Click Here To Register...]
07/11/2017 12:27 Shadow992#2
Ja das Problem liegt ziemlich sicher in SSL.
Allgemein sind die Funktionen mittlerweile ziemlich "veraltet", weil etliche aktuelle Sachen nicht beachtet werden.

Schnapp dir stattdessen lieber WinHTTP oder etwas aehnliches: [Only registered and activated users can see links. Click Here To Register...]

Hier indirekt ein kleines Beispiel:
[Only registered and activated users can see links. Click Here To Register...]

Sieht zwar auf den ersten Blick etwas komisch aus, aber im prinzip bleiben natuerlich die Grundideen des Tutorials bestehen.
07/12/2017 17:01 Memphiisto#3
Quote:
Originally Posted by Shadow992 View Post
Ja das Problem liegt ziemlich sicher in SSL.
Allgemein sind die Funktionen mittlerweile ziemlich "veraltet", weil etliche aktuelle Sachen nicht beachtet werden.

Schnapp dir stattdessen lieber WinHTTP oder etwas aehnliches: [Only registered and activated users can see links. Click Here To Register...]

Hier indirekt ein kleines Beispiel:
[Only registered and activated users can see links. Click Here To Register...]

Sieht zwar auf den ersten Blick etwas komisch aus, aber im prinzip bleiben natuerlich die Grundideen des Tutorials bestehen.


Hallo!

Zunächst einmal vielen Dank für die schnelle Antwort! :)
Ich dachte mir ich teste jetzt einmal einige Zeit ob ich es selbst her bekomme, bevor ich wieder Sinnlos Antworte und um Code bettle...

Ich bin so weit gekommen, dass ich den ersten Schritt weiter bin... Allerdings nur dann, wenn ich bereits einen Tab offen habe in welchem ich eingeloggt bin...
Verwende jetzt die WinHTTP.au3...

Habe schon ca 20 verschiedene Arten getestet und auch versucht komplett ohne UDF zu verbinden, aber ich krig es irgendwie nicht gebacken dass sich das verdammte Ding einloggt...
Der Get und der Filewrite waren kein Problem... nach dem öffnen wird mir die Seite angezeigt...

Wenn ich mich dann mit dem Post einlogge (Filewrite danach wieder zum überprüfen) bekomme ich wenn ich die Html öffne nur wieder die gleiche Seite mit einem schwarzen halbdurchsichtigen Layer darüber...

Ich habe zwar die verschiedensten Arten getestet aber der letzte versuch sah wie folgt aus:
(Eine der kürzesten Varianten welche ich bisher getestet habe... die längste war ca 150 Zeilen Lang nur der Login...)

PHP Code:
#include <WinHTTP.au3>

$hSession_WinHttpOpen('User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0')


$hConnect_WinHttpConnect($hSession'de0.forgeofempires.com')

$html_WinHttpSimpleSSLRequest($hConnect"Post""glps/login_check HTTP/1.1""de.forgeofempires.com""login%5Buserid%5D=USERNAME&login%5Bpassword%5D=PASSWORD&login%5Bremember_me%5D=false")
FileWrite("Loginmenu.html"$html
Ich weiß nicht was ich falsch mache, oder was mir noch fehlt...
Muss ich eventuell irgendwie selbst von Hand die Cookies hinterlegen?


Zum Verständnis noch die Schritte die zum Login benötigt werden und wie das im Live HTTP Headers aussieht...:
  1. Auf [Only registered and activated users can see links. Click Here To Register...] Navigieren
  2. Username und Passwort Eintragen und auf "Login" klicken
  3. Auf "Spielen klicken"
  4. Nachdem auf Spielen geklickt wurde geht ein neues Fenster auf... dort muss der Server ausgewählt werden.

Live HTTP Headers:
"Login":

Spielen "klick":

Serverauswahl "klick":



Würde mich sehr freuen nochmals etwas hilfe zu bekommen :)

Vielen dank!
Lg Memphisto