Sammelthread zum Thema Bots in Classic

Einen Bot programmieren ist keine ein Mann Arbeit. Das ist schon ziemlich harter Tobak, musst dich mit Hardwarenaher Programmierung auskennen, ich tippe in dem Fall auf C++, da du den Ram auslesen musst, du musst verstanden haben, wie Blizz Ihr Sicherheitsprogramm funktioniert und du musst den Bot ja noch Unfallfrei durch die Welt steuern.

Die Bots die es gerade gibt, sind zum großen Teil Pixelbots und dürften sich nicht lange halten. Das es beim Pixelbot doch recht schwierig sein dürfte, unterschiedliche Wegpunkte zu nutzen.

Die Afk Bots in den Bgs nehme ich mal aus, die kann jeder Dussel machen.

Doch.

Nein.

Muss man nicht.

Kann genau so gut jede andere Sprache sein.

Musst du nicht

Vorausgesetzt, dass hat tatsächlich wirklich brauchbare Heuristiken. Andernfalls nein. Möglichst unvorhersehbar zu sein, sollte dabei jedem schon vor der ersten Codezeile eingefallen sein.

Das ist tatsächlich kein zu unterschätzender Punkt, aber eher des Aufwandes wegen (also reine Fleißarbeit), nicht weil es unlösbar ist.

Ich weiß nicht was ein Pixelbot ist, aber wenn der es nicht schafft unterschiedliche Wegpunkte zu nutzen, ist er offensichtlich weit weniger raffiniert als er (auch ohne Raketenwissenschaft) sein könnte.

WIr reden hier nicht von nem Pixelbot.

Wie willst du auf Pats und Situationen reagieren wenn du a den Ram nicht ausliest oder B nen Pixelbot benutzt ?
Irgendwoher muss der Bot ja seine Informationen beziehen.

Das habe ich oben schon lang und breit theoretisiert. Auch hier nochmal die Bitte: lies es.

Du thematisierst nen Pixelbot, gemischt mit Informationen aus dem Interface, die bleiben nicht lange. Das Interface kann man nutzen, das stimmt, da kann man ne Menge Infos rausholen, wenn das Ding aber laufen soll, reichen die Informationen aus dem Interface nicht, wenn du den Ram nicht ausliest bleibt an dieser Stelle nur der Pixelbot. Liest du Ihn aus kannst du es nicht in jeder Sprache machen, denn du benötigst schon eine die auf den Ram zugreifen kann , wie Java oder c++.

// Tante Edit meint: vielleicht geht das doch, wenn man die Koordinaten ausliest und sich an die hält und für jede Karte erstellt, finde ich aber sehr beschränkt nutzbar.

Wenn das, was ich oben theoretisiert habe, allgemein Pixelbot genannt wird: gut, dann bin ich da schon mal schlauer als vorher. Dass es sowas schon gibt, bestätigt ja nur meine Theorie. Warum das nicht lange bleiben soll, müsstest du mir aber nochmal erklären, das erschließt sich mir gerade nicht.

Und ob ich einen Pixel zur Informationsübermittlung nutze, oder ein Frame mit allen nötigen Infos in Textform render und dieses dann auf die gleiche Weise auswerte wie z.B. den Tooltip, spielt keine Rolle. Es bleibt ein Addon was mir die Infos aus der Interface API für meinen Bot aufbereitet. Das ist nur durch den Platz auf dem Bildschirm und vor allem der Interface API limitiert. Einen Pixel auszuwerten ist nur unbedeutend weniger Aufwändig.

Und ja, den RAM auslesen geht vielleicht nicht über Umwege in jeder Sprache. Aber in so gut wie jeder. Das geht sogar mit Javascript oder Python. Mit Umwegen könnte man das sogar in PHP, wenn man es denn wöllte. Ist natürlich sinnlos. Aber man ist definitiv nicht auf Java oder C++ beschränkt. Edit: würde ich aber, wie gesagt, sowieso drauf verzichten.

Das wäre dazu z.B. auch mein erster Gedanke gewesen. Beschränkt nutzbar wäre das eigentlich nicht, aber viel Arbeit Daten dazu zu sammeln. Es gibt da aber auch andere Möglichkeiten, da will ich hier aber jetzt wirklich nicht näher drauf eingehen.

In der Praxis geht das trotzdem schief, alle großen Bots haben den RAM ausgelesen.
Für Dinge wie Angeln etc. reicht ein Pixelbot, sobald es komplexer wird geht es unter Garantie schief.

Ich will nicht ausschließen das es möglich ist, aber das ist dann noch deutlich weiter von einem 1 Personen Projekt entfernt.

Sofern da nicht bewusst grobe Ungenauigkeiten in die API eingebaut wurden, wüsste ich nicht, wieso das nicht gehen sollte. Von solchen groben Ungenauigkeiten ist mir aber zumindest nichts bekannt.

Das kommt halt ein bisschen drauf an, was der Bot können soll. Um vom Friedhof zurück zum Farmspot zu finden sollte es ehrlich gesagt nicht sonderlich aufwändig sein. Wenn man sich da sogar auf nur eine Map beschränkt, hat man da recht schnell verschiedene Routen zusammen gestellt.

Wenn der Bot überall völlig autonom rum latschen können soll, dann müsste man schon eine ganze Menge Daten dafür händisch aufbereiten. Die Frage ist halt ob das wirklich nötig ist. Ich würde behaupten, dass es das nicht ist.

Für so Sachen reicht das schon aus, aber das wirkt halt absolut Null menschlich. Mit Injection kann man dann ganz andere Dinge anstellen. In Legion gab es einen Bot welcher problemlos unbeaufsichtigt von 1-110 per Quests gelevelt hat, World Quests vollkommen autonom erledigt hat, etc.

Wir sprechen hier glaube ich einfach von verschiedenen Bot Arten. Klar, ein Grindbot ist auch auf deinem Weg realisierbar.

Ach du Scheіße. Jetzt kommen aber langsam die ganz verrückten aus ihren Höhlen gekrochen. :flushed: Ernsthaft, kein Mensch schreibt Bots, die in die Spielprozesse eingreifen. Das geht alles über Screengrabbing, Audio-Analyse, Tastatur-Events und einen großen Satz vorher bekannter Daten, und das reicht auch völlig. Selbst die erfolgsreichsten Bots arbeiten auf diese Weise, und bevor ich im Speicher eines anderes Prozesses spazieren gehe, schreibe ich einen eigenen Client. Das dürfte effektiver sein. :joy:

Was soll das überhaupt werden? Wollt ihr einen Bot-Programmier-Wettbewerb ausrufen? Bei Evabaum ist jedenfalls klar zu erkennen, dass er/sie praktische Erfahrung in der Softwareentwicklung besitzt. Bei den anderen, die hier bisher ihren Senf dazugegeben haben, scheint mir das eher fragwürdig.

2 Likes

Ob ich nun Daten aus dem RAM ziehe, oder woanders her, hat ja nichts damit zutun, wie ich diese Daten dann nutze um Bewegungen zu machen. Man kann durchaus auch selbst aufbereitete Navigationsdaten dazu nutzen um darin menschlich wirkend zu navigieren.

Den Arbeitsspeicher des Clients zu manipulieren ist mit Sicherheit die schlechteste Idee, die man da haben kann (und wozu auch?). Das führt mit sicherheit innerhalb von Minuten zum Bann. Es würde mich zumindest schwer wundern, wenn das anders wäre. Du meinst bestimmt „Inspection“. Und selbst das würde ich halt vermeiden.

Ich hab ehrlich gesagt schon ein bisschen Angst, dass das hier eine Anleitung wird. Ich finde das Thema aber schon ziemlich interessant um ehrlich zu sein. Auch wenn meine Neugier groß ist, Selber ausprobieren würde ich aber dennoch nicht. Das ist mir das aus dem Fenster geworfene Geld für die Accounts nicht wert.

Edit: der letzte Absatz kann missverstanden werden, daher nochmal ein Disclaimer: es geht mir hier ausschließlich um Know-How, nicht die „Neugier“ mir tatsächlich mit einem Bot einen Vorteil zu ergaunern. So oder so habe ich sowas noch nicht gemacht und werde es auch nicht.

Wenn das ganze theorisieren hier hilft zu verstehen wie Bots funktionieren könnten, dann könnte man daraus vielleicht zumindest auch ableiten wie man sowas detecten könnte (das ist zumindest erstmal meine Intention). Vielleicht kommt ja noch der ein oder andere Vorschlag dabei raus in die Richtung :smiley:

Das wäre übrigens mal eine spannende Idee für einen Hackathon: eine Gruppe baut Software, die menschliches Verhalten imitieren soll, eine andere baut Software, die eben erstere detecten muss.

An Softwareentwicklung ist ja per se nicht verwerfliches. Die Entscheidung, diese gegen fremde Systeme einzusetzen und dabei Verträge zu brechen, hat jeder selbst in der Hand. Das Eine hat mit dem Anderen erstmal nichts zu tun. Aber manche Theorien, die hier so geäußert werden… :see_no_evil:

Aha. Und wie genau soll das gehen?

Wenn du jetzt mit irgendwelchen Ideen zum Thema „Hardware ID“ kommst: Selbst für Bauteile die eine solche haben, kann keine Applikation diese Info direkt abfragen…solche Anfragen müssen durch den Kernel gehen.

Und was der Kernel auf solche Anfragen antwortet, lässt sich mit root/superuser rechten auf dem System konfigurieren.

Beispiel gefällig?

$ sudo ifconfig eth0 down
$ sudo ifconfig eth0 hw ether de:ad:be:ef:00:00
$ sudo ifconfig eth0 up

