Bot Coding - Series 1

July 21, 2016 | Author: Brb la Pravalie | Category: N/A
Share Embed Donate


Short Description

silkroad bot...

Description

Bot Coding - Series C# 1# Bot Theorie:

Was genau ist eigentlich ein Bot?

Einfach beschrieben ist ein Bot, eine Programmierter Spieler der das tut was ein echter Spieler auch tun würde um Level zu steigen.

Welche arten gibt es in dem fall "Silkroad Online" Packet Bot: Der Bot sendet befehle zB Monster Ankreifen via Packets/Buffer an den Server Pixel Bot: Der Bot sucht nach bestimmten Pixel die er dann anklickt. Jedoch nicht für 3D Games geeignet. Clientless: Das selbe wie der Packet Bot nur das der eigentliche Game Client nicht benötigt wird. Der Unterschied also das der ClientlessBot nochmehr zu tun hat.

Welche art werden wir programmieren. Wir werden einen Packetbot schreiben. Da dieser sehr gut ausgebaut werden kann und auch später zum Clientless aufgebaut werden kann.

Pseudo Code eines Bottes: Monsterliste list = new Monsterliste(); Funktion OnMonsterSpawn() : list-->Add Funktion GreifeAn() : list-->Zufall()-->Attack(); An hand dieses Pseudo Codes können wir erkennen das der Bot auf das Monster Spawn Packet wartet. Und darrauf hin das Monster in eine Liste einfügt. Danach wird ein zufälliges Monster attackiert.

Proxy Was ist eine Proxy in unserem fall, und wozu benötigen wir sie? In unserem Fall ist die Proxy ein zwischen Server. Der Client sendet an die Proxy (Zwischenserver) ein Packet. Darrauf reagiert die Proxy und sendet diese an den echten Silkroad Server weiter. Wen der Silkroad Server antwortet dann schickt die Proxy die Antwort weiter an den echten Clienten. Wir benötigen dies um die Packet zu Sniffen und damit unsere Bot zB mit griegt wen zB ein Monster Spawnt...

Der C# Code der Proxy Class Den Code werde ich nur anhand einer Zeichnung erklären da ich einfach mal davon ausgehe das ihr bereits C# Kenntnisse besitzt: class ProxyServer { private delegate void ClientSend(byte[] b); private delegate void ServerSend(byte[] b); public event ClientSend OnClientSend; public event ServerSend OnServerSend; Socket virtuelClient; Socket proxyServer; Socket realClient; string SilkroadIP; int SilkroadPort; byte[] clientBuffer = new byte[1024]; byte[] serverBuffer = new byte[1024]; public void Start(int myport, string sroIP, int sroPort) { proxyServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); virtuelClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); SilkroadIP = sroIP; SilkroadPort = sroPort; // Run Proxy Server proxyServer.Bind(new IPEndPoint(IPAddress.Any, myport)); proxyServer.Listen(5); // Wait for Client proxyServer.BeginAccept(new AsyncCallback(OnClientConnect), null); } private void OnClientConnect(IAsyncResult asyn)

{ realClient = proxyServer.EndAccept(asyn); virtuelClient.Connect(SilkroadIP, SilkroadPort); virtuelClient.BeginReceive(serverBuffer, 0, 1024, SocketFlags.None, new AsyncCallback(OnBufferByServer), null); realClient.BeginReceive(clientBuffer, 0, 1024, SocketFlags.None, new AsyncCallback(OnBufferRecv), null); } private void OnBufferRecv(IAsyncResult asyn) { int recv = realClient.EndReceive(asyn); byte[] removed = GetBytes(recv, clientBuffer); OnClientSend(removed); virtuelClient.Send(removed); realClient.BeginReceive(clientBuffer, 0, 1024, SocketFlags.None, new AsyncCallback(OnBufferRecv), null); } private void OnBufferByServer(IAsyncResult asyn) { int recv = virtuelClient.EndReceive(asyn); byte[] removed = GetBytes(recv, serverBuffer); OnServerSend(removed); realClient.Send(removed); virtuelClient.BeginReceive(serverBuffer, 0, 1024, SocketFlags.None, new AsyncCallback(OnBufferByServer), null); } private byte[] GetBytes(int count, byte[] b) { MemoryStream ms = new MemoryStream(b); BinaryReader br = new BinaryReader(ms); return br.ReadBytes(count); } }

Hier nun die Vesprochene Zeichnung:

Ich Hoffe diese Zeichnung hilft euch beim verstehen des Codes. Bei fragen, fragt. So das wars dann erstmal für den ersten Teil der Reihe. Nächstes mal gehts dann ans Sniffen . :-)

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF