Register for your free account! | Forgot your password?

Go Back   elitepvpers > Other Online Games > Browsergames > DarkOrbit
You last visited: Today at 04:24

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[TuT] Der eigene DarkOrbit Bot.

Discussion on [TuT] Der eigene DarkOrbit Bot. within the DarkOrbit forum part of the Browsergames category.

Reply
 
Old   #1
 
elite*gold: 14
The Black Market: 108/0/1
Join Date: May 2011
Posts: 2,671
Received Thanks: 818
[TuT] Der eigene DarkOrbit Bot.



Ich habe keine bessere Überschrift gefunden, also habe ich diese genommen.
Das Tutorial soll jedoch nicht erklären, wie ihr euch genau einen Bot schreibt, sondern eher wie einer funktioniert.
Aber glaubt mir, solltet ihr einen Bot schreiben wollen, werdet ihr unweigerlich auf diesen Beitrag stoßen.

Zunächst müssen wir uns fragen, was denn so ein Bot überhaupt macht.
Grundsätzlich erledigt er für uns lästige Dinge um uns bspw. Rohstoffe zu sammeln.
Das heißt, wir müssen jetzt herausfinden, wie der Client mit dem Server kommuniziert und welche "Packets" sich diese zusenden.

Dazu verwende ich mein eigenes Programm, ihr könnt aber auch "WPE Pro" nehmen. Einfach googlen.

Sagen wir, wir fliegen gerade mit unserem Schiff durch die Gegend.
Jetzt sehen wir neben uns eine Bonus Box.
D.h. der Client sendet dem Server seine aktuelle Position.
Der Server sagt dann: "Nenene, stop, du bist gerade in der nähe einer Bonus Box.", und sendet die Informationen der Bonus Box wie ID, Position und Inhalt zu.
Der Client erstellt diese dann und "zeichnet" sie auf den Bildschirm.

Genau dieses Packet müssen wir jetzt abfangen.
Dazu erstellen wir in der Programmiersprache unseres Vertrauens einen "TCPClient" (auch googlen) und verbinden zum Darkorbit Server.
Die aktuelle IP und der aktuelle Port lautet 62.146.191.117 und 8080.

Das Login Packet sieht so aus:
Code:
LOGIN|USERID|SESSIONID|CLIENTVERSION
Beispiel:
Code:
LOGIN|120301|123919dkdfkalksdj1j381|3.0.5
Dieses Packet senden wir jetzt über unseren StreamWriter an den Darkorbit Server.
Als Beweis, das wir auch wirklich ein Mensch sind, und kein Bot senden wird gleich danach das Packet "PNG", was für "Ping" steht.
Also sieht das bis jetzt so aus:
Code:
LOGIN|120301|123919dkdfkalksdj1j381|3.0.5
PNG
Das sind natürlich 2 einzelne Packets, nicht ein Packet mit einem Zeilenumbruch.

Als Antwort bekommen wir jetzt vom Server ein großes Packet, in dem alles steht, was wir zu beginn brauchen.
Das sieht bspw. so aus:
Code:
0|TX|S|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0
0|A|SET|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|3|3|1|1|0|0|1|0|1|1
0|7|WINDOW_SETTINGS,3|0,36,24,1,1,275,21,1,3,1020,520,1,5,90,74,0,10,999,336,1,36,100,400,0,13,269,116,0,20,7,544,1,23,1060,131,1,24,541,21,0
0|7|AUTO_START|0
0|7|SIMPLE_SHIPS|0
0|7|WINDOW_SETTINGS,4|0,424,11,1,1,674,5,1,15,944,0,0,3,1020,700,1,5,10,10,0,24,457,187,0,10,1050,509,1,20,26,712,1,13,315,212,0,23,1059,200,1
0|7|BAR_STATUS|34,0,35,0,23,0,24,0,25,1,26,0,27,0
0|7|DISPLAY_WINDOW_BACKGROUND|1
0|7|SHOW_DRONES|1
0|7|PRELOAD_USER_SHIPS|0
0|7|SLOTMENU_POSITION,3|478,593
0|7|AUTO_REFINEMENT|1
0|7|SLOTMENU_POSITION,4|499,772
0|7|MINIMAP_SCALE,1|10
0|7|SLOTMENU_POSITION,1|312,451
0|7|WINDOW_SETTINGS,1|0,27,12,1,1,250,12,1,24,562,7,0,3,768,380,1,5,5,5,0,10,766,260,1,20,10,395,1,13,187,50,0,23,500,9,1
0|7|DISPLAY_ENGINE_WASTE|1
0|7|CLIENT_RESOLUTION|4,1280,900
0|7|MAINMENU_POSITION,4|536,801
0|7|QUICKBAR_SLOT|3,4,5,6,7,39,11,12,13,57
0|7|MAINMENU_POSITION,1|349,480
0|7|MAINMENU_POSITION,3|514,623
0|7|DOUBLECLICK_ATTACK|1
0|7|ALWAYS_DRAGGABLE_WINDOWS|1
0|7|QUICKSLOT_STOP_ATTACK|1
0|I|USERID|USERNAME|9|273|24480|24480|137732|128000|1200|1200|473|450|1|1|11869|18000|900|3|1|652380|3410|8|1140630|7402|54.25|6|FoS|0|0|0
0|A|CC|2
0|B|673|254|118|1|3384|0
0|3|60|0|417|0|0|0|0|10|0|0|0|0|0|0
0|RL|S|1|9|0
0|RL|R|0|0|155
0|3|60|0|417|0|0|0|0|10|0|0|0|0|0|0
0|TX|S|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0
0|A|ITM|0|1|0|0|2|0|0|0|0|0|0|0|0|0|0|0
0|E|0|0|0|4|0|0|0|0|0
0|m|1|21000|13500
0|s|0|1|Vice Station|1|1500|1000|1000
0|p|1|1|0|18500|11500
0|n|ctb|m|0
0|n|INV|70857960|0
0|S|CFG|1
0|n|w|0
0|g|a|b,1000,1,10000.0,C,2,475.0,U,3,950.0,U,5,950.0,U|r,100,1,10000,C,2,50000,C,3,475.0,U,4,665.0,U
0|9|ini|{case:107,0,1,0,1{cond:372,6,6,14,40,1,1,1}}
0|9|p|107
0|9|ini|{case:200,0,1,0,1{case:201,1,1,1{cond:577,23,0,0,0,1,1,3059,20000,1,1,1}{cond:688,6,1,0,1,0,1,1{subs{cond:689,19,13,0,0,0,1,1}}}}{cond:575,1,21779975,0,1,0,1}}
0|A|BS|0/0/0/0/0/0/0/0/0/0
0|A|FWX|INL|-1
0|A|SET|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|3|3|1|1|0|0|1|0|1|1
0|D|473|450|1|0|0|0|0|0|473|450
0|PET|I|0|0|0
0|A|v|273
0|8
0|K|103500251
0|K|103500266
Dieses Packet können wir jetzt mit einem "Split" Befehl (dieser ist in jeder Programmiersprache verschieden) "filtern" und uns die Daten holen, die wir brauchen.
Zum Beispiel UserID, Username, Hitpoints, Shield und den Cargoinhalt.

Aber jetzt zum eigentlichen Bot.
Dieser soll ja für uns rumfliegen, das heißt er muss irgendwie dem Server mitteilen, das er sich bewegen will.
Das geht wie folgend:
Code:
0|1|PosX|PosY
Beispiel:
Code:
0|1|10319|12391
Dieser bewegt sich jetzt an die Koordinaten 10.319 und 12.391.
Die Kommastellen sind eigentlich unwichtig.
Erst beim sammeln von Rohstoffen etc. werden sie relevant.
Sobald unser Schiff an der Position angekommen ist, erhalten wir ein weiteres Packet:
Code:
0|D|PosX|PosY
In unserem Fall wäre das:
Code:
0|D|10319|12391
Da der Bot aber auch Sachen aufsammeln soll, müssen wir noch überprüfen, ob etwas in der Nähe ist ("streamed-in"), das wir aufsammeln können.
Das finden wir heraus, indem wir überprüfen, ob der Server dem Client die Anweisung gibt, ein Item zu erstellen.
Das wäre das Packet dafür:
Code:
0|c|ItemID|PosX|PosY|Content
Beispiel:
Code:
0|c|13|11220|12000|500
Das wäre eine Bonusbox mit 500 Credits Inhalt.
(Nein, man kann keine Packets an sich selbst senden und den Inhalt verändern).

Dann lassen wir den Client das Item wie folgt aufsammeln:
Code:
0|C|13|11220|12000
Weitere Commands findet ihr leicht mit WPE Pro heraus, da sie nicht verschlüsselt sind.
Vergleicht einfach die Werte mit denen, von eurem Schiff etc. und schon findet ihr heraus, welche Werte zu welchen gehören.

Ich hoffe das hat euch etwas geholfen.
Und das war nur ein sehr kleiner Einblick in den "Arbeitstag eines Bots".

MfG, Cencel.


vwap is offline  
Thanks
18 Users
Old 05/20/2011, 23:04   #2
 
elite*gold: 0
Join Date: May 2009
Posts: 335
Received Thanks: 29
Du hast die Grundprinzipien schön erklärt.
Allerdings kann man das Tutorial noch "richtig ausweiten".

Wie der Bot selbstständig an die UserID;SID und Client Version kommt.
Wie er selbst Einstellungen im Clienten Checkt bzw. Ausführt usw.
x_Ulli_x is offline  
Old 05/20/2011, 23:06   #3
 
elite*gold: 134
Join Date: Dec 2010
Posts: 1,472
Received Thanks: 164
genau das ist sozumsagen 30% der arbeit aber ein bisschen zu kurz beschrieben
Assazinz_ is offline  
Old 05/20/2011, 23:08   #4
 
elite*gold: 0
Join Date: May 2009
Posts: 335
Received Thanks: 29
Quote:
Originally Posted by Assazinz_ View Post
genau das ist sozumsagen 30% der arbeit aber ein bisschen zu kurz beschrieben
Da liegst du aber falsch, das ist noch nicht mal 10 % der Arbeit.
Damit fängt die Arbeit erst an.
Allerdings kann man ja das Tutorial in mehreren Teilen weiterführen.
x_Ulli_x is offline  
Old 05/20/2011, 23:11   #5
 
elite*gold: 134
Join Date: Dec 2010
Posts: 1,472
Received Thanks: 164
hmm naja so nach seiner sicht aus wär das 30% mann muss ja alles erst schreiben & konfig. ein richtiges gutes tut wär fast 1-10 seiten vollgeschrieben ohne space...
Assazinz_ is offline  
Old 05/20/2011, 23:35   #6
 
elite*gold: 14
The Black Market: 108/0/1
Join Date: May 2011
Posts: 2,671
Received Thanks: 818
Wie gesagt, es soll garnicht ein Step-by-step tutorial o. Ä. sein, es soll einfach mal zeigen, was dahinter steckt.
Ich finde, das "schöne" am Bot schreiben ist dieser "Woa, es funktioniert wirklich"-Effekt.
Und den erziele ich nur, wenn ich etwas selbst mache .
vwap is offline  
Thanks
1 User
Old 05/21/2011, 01:26   #7

 
Trulala's Avatar
 
elite*gold: 170
Join Date: May 2008
Posts: 1,942
Received Thanks: 2,236
Also um "im Weltall" zu idlen sendet man:
Code:
LOGIN
PNG
und dann laut der main.swf (3.0.5) -> public static var answerToLife:int = 42;
alle 42 Sekunden ein PNG zum Server, seh ich das so richtig?

*edit*
Gibt es keine anti-bot Pakete, oder zumindest einen Tipp ob es sich lohnt noch auf etwas zu achten? (Außer der Honeyboxliste)
Trulala is offline  
Old 05/21/2011, 07:51   #8
 
M0nkeyD.Ruffy's Avatar
 
elite*gold: 0
Join Date: May 2011
Posts: 49
Received Thanks: 16
Ja,das würde mich auch interssieren.Wie wird denn ein Bot jetzt vom Server erkannt?
M0nkeyD.Ruffy is offline  
Old 05/21/2011, 08:49   #9



 
Serraniel's Avatar
 
elite*gold: 2222
The Black Market: 204/1/0
Join Date: May 2010
Posts: 6,851
Received Thanks: 5,106
zb durch eine falsche clientvers. an den te: wird die clientversion nicht bei jedem packet mitgesendet???
Serraniel is offline  
Old 05/21/2011, 08:56   #10
 
4PR28U's Avatar
 
elite*gold: 170
Join Date: May 2009
Posts: 711
Received Thanks: 1,131
Ich finde es gut, dass du soetwas hier erstellt, doch solltest du darauf achten auch die richtigen Befehle hier rein zu stellen!

z.B. ist der Befehl um eine Koordinate anzufligen nicht wie du geschrieben hast:
Code:
0|1|12000|11000
sondern:
Code:
1|12000|11000|aktuelle_x_position|aktuelle_y_pos


"Dieser bewegt sich jetzt an die Koordinaten 10.319 und 12.391."
Er würde sich wohl eher nach 103|123 bewegen (wenn der Flugbefehl richtig wäre)

Außerdem ist auch deine Aussage mit der Gameserverip so nicht richtig

"Die aktuelle IP und der aktuelle Port lautet 62.146.191.117 und 8080."

Diese gilt gerade jetzt für deinen Server und deine aktuelle Map! Nachlesen lassen sich die Maps unter (Man achte auf den Quelltext):

das de1 ist mit dem jeweiligen Serverkürzel zu ersetzen!


Auch das mit den Bonusboxen stimmt so nich!
Code:
0|c|ItemID|PosX|PosY|Content
müsste wohl eher so aussehn:
Code:
0|c|ItemID|[COLOR=Red]typ_id[/COLOR]|PosX|PosY|Content
Und auch das Aufsammeln geht nicht mit: "0|C|..." (Das ist eine Meldung für ein anderes Spielerschiff/Alien)
sondern mit:
Code:
x|ItemID

Aber trotzdem ein guter Anfang
4PR28U is offline  
Thanks
2 Users
Old 05/21/2011, 08:59   #11

 
elite*gold: 1369
Join Date: Jan 2009
Posts: 2,841
Received Thanks: 1,244
Wow, sowas hab ich schon seit Monaten gesucht.
Yevii is offline  
Old 05/21/2011, 10:03   #12



 
Serraniel's Avatar
 
elite*gold: 2222
The Black Market: 204/1/0
Join Date: May 2010
Posts: 6,851
Received Thanks: 5,106
eig ist das ganze ja ganz einfach. sniffen, tcp clienten proggen, und packete senden empfangen. aber dann komtm ja noich die ganze arbeit beim auswerten vom sniffen und das wep pro )oider wie das heißt) bei mir nur errors auspuckt^^
also über mehr richtige packlets würde man sich freuen^^
Serraniel is offline  
Old 05/21/2011, 10:11   #13
 
Klenix123's Avatar
 
elite*gold: 17
Join Date: Apr 2009
Posts: 769
Received Thanks: 198
die packets rauszufinden ist doch ganz einfach, wpe starten ausführen was zu wissen willst wpe stoppen und dann suchen...

Wenn man jetzt nen Bot schreiben will, ist das eig. nicht so hilfreich(ist meine Meinung)
Ein Thread wo man auf die Auswertung der Daten eingeht wäre nichts schlechtes, da hab ich nähmlich meine Probleme...
Klenix123 is offline  
Old 05/21/2011, 12:37   #14
 
elite*gold: 0
Join Date: May 2009
Posts: 335
Received Thanks: 29
Ich empfehlen euch EtherDetect.
Filter auf den Port einstellen (8080) und los geht´s.
x_Ulli_x is offline  
Old 05/21/2011, 13:26   #15

 
iṄk's Avatar
 
elite*gold: 820
Join Date: May 2009
Posts: 1,748
Received Thanks: 5,339
Die Schwierigkeit besteht nicht in der Paketanalyse.
Es ist bspw. viel Mathematik notwendig.
Ein Bann fast schon garantiert, wenn man die Positionsangaben des Servers nutzt. Ein Bot muss seine Position selbst berechnen können.
Zum anderen darf ein Bot nicht sofort seine Position ändern, wenn eine Box auftaucht und er darf auch nicht genau die Position der Box ansteuern.
Und das sind nur ein paar Beispiele.

Übrigens finde ich es wirklich richtig blöd von Bigpoint, ein so selbstverständliches Protokoll zu benutzen.
Sie hätten von Anfang an auf Byte-ebene operieren sollten, wie es z.B. bei Warpfire der Fall ist. Dann wäre der Bot-markt wesentlich "sauberer"
iṄk is offline  
Thanks
2 Users
Reply




All times are GMT +2. The time now is 04:24.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.