Danke, ich hab grad die MAC-Adr. meiner Netzwerkkarte geändert…zumindest aus der Sicht jeder Applikation die auf meinem Rechner läuft. Und ja, das geht auch auf Windows.

Aus demselben Grund warum man keine „PCs sperren“ kann, funktioniert auch das nicht.

Eine Applikation die im Userland auf einer VM läuft, muss den Kernel des Guest-Systems fragen was für eine Hardware auf der Maschine läuft. Wenn dieser behauptet „Du bist auf einem echten, physischen Computer“, dann hat die Applikation keine Möglichkeit das zu überprüfen.


Bottom line: Natürlich KANN man irgendwelche Werte über die Hardware abfragen, und daraus einen „Fingerprint“ bilden. Nur, das macht keiner.

Erstens weil so etwas easy umgangen werden kann.

Zweitens weil man dann Gefahr läuft dass irgendwelche Scherzkekse mit techn. Sachverstand ihren Rechner so konfigurieren, das er als der eines anderen „Fingerprinted“.

Man kann durchaus einen Fingerprint des Systems erstellen, wo eine ganze Menge mehr als nur die MAC-Adresse drin steht. Sowas wird teilweise zu Tracking-Zwecken mit dem Browser gemacht: https://amiunique.org/

Aber wie gesagt: es lässt sich sowieso drüber streiten, ob das der richtige Weg wäre. Wenn zwei Menschen sich einen PC teilen, und beide WoW zocken, dann würde man automatisch beide bestrafen, auch wenn nur einer gebottet hat.

Ja, und jetzt rate mal woher der Browser zB. die Information hat welche Grafikkarte im System installiert ist.

Richtig: Er hat einen Systemcall (== Anfrage an den Kernel) gemacht und sich die Info dort geholt.

Stimmt die Angabe die der Kernel gemacht hat? Tja, gut Frage. Der Browser hat keine Möglichkeit das zu überprüfen, genausowenig wie jede andere Userland-Applikation. In meinem Fall würds reichen die nvidia treiber beim hochfahren zu deaktivieren und auf die noveau treiber umzuschalten, und schon steht da eine komplett andere info :wink:

Wie oben bereits gesagt:
Natürlich KANN man irgendwelche Werte vom System abfragen, und daraus nen FIngerprint erstellen. Nur: Sinn machts halt keinen, da diese Werte geändert werden können, ohne dafür irgendwas an der Hardware ändern zu müssen.


Edit: Um ganz genau zu sein fragt der Browser in meinem Fall nicht mal den Kernel, sondern den XServer über XLib…machts im Endeffekt noch einfacher die Antwort zu manipulieren ^^

Das sowas manipuliert werden kann, ist mir schon klar. Wenn man mit Fingerprinting arbeitet, sollte man natürlich aber auch die Vielfalt an Infos nutzen. Wenn ich nur die Grafikkarte änder, sollte das richtigerweise nicht dazu führe, dass das System plötzlich nicht mehr identifiziert werden kann. Und natürlich wäre das ganze auch dann nicht sicher vor Manipulation.

Ich will mich hier auch nicht über Fingerprinting streiten. Du hattest nur gefragt, wie man sowas bewerkstelligen soll und nur aufgeführt, dass man eine MAC-Adresse auch ändern kann. Als ich meine Antwort darauf verfasst habe, stand in deinem Post noch gar nichts von Fingerprinting.

Im Grunde ging es mir aber auch darum mal drauf hin zu weisen, dass man mit solchen Maßnahmen eben durchaus auch die falschen treffen kann.

Ich hätte eher an einen Test der GraKa gedacht, weil diese am wenigsten „gefälscht“ werden kann

Natürlich würde sich auch da eine Möglichkeit zur Täuschung finden, nur eben nicht für die Masse gedacht.

(Professionelle) Botter sind aber auch nicht die Masse und würden mit Sicherheit einen gewissen Aufwand treiben, um „sich selbst“ zu verschleiern …

Das stimmt wohl.
Und mit ausreichend Aufwand, kann man jeden „Schutz“ überwinden.

Es ist eher die Frage, wie viel Aufwand ist nötig, um die meisten/durchschnittlichen und nicht professionellen Boter vom Spiel fern zu halten.
Bzw, den Aufwand so hoch zu treiben, dass Boten wohl möglich, aber nicht mehr einträglich ist.

Wie dem auch sei …
Blizz ergreift gegen die Boter nur marginal Gegenmassnahmen, weil Boter nicht wirklich störend auf die Einnahmen sind.

Naja die meisten botter haben umgesteuert und treiben sich nur noch in dungeons rum damit man sie nicht reporten kann und es der spielerschaft nicht so ins auge springt, einfach mal nachts/morgens Who 60 eingeben und gucken wo sich die ganzen leute ohne gilden rumtreiben :wink: dann wird schnell klar das mehr botter als reale spieler unterwegs sind!

1 Like