# Hacks/Bots programmieren, aber welche Sprache?



## iTraxx (6. März 2015)

Hallo zusammen, 

der Titel verrät ja schon einiges, aber hier noch ein Paar extra Infos.
Ich interessiere mich sehr an hacking, nicht um mich selbst zu bereichern sondern
einfach ein gewisses know-how anzutrainieren. Ich habe schon ein bisschen mit 
fertigen Tool gearbeitet. Desweiteren auch mit der Linux Distribution Kali.
Allerdings finde ich es ein bisschen langweilig nur fertige Programme zu benutzen.
Ich möchte gerne selber ein Programm schreiben. Es muss nicht übermäßig groß sein oder 
alles können. Interessiert wäre ich z.B. daran einen Bot für ein Spiel zu schreiben. 
Nur leider weis ich nicht so genau welche Programmiersprache dafür am besten geeignet wäre.
Ich habe schon Erfahrungen mit HTML, PHP, MySQL & ein bisschen Java. Nur mit diesen kann man nicht wirklich
Programme schreiben.
Gedacht hätte ich so an C, C#, C++ oder fällt euch noch was besseres ein?

Mfg
iTraxx


----------



## Cinnayum (6. März 2015)

Einen Bot, der was macht?

Bildschirminhalte auslesen für Autoaiming?
Eine KI, die eine Spielfigur vollautomatisch bewegt und handeln lässt?
Einen Farm-Bot für ein MMO / Offlinerollenspiel?

Die Programmiersprache ist im Prinzip egal. Aber die meisten Spiele sind in C++ geschrieben und bieten (wenn überhaupt) nur dafür Bibliotheken an, um darin "herumzuwurschteln".
Die größte Hürde wird eher sein, deine Absichten / das Verhalten des Bots in das Spiel "zu kriegen". Gesetzt den Fall du überwindest die Hürde, die zumeist geschützten Inputdaten (Position, Blickrichtung, etc.) überhaupt dort herauszubekommen.

Es gibt für das Modding von Spielen, wo das auch "erwünscht" ist gute Foren mit Anleitungen, wie man eigene Inhalte erstellt. Etwa für Skyrim.
Das Verhalten von NPCs / Gegnern für eigene Module / Abenteuer käme dem eines "Bot" ziemlich nahe. Da könntest du "Skill-Technisch" mal ansetzen.

PS: C++ und Java sind sich sehr ähnlich. Wenn du das eine "kannst", fällt es sehr leicht das andere auch zu lernen.
Java "passt" halt nur auf dich "auf", dass du keine unerlaubten Speicherzugriffe "bastelst" oder dir deine Variablen verhunzt. (Zeiger verloren usw.)


----------



## iTraxx (6. März 2015)

Cinnayum;7228824
 schrieb:
			
		

> Einen Bot, der was macht?
> Eine KI, die eine Spielfigur vollautomatisch bewegt und handeln lässt?
> Einen Farm-Bot für ein MMO / Offlinerollenspiel?



Genau sowas in diese Richtung (y)

"Die Programmiersprache ist im Prinzip egal. Aber die meisten Spiele sind in C++ geschrieben und bieten (wenn überhaupt) nur dafür Bibliotheken an, um darin "herumzuwurschteln".
Die größte Hürde wird eher sein, deine Absichten / das Verhalten des Bots in das Spiel "zu kriegen". Gesetzt den Fall du überwindest die Hürde, die zumeist geschützten Inputdaten (Position, Blickrichtung, etc.) überhaupt dort herauszubekommen."


Das ist vorerst nicht das Problem, ich muss mich ja sowieso erstmal mit der Sprache auseinander setzten.
Also wäre C++ die beste Lösung für mein Vorhaben?


----------



## Ap0ll0XT (6. März 2015)

Bots für Spiele? Da kommt es darauf an, was der Bot können soll und wie er mit dem Spiel interaggieren soll und welche Schutzmaßnahmen das Spiel gegen den Einsatz von Bot's hat. Gerade Einsteiger versuchen sich zum Test an Macro-Bots für Flashspiele. Diese werden häufig mit AutoIt geschrieben. Auch einige komplexere Bots wurden damit schon realisiert. Mit C#, Java und Co. lassen sich ebenfalls einige Bots für bestimmte Dinge schreiben. Bei Spielen, die sich selber dagegen absichern oder externen AC-Tools geht es "bedingt" noch mit Library-Hooks. In schon alten etablierten Spielen mit starkem AC hilft da nur noch die Ring0-Ebene des Betriebssystems. Das ist dann fast nur noch mit Assembler, C, C++, D, FreeBasic und anderen Low-Level Hochsprachen zu meistern. Und da muss man dann auch richtig Plan von haben.

