C++ Browsergame Bot

07/07/2015 23:34 Krabat2#1
Hallo :)

Ich wollte mich mal an einen Browsergame Bot ransetzen.

Ich habe Grundkenntnisse in C++, und mir ist bewusst -jedenfalls sagen das viele - Das es mit C# um einiges leichter sein soll, warum weiß ich ehrlich gesagt nicht dass ist mir auch egal denn mit C++ müsste es ja auch klappen.

Ich habe im Internet gelesen dass man für das Browsergame "Wurzelimperium" sehr leicht ein Bot erstellen kann, das es kaum Sicherheitsmaßnahmen besitzt.

Ich hab mal etwas rumgespielt und mit Wireshark mit geschnitten.

Ich habe als erstes eine Pflanze geerntet ohne dass sie fertig war, eine neue angepflanzt, diese gegossen und dann geerntet sobald sie fetig war.

1.HTTP 799 GET /ajax/ajax.php?do=changeGarden&garden=1&token=1fff7bdd8e 2e851cc5ce967764636de8 HTTP/1.1

2.HTTP 798 GET /save/ernte.php?pflanze[]=32&feld[]=3&felder[]=3&closepopup=1&ernteJa=ernteJa HTTP/1.1

3.HTTP 815 GET /save/pflanz.php?pflanze[]=6&feld[]=3&felder[]=3&cid=1fff7bdd8e2e851cc5ce967764636de8&garden=1 HTTP/1.1

4.HTTP 803 GET /save/wasser.php?feld[]=3&felder[]=3&cid=1fff7bdd8e2e851cc5ce967764636de8&garden=1 HTTP/1.1

5.HTTP 788 GET /save/ernte.php?pflanze[]=6&feld[]=3&felder[]=3&cid=1fff7bdd8e2e851cc5ce967764636de8&garden=1 HTTP/1.1

1.=Zum Garten gewechselt
2.=Unfertige Pflanze geerntet
3.=Neu Angepflanzt
4.=Gegossen
5.=Fertig geerntet

Als erstes ist mir dieser token aufgefallen, und ich frage mich wie dieser generiert wird.
-Beim neu einloggen ändert sich dieser Token-

Als zweites frage ich mich warum der token nicht benötigt wird wenn man die unfertige pflanze erntet.

Soooo... Wenn ich jetzt wüsste wie ich selber diesen token generiere bzw herausfinde, dann bräuchte ich doch "nur" eine Bibliothek (Habe oft von curl oder libcurl gehört) mit der ich diese Befehle abschicken kann und dann würde es schon funktionieren?

Mir ist bewusst dass wenn ich einen guten Bot machen würde, dass dies locker mehrere Monate daueren kann.

MFG
07/08/2015 00:49 Requi#2
Den Token wirst du höchstwahrscheinlich im Quelltext auslesen können, den du beim Login anfragst (Hauptseite des Spiels).

Beim 2. müsstest du den Entwickler fragen. Wir wissen nicht was er sich dabei gedacht hat :D

Naja. Für den Token, musst du dich wie gesagt einloggen und aus dem Quelltext raus extrahieren um es mal grob zu sagen.
07/08/2015 07:23 Krabat2#3
Vielen Dank schonmal für den Hinweis :)

Ich habe tatsächlich etwas gefunden. Nachdem ich mich eingeloggt habe, habe ich im Quelltext das hier gefunden: ajax.setToken("1224820dd88134b606b8182d4d9b2ab3");

Ich kenne mich mit sowas nicht aus und frage mich jetzt wie ich den abfragen kann.

Gibt es sowas wie ajax.getToken oder so? :D
07/08/2015 07:30 Jeoni#4
Nachdem du die Login-Request abgeschickt hast, einfach per Regex oder dergleichen in der Response nach der Stelle suchen und den Token damit auslesen.
Da brauchst du kein JavaScript-Interpreter oder sowas, um damit eigens irgendeine Funktion aufzurufen.
Mit freundlichen Grüßen
Jeoni
07/08/2015 21:09 Krabat2#5
Ich habe jetzt mal die POST Pakete gescannt (Mit dem Login Post loggt man sich doch ein ? :confused: )

Und habe das hier gefunden:

HTTP 922 POST /dispatch.php?r=598890346 HTTP/1.1 (application/x-www-form-urlencoded)

Und das sieth ja wieder nach einem token oder so aus.

Der ändert sich auch bei jedem Login, und jetzt fareg ich mich wie ich den Token raus kriegen kann, denn der wird doch erst beim Login generiert oder?
07/08/2015 21:23 Requi#6
Das scheint mir eher wie eine random zahl die generiert wird. Ist wahrscheinlich da um schlechte Bots zu erkennen (die immer den selben Random nutzen)
07/08/2015 21:28 Krabat2#7
Das bedeutet die Zahl die ich verwende ist egal? Solange ich nicht jedesmal die selbe verwende?
07/08/2015 22:37 Jeoni#8
Möglich. Kann aber auch sein, dass die Zahl, die dort hingehört, nicht einfach zufällig vom Client generiert wird, sondern vom Server und irgendwo (ggf. versteckt) im Quelltext von der Seite steht, von der die Post-Request aus gesendet wird.
Kannst es erst mit zufälligen Zahlen probieren und wenn es nicht klappt, die mal den Quelltext ansehen. Oder du schaust gleich nach, ob dem so ist, damit du gar nicht erst Aufmerksamkeit auf dich ziehst und ggf. einen Bann kassierst (ist bei so einem f2p Game aber eh egal).
Mit freundlichen Grüßen
Jeoni
07/09/2015 18:11 Krabat2#9
Soo...

Ich habe diesen Code kopiert und durch meine Url, server, name und passwort ersetzt und erfreulicherweise hat es nicht nur funktioniert, sondern es wurde auch gleich der token mitgeschickt
[Only registered and activated users can see links. Click Here To Register...]

Ich werde mal etwas recherchieren und sicherlich herausfinden wie ich den Token auch in meinem programm dann verwenden kann. Vielen Dank an euch :)

Edit: der Link [Only registered and activated users can see links. Click Here To Register...]
07/13/2015 15:22 Krabat2#10
Ich musste leider feststellen , dass ich mich in der Materie noch zu wenig auskenne um den Token zu extrahiere.

Wie gesagt der gesamte Code ist nur C&P mit leichten Änderungen.

Die Info über den Status und den Token bekomme ich ja mit diesem Befehl:
curl_easy_perform(curl);

Ich weiß nicht wie man den Token jetzt einzeln verwenden kann :(

Wäre froh wenn mir jemand helfen könnte.


Jetzt zu meiner 2. Frage. Um z.B. eine Pflanze anbauen zu können müsste ich doch nur diesen Befehl hier verwenden:
PHP Code:
curl_easy_setopt(curlCURLOPT_URL"http://s46.wurzelimperium.de/main.php?/save/pflanz.php?pflanze[]=6&feld[]=3&felder[]=3&cid=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&garden=1 "); 
oder ohne das "/main.php?"?
07/17/2015 20:17 Delinquenz#11
Du musst eine CURLOPT_WRITEFUNCTION verwenden und den Body (das, was dir da in der Konsole ausgegeben wird) in eine Variable speichern. Aus dieser Variable machst du dann entweder ein JSON oder du extrahierst die Daten, die du brauchst, mit regulären Ausdrücken.

EDIT: Ok, nicht auf's Datum geschaut..
07/17/2015 21:29 Krabat2#12
Ist doch nur 4 Tage her Ò_ó

Ich habe mich erstmal mit einem anderen browsergame beschäftigt (ohne token)

Aber danke für die Hilfe ich werde es die nächsten Tage testen
07/25/2015 12:42 dready#13
Quote:
Originally Posted by Requi View Post
Das scheint mir eher wie eine random zahl die generiert wird. Ist wahrscheinlich da um schlechte Bots zu erkennen (die immer den selben Random nutzen)
Hat zu 99% nichts mit ner Boterkennung zu tun. Random zahlen, die am ende einer Url kommen sind nahezu immer zum umgehen von ProxyCaching gedacht, da es immernoch welche gibt die die ganzen Caching Header nicht sauber erfassen. Durch das Anhängen einer Randomzahl ist sichergestellt das du nicht die gecachte Antwort die für ein anderen User war bekommst.