Als ich mich vor einigen Jahren mal an die Entwicklung eines AC-Tools gemacht habe, hatte ich nach wenigen Monaten mit täglich 4-8 Stunden Reverse-Engineering und Testscripten bis in die Nacht (nach Feierabend) die Segel gestrichen. Ab einem gewissen Level wird es einfach zu heftig.

Wenn es dir nur um einfache Bots für einfache Spiele geht, dann recherchiere einfach mal, wie sich solche Bots für das Spiel realisieren lassen. Wenn du versuchst, das ganze komplett alleine zu machen (also ohne Hinweise und Tipps aus dem Netz), wirst du bei komplexeren Bots dann nicht mehr ums Reverse-Engineering herumkommen. Und dafür wirst du Assembler, Binäre Folgen und Byte-Code verstehen können müssen, um weiter zu kommen. Und mit Vorkenntnissen für Websprachen wird das nichts. Das Thema "hacken" ist zweifelsfrei ein interessantes Gebiet, das man nicht nur mit negative Assoziationen verbinden muss. Aber so interessant das ganze auch ist, so kompliziert ist "echtes" hacken nach Definition auch.



> *Definition im gesellschaftlichen Sprachgebrauch heute (lt. Wikipedia):*
> Das Wort wird alltagssprachlich gebraucht, um jemanden zu bezeichnen, der über ein Netzwerk in Computersysteme eindringt und zugleich Teil einer entsprechenden Szene ist.





> *Ursprüngliche und vor allem richtige Definition (lt. Wikipedia):*
> In seiner ursprünglichen Verwendung bezieht sich der Begriff auf Tüftler im Kontext einer verspielten selbstbezüglichen Hingabe im Umgang mit Technik ... Im Unterschied zur Improvisation, die der Lösung auftretender Probleme dient, kann es hierbei auch um das Experimentelle gehen, den Versuch, die Grenzen des Machbaren zu erkunden.


Oder wie ich es genau definieren würde:
*Hacken ist eine kreative Art Probleme zu lösen, die ursprünglich nicht als Problem angesehen wurden und nur in den Augen der Hacker ein Problem darstellen.*

Um Wikipedia noch einmal zu zitieren:


> „Ein Hacker ist jemand, der versucht einen Weg zu finden, wie man mit einer Kaffeemaschine Toast zubereiten kann“


Der Erfinder der Kaffeemaschine hat nie ein Problem darin gesehen, das man mit seinem Gerät nicht toasten kann. Ein Hacker vielleicht schon und sucht dann dafür eine Lösung. Blizzard hat für WoW nicht vorgesehen, das ein Computer automatisch Gold farmt. Ein paar Bots dafür gab es trotzdem.

*Wichtig dabei ist nur folgendes:* Jeder definiert für sich selbst, ob er anderen damit schaden möchte oder nicht. Diese Entscheidung wird mit dem problem gefällt, das es zu lösen gilt.

Also gehe mit dem Thema auf jeden Fall vernünftig um. Denn bei fertigen Hacker-Tools (die im Regelfall fast alle die Absicht haben, negative Dinge zu tun), stellen sich meine Ohren sehr weit auf!


----------



## iTraxx (6. März 2015)

Ap0ll0XT schrieb:


> Also gehe mit dem Thema auf jeden Fall vernünftig um. Denn bei fertigen Hacker-Tools (die im Regelfall fast alle die Absicht haben, negative Dinge zu tun), stellen sich meine Ohren sehr weit auf!



Keine sorge, es wurde alles nur am eigenen netz probiert. Der Laptop auf dem Kali läuft, hat KEINE Netzwerkverbindung.

Der Bot sollte wie du schon geschrieben hast z.B. automatisch Gold farmen. Also anvisieren, attackieren, aufheben, und das ganze wieder von vorne. 
Lässt sich sowas also nicht "nur" mit C++ verwirklichen?
Falls ja, was für eine Sprache müsste ich noch lernen? Ich bin noch voll motiviert und wissbegierig  
Eine Sprache mehr kann ja nicht schaden  Die Zeit dafür habe ich (y)


----------



## LastChaosTyp (6. März 2015)

Die einfachste Art an Bots sind die Farmbots, welche über bestimmte RGB-Werte gesteuert werden. Zum Beispiel gibt es einen Rohstoff, den man per Mausklick einsammeln kann. Sobald genau diese Farben des Rohstoffs auf dem Bildschirm sind, wird die Position  dieses Pixels ermittelt und man lässt das Programm an dieser Stelle einen Mausklick ausführen. Manche Bots machen dann noch regelmäßig Klicks wo anders hin, um sich auch fortzubewegen und so mehr Rohstoffe zu finden. 
Wenn man sowas kann und auch die Programmiersprache halbwegs beherrscht, kann man weiter gehen. Was ich dir auch ans Herz legen kann ist Python, auch eine Objektorientierte Programmiersprache, die Java und Co sehr ähnelt. Damit kann man auch Pakete senden und abfangen, bei manchen Spielen sehr sinnvoll.


----------



## Laudian (6. März 2015)

Wie andere hier schon geschrieben haben, ist die Programmiersprache zunächst einmal egal. Einen einfachen Bot kannst du in jeder Scriptsprache schreiben, da ginge zur Not auch PHP (wobei ich von PHP  eigentlich prinzipiell abrate, eine grausame Sprache...).

Python ist meiner Meinung nach eine sehr einsteigerfreundliche Sprache. Man kann sehr schnell Ergebnisse erzielen und relativ schnell auch "aufwendige" Projekte umsetzen. Diese Einfachheit hat aber ihren Preis, denn moderne "Hoch-Hochsprachen" wie Python sind dafür um den Faktor 50-100 langsamer als z.B. C.

Trotzdem finde ich Python für Einsteiger sehr gut, weil man alle Befehle direkt im Interpreter ohne lästiges Kompillieren ausprobieren kann und dadurch wenig Zeit auf "Nebensächlichkeiten" verschwendet. Wenn du dir dann erst einmal die Grundlagen der objektorientierten Programmierung angewöhnt hast kannst du anschließend auf eine Sprache wie C++ umsteigen und musst dir dort im Prinzip nur noch die "Formalitäten" anschauen - Syntax, Vokabeln, Compiler...

Ich fand es auf jeden Fall wesentlich leichter mich in C++ einzuarbeiten nachdem ich die Grundlagen  kannte, vorher habe ich mehrere Anläufe zum C++ Lernen aufgegeben, weil es einfach unendlich langweilig war...


Aber um nochmal kurz zur Grundfrage zurückzukommen: Die Sprache ist im Prinzip nebensächlich. Solange dein Gegenüber dich versteht ist es egal, ob du Englisch oder Spanisch sprichst, die Ausdrucksmöglichkeiten sind mehr oder weniger die selben.
Die eigentliche Herausforderung bei deinem Vorhaben wird deine Herangehensweise sein. Du kannst das auf dem Monitor ausgegebene Bild auf bestimmte Farben oder Muster analysieren, die Netzwerkkommunikation des Programms abfangen und manipulieren, direkt Werte im Ram überschreiben usw...

(fast) Alle Wege führen nach Rom, du wirst nur unterschiedlich viele und schwere Hindernisse zu überwinden haben.


----------



## iTraxx (6. März 2015)

Danke schon mal an alle für die Antworten.


Laudian schrieb:


> Ich fand es auf jeden Fall wesentlich leichter mich in C++ einzuarbeiten nachdem ich die Grundlagen  kannte, vorher habe ich mehrere Anläufe zum C++ Lernen aufgegeben, weil es einfach unendlich langweilig war...
> .



D.h. erst einmal meine Java Kenntnisse weiter ausbauen dann mit Python weiter machen und danach erst mit  C++ anfangen?
Oder kann ich, da ich sowieso noch nicht so viele Java Kenntnis habe gleich mit Python anfangen?


----------



## LastChaosTyp (6. März 2015)

Fang mit Python an. Das war auch die Sprache, die wir in der Schule gelernt haben, steht auch so im Lehrplan. Die sollte also für Anfänger sein


----------



## Ap0ll0XT (6. März 2015)

iTraxx schrieb:


> Keine sorge, es wurde alles nur am eigenen netz probiert. Der Laptop auf dem Kali läuft, hat KEINE Netzwerkverbindung.
> 
> Der Bot sollte wie du schon geschrieben hast z.B. automatisch Gold farmen. Also anvisieren, attackieren, aufheben, und das ganze wieder von vorne.
> Lässt sich sowas also nicht "nur" mit C++ verwirklichen?
> ...


Die Sprache ist im Grunde zweitrangig. Ganz oben auf der Liste steht das Level, auf dem die Sprache arbeiten muss, um deinen Anforderungen gerecht zu werden. Ob du das nun im Low-Level Bereich mit C, C++, FreeBasic, D oder vielleicht was ganz anderem machst, spielt da keine Rolle. C/C++ sind definitiv die Sprachen, die in dem Level am weitesten verbreitet sind und machen wegen der Bibliotheksvielfalt am wenigsten Arbeit. Höhere Level wie Intepreter oder Bytecode-Sprachen (viele Basic-Dialekte, Java, C# und Co.) sind immer mit leichten Abstrichen zu nutzen. Scriptsprachen hingegen eignen sich überwiegend für Macro-Bots, da sie nur bedingt mit den tieferen Level-Bibiotheken kommunizieren können. Mit C/C++ und den richtigen Bibliotheken kannst du eigentlich alles machen.


----------



## bingo88 (6. März 2015)

Gerade im Bereich "Hacking" wird extrem viel mit Python gearbeitet, besonders zur Analyse. Aber auch um z. B. Pufferüberläufe in Netzwerksystemen auszunutzen, da du im Vergleich zu C/C++ nur sehr wenig Code benötigst und auch der ganze Buildprozess wegfällt. Du kannst also mit einer Skriptsprache viel schneller an einem System oder Programm rumtesten. Du kannst auch den ganzen Low-level Kram wie Speichermanipulation in Python machen, da gibt es fertige Libs für. Was du auf jeden Fall brauchst ist ein Verständnis wie ein Computer funktioniert, wie Programme ausgeführt werden, wie der Speicher organisiert ist, usw. Also dieser ganze Theorie-Kram. Da können einem native Sprachen helfen, das ist aber nicht unbedingt erforderlich und auch nicht für jeden optimal. Muss man halt mal ausprobieren.

Du musst aber auf jeden Fall zuerst eine Sprache einigermaßen gut beherrschen, sonst beschäftigst du dich mehr mit der Sprache als mit deinem zu lösenden Problem. Ich würde dir auch zu Python raten, da das relativ einfach ist und man bereits sehr viel machen kann, ohne sich um zu viele unwichtige Details kümmern zu müssen. C/C++ kommt dann später und wenn du dann noch Bock hast, kannst du dich auch mal an Assembler versuchen. Da reicht es aber aus, das einigermaßen gut lesen zu können.


----------



## iTraxx (6. März 2015)

Alles klar, danke sehr für die Antworten 

Ich werde dann gleich Morgen anfangen mich mit Python auseinander zu setzen (y)


----------



## XPrototypeX (6. März 2015)

Naja generell gibt es verschiedene Arten von Bots. Einen klassischen Aimbot wirst du nie und nimmer in reinem Java / C# schreiben können. Bots für Browsergames kam eigentlich in jeder Sprache schreiben die eine HTTP Schnittelle anbietet. 

Was du machen willst ist eigentlich schon die bessere Disziplin von Bots. Da braucht man schon echt viele Lowlevel Kenntnisse um sich die sich die benötigten Strukturen abgreifen zu können (Mit Farb auswertungen oder Macros wirst du nicht weit kommen). Da brauchst du auf jeden Fall eine Sprache die eine Form von inline Assembler unterstützt. Generell wird gerne C oder C++ genommen. Etwas hippere Sprachen wären Go lang von Google oder Rust vom Mozilla. Natürlich sind gute Assembler Kenntnisse und Umgang mit einem Disassembler und Debugger  wie OlliGDB vorausgesetzt.

Das ganze wirst du wahrscheinlich nicht in den Osterferien machen können^^


----------



## iTraxx (6. März 2015)

XPrototypeX schrieb:


> Das ganze wirst du wahrscheinlich nicht in den Osterferien machen können^^



Ferien hab ich sowieso nicht mehr wenn dann Urlaub


----------



## bingo88 (6. März 2015)

XPrototypeX schrieb:


> Was du machen willst ist eigentlich schon die bessere Disziplin von  Bots. Da braucht man schon echt viele Lowlevel Kenntnisse um sich die  sich die benötigten Strukturen abgreifen zu können (Mit Farb  auswertungen oder Macros wirst du nicht weit kommen).


Da hat doch einer mal Bots für SC2 gebaut, in dem er die DX-Drawcalls abgefangen und ausgewertet hat. Muss man halt kreativ sein 



XPrototypeX schrieb:


> Da brauchst du auf jeden Fall eine Sprache die eine Form von inline Assembler unterstützt. Generell wird gerne C oder C++ genommen. Etwas hippere Sprachen wären Go lang von Google oder Rust vom Mozilla. Natürlich sind gute Assembler Kenntnisse und Umgang mit einem Disassembler und Debugger  wie OlliGDB vorausgesetzt.


Inline Assembler braucht man schon mal nicht. Klar, Assemblerkenntnisse braucht man zum Debuggen (da man ja in der Regel keinen Debugbuild mit Sourcecode hat), aber ich habe in über 8 Jahren kein einzige Zeile Inlineassembler gebraucht um ein Programm zu manipulieren.



XPrototypeX schrieb:


> Das ganze wirst du wahrscheinlich nicht in den Osterferien machen können^^


Dem stimme ich zu  Aber man darf sich auch nicht entmutigen lassen!


----------



## XPrototypeX (6. März 2015)

Wie überschreibst du den Funktionspointer ohne direkte op code injection?


----------



## bingo88 (6. März 2015)

Wie gesagt, mein Shellcode ist vorher fertig bevor den ein Programm sieht (Payload dann als normales Bytearray). Wobei ich mir grade nicht sicher bin, ob wir das gleiche meinen.


----------



## XPrototypeX (6. März 2015)

Wir reden schon vor dem selben. Aber um Strukturen/ Funktionen zu patchen musst du trotzdem Shellcode auf das entsprechende Programm zuschneiden, kommt halt drauf an was du machen willst.  Ist ja auch nichts anderes als Assembler Befehle.


----------



## Veriquitas (6. März 2015)

iTraxx schrieb:


> Hallo zusammen,
> 
> der Titel verrät ja schon einiges, aber hier noch ein Paar extra Infos.
> Ich interessiere mich sehr an hacking, nicht um mich selbst zu bereichern sondern
> ...



Für  welches Spiel ?  Es ist nicht erlaubt für jedes Spiel bots zu schreiben.


----------



## LastChaosTyp (6. März 2015)

Veriquitas schrieb:


> Für  welches Spiel ?  Es ist nicht erlaubt für jedes Spiel bots zu schreiben.



Schreiben ist immer legal, anwenden ist dann die andere Sache


----------



## ofhouse (6. März 2015)

LastChaosTyp schrieb:


> Schreiben ist immer legal, anwenden ist dann die andere Sache


Ist eine moralische Frage, hat aber nichts mit dem Thema zu tun, gefragt wurde nach dem Wie und nicht nach dem Ob.

Ohne groß im Thema zu sein, würde ich vom Gefühl sagen, dass hier Erfahrung eine sehr viel größere Rolle spielt als Können.
Deswegen sollte man sich das gut überlegen, wozu man die Erfahrung haben will (Geld, Spaß, Ansehen etc.), weil Erfahrung halt auch immer eine Menge investierter Zeit heißt, die dir keiner wieder zurück gibt.


----------



## Ap0ll0XT (7. März 2015)

Inline-Assembler/Assembler selbst wird beim Programmieren überhaupt nicht mehr benötigt. Man kann es zur Optimierung zeitkritischer Routinen verwenden. Aber Assembler ist zum Programmieren selbst nicht nötig. Man sollte aber Assembler verstehen können für Reverse-Engineering bzw. disassembler'n. Auch nicht vergessen darf man, das Assemblercode natürlich umfangreicher an Zeilen und der Befehlsanzahl ist wie C/C++ oder anderen Code. Man benötigt viel Geduld und viel Erfahrung, um eine Software so gut es geht zu zerpflücken (<- woran ich gescheitert bin  ). Das ist aber leider auch sehr oft in dem Bereich nötig. Man könnte natürlich die DX-Bibliotheken hooken und dort dann Drawcalls, Farbwerte oder ähnliche Spielereien erfassen. Auch Input-Daten von HID's lassen sich damit problemlos erfassen. Doof sieht das dann nur aus, wenn das Spiel einen Hack-Shield oder andere AC-Tools hat. Dann kann es nämlich dazu führen, das du in den Ausführungsdomain's im Prozessor nach unten musst (Ring). Und dann wird es hässlich. Aber auch das geht ohne Assembler. Man muss nur herausfinden, wie am besten. Und dazu können Assembler-Kenntnisse für das Reverse-Engineering schon von Vorteil sein.


----------

