Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > .NET Languages
You last visited: Today at 23:36

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

Advertisement



[C#] Hilfe bei Combat Arms Level-Bot benötigt

Discussion on [C#] Hilfe bei Combat Arms Level-Bot benötigt within the .NET Languages forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Sep 2009
Posts: 7
Received Thanks: 1
[C#] Hilfe bei Combat Arms Level-Bot benötigt

Hallo Leute,

ich bin derzeit dabei einen Bot für den Online-Shooter Combat Arms zu erstellen und bräuchte da bei zwei Problemen ein wenig Hilfe. Erstmal zur Vorgeschichte, wen es nicht interessiert der kann ja runterscrollen:

Vor 1-2 Jahren kam mal ein CA-Bot auf AC-Tools Basis heraus der an sich schon recht gut war, wenn ich ihn auch selbst ein wenig angepasst hatte damit er mehr konnte. Irgendwann wurde Nexon dann wohl schlau und passte den hackschutz so an dass das Game nach 1-2 Stunden ausging wenn keine "echte" Tastatureingabe vorhanden war.

Da AC Tools aber auch Programme starten konnte, war das erstmal kein Problem und ich konnte es umschreiben dass einfach wnen das Programm ausfiel neu gestartet wurde. Letztendlich kam Nexon aber wieder auf eine neue Idee und baute ein, dass CA automatisch nach 5 Minuten abstürzt wenn AC Tools auf dem Rechner läuft. Lange zeit habe ich mich dann nicht mehr mit dme Thema befasst.

Vor ein paar Tagen kam ich dann auf die Idee den Bot neu zu machen mithilfe von C#.


Nun zu meinem ersten Problem:

Wie ich leider Feststellen musste, kann CA auch hier auf irgendweine Weise entdecken dass keine "echte" Aktion am PC gemacht wird und schaltet sich nach 1-2 Stunden ab. Nun wollte ich das wie mit dem AC-Tool machen und CA vom Bot starten lassen, allerdings lässt sich CA weder direkt(über die "Engine.exe") noch über den Launcher mittels eines simulierten Klicks auf den Start-Button starten. Scheinbar erkennt Hackshield dass da die Maus teleportiert und nicht gezogen wird.

Ich sehe da 3 Möglichkeiten das zu beheben:
-Verhindern dass CA den Bot erkennt bzw. sich von selbst herunterfährt.
-Der Engine.exe vorgaukeln dass sie vom CA-Starter aus aufgerufen wurde
-Die Mausbewegung so zu tarnen dass Hackshield es für einen "echten" Klick hält.

Ich hatte es sogar über Virtuelle Keys versucht, d.h. Starter ausführen, zum "Game Start"-Button tabben und dann Enter, aber auch das funktioniert nicht.

Zumal ich bei den VK's mein zweites Problem habe: Der Bot kann zwar Tasten drücken und z.b. einzeln Schiessen oder schreiben ingame, ein "KeyDown"-Event kann er aber nicht simulieren sodass der Bot auch laufen kann.

Damit ihr wisst womit ihr es zu tun habt hänge ich auch auch mal die Funktionen an die ich jeweils benutze. Nichts davon funktioniert zu 100% wie ich es möchte:

Keyboard:
Code:
public static void keys(string keystroke)
            {
                SendKeys.Send(keystroke);
            }

            //Setup the Keydown and KeyUp-Messages

            public const ushort KEYEVENTF_KEYUP = 0x0002;
            public const ushort KEYEVENTF_KEYDOWN = 0x0000;
            public const ushort KEYEVENTF_SCANCODE = 0x0008;
            public const ushort KEYEVENTF_UNICODE = 0x0004;

            public struct KEYBDINPUT
            {
                public ushort wVk;
                public ushort wScan;
                public uint dwFlags;
                public long time;
                public uint dwExtraInfo;
            }

            [StructLayout(LayoutKind.Explicit, Size = 28)]
            public struct INPUT
            {
                [FieldOffset(0)]
                public uint type;
                [FieldOffset(4)]
                public KEYBDINPUT ki;
            }


            [DllImport("user32.dll")]
            public static extern uint SendInput(uint nInputs, ref INPUT pInputs, int cbSize);

            public static void forcedInput(string SArgument)
            {
                INPUT structInput;
                structInput = new INPUT();
                structInput.type = 1;
                structInput.ki.wScan = 0;
                structInput.ki.wVk = 0;
                structInput.ki.time = 0;
                structInput.ki.dwFlags = 0;
                structInput.ki.dwExtraInfo = 0;

                foreach (char c in SArgument.ToCharArray())
                {
                    structInput.ki.dwFlags = KEYEVENTF_UNICODE;
                    structInput.ki.wScan = (ushort)c;
                    SendInput(1, ref structInput, Marshal.SizeOf(structInput));

                    structInput.ki.dwFlags = KEYEVENTF_UNICODE;
                    structInput.ki.dwFlags += KEYEVENTF_KEYUP;
                    structInput.ki.wScan = (ushort)c;
                    SendInput(1, ref structInput, Marshal.SizeOf(structInput));
                }
            }

            [DllImport("user32.dll")]
            static extern void keybd_event(byte key, byte scan, int flags, int extraInfo); 

            [DllImport("user32.dll")]
            static extern short VkKeyScan(char ch);


            public static void keyCodeDown(byte keyCode)
            {
                keybd_event(keyCode, 0, 0, 0);
            }
            public static void keyCodeUp(byte keyCode)
            {
                keybd_event(keyCode, 0, KEYEVENTF_KEYUP, 0);
            }

            public static void keyDown(char key)
            {
                byte keyCode = (byte)VkKeyScan(key);
                keybd_event(keyCode, 0, 0, 0);
            }

            public static void keyUp(char key)
            {
                byte keyCode = (byte)VkKeyScan(key);
                keybd_event(keyCode, 0, KEYEVENTF_KEYUP, 0);
            }
Maus:
Code:
//Setup Mouse Click Event Function
            [DllImport("User32.dll")] 
            private static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint dwData, uint dwExtraInf);
            //MousePos
            public static void MousePos(int x, int y)
            {
                Cursor.Position = new Point(x, y);
            }
            //Left Click
            public static void LeftClick()
            {
                const UInt32 MOUSEEVENTF_LEFTDOWN = 0x0002;
                const UInt32 MOUSEEVENTF_LEFTUP = 0x0004;
                mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);//make left button down
                mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);//make left button up
            }
            //Right Click
            public static void RightClick()
            {
                const UInt32 MOUSEEVENTF_RIGHTDOWN = 0x0008;
                const UInt32 MOUSEEVENTF_RIGHTUP = 0x0010;
                mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0);//make left button down
                mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);//make left button up                
            }
Wenn mir also jemand Tipps geben könnte oder eine Lösung für das Problem hat wäre ich sehr dankbar!

Gruß,
sge

EDIT 1:

sorry für den Doppelpost, aber vlt. ist das Problem 1 fast gelöst. Ich habe herausgefunden dass man über folgende Kommandozeile die Engin.exe per Verknüpfung auch direkt starten kann:

"E:\Combat Arms Europe\Combat Arms EU\Engine.exe" -windowtitle "CombatArms" -rez Engine.rez -rez Game -authip 91.202.203.22 -authport 10001 -pcroom 0 -Ver Ver_EU_2.1107.02 -UserId

zumindest theoretisch, denn parktisch wird mir ständig angezeigt dass die Verbindung zum Server nicht aufrecht erhalten werden konnte.

Weiss zufällig jemand was an den daten oben inkorrekt ist?
sge2000 is offline  
Old 08/23/2011, 08:39   #2
 
-AmA-'s Avatar
 
elite*gold: 0
Join Date: Dec 2007
Posts: 728
Received Thanks: 460
Zum Thema:
Schon mal gedacht das evt. eine simple Skriptsprache die Lösung sein kann?

Zum Edit:
Bei den Sysinternals findest du irgendwo ein Tool mit dem du die Parameter "sniffen" kanst
-AmA- is offline  
Thanks
1 User
Old 08/25/2011, 10:51   #3
 
elite*gold: 20
Join Date: Feb 2010
Posts: 561
Received Thanks: 257
Ich meine das CA und sonstige Ballerspiele die Hacks/Bots von C# und C++ entdecken wenn sie keinen Bypass/Hackshield umgeher besitzen . Also musst du dir wohl einen machen müssen weil es ohne glaube ich nicht geht . Bin jetz gerade nicht das Genie das sich in C# und C++ auskennt aber in alles Hacks die ich produziert habe waren Bypasse drinnen .
CrAcKxX is offline  
Thanks
1 User
Old 08/26/2011, 14:03   #4
 
Volltboon's Avatar
 
elite*gold: 0
Join Date: Jun 2009
Posts: 2,235
Received Thanks: 810
bei den buttons muss ich -AmA- recht geben

da könntest du mit AutoIt simpel einen ImageSearch bot machen
und einen echten mausklick oder tasten befehl mit send,movebla
simulieren , das starten von dem autoit programm könnte ja
C# übernehmen , was weis ich wie z.B. Run(start.exe) o.ä,
weis jetzt nicht wie das in c# geht , wüsste ich aber gern die sprache ist toll

wenn du hilfe brauchst mit autoit ich würde dir helfen brauchst
mir nut privatnachricht schreiben

lg
Volltboon is offline  
Thanks
1 User
Old 08/27/2011, 15:45   #5
 
elite*gold: 0
Join Date: Sep 2009
Posts: 7
Received Thanks: 1
Hallo,

erstmal danke für eure Beiträge!

Der Grund dass ich C# gewählt habe war schlichtweg der dass ich vor dem Bot an einem BruteForcer gearbeitet hatte den ich mit C# programmiert hatte und ich folglich lieber mit C# weitergemacht habe weil ich eh grade drin war als komplett neu mit AutoIt o.ä. anzufangen. Im Prinzip bietet C# ja auch alles was ich brauche.

Ok nun folgendes, das Problem CA zu starten hab ich gelöst, ich hatte schlichtweg eine veraltete IP und da ist es logisch dass ich keien Verbindugn zum Server aufbauen kann ^^

Soweit funktioniert der Bot auch so gut, dass er sofern CA nicht mit einer Windows-Fehlermeldung abstürzt auch durchgehend arbeitet, wobei ich auch das sicher behoben hätte wenn ich nicht jedes Mal als da spassiert war den Fehler einfahc weggeklickt hätte.

Im Prinzip fehlen jetzt nur noch die Tastendrucksimulatoren wobei der Bot auch ohne seine Aufgabe zufriedenstellend erfüllt.

@Volltboon: gestartet wird ein Prozess mit C# z.B. so:
Code:
//Start CA
                            Process CA = new Process();

                            CA.StartInfo.FileName = gamepath + "Engine.exe";
                            CA.StartInfo.Arguments = " -windowtitle " + '"' + "CombatArms" + '"' + " -rez Engine.rez -rez Game -authip 109.234.74.23 -authport 10001 -pcroom 0 -Ver Ver_EU_2.1107.02 -UserId";

                            CA.Start();
1. neuen Prozess erstellen
2. Pfad zur Anwendung
3. Zusätzliche Parameter übergeben.
4. Start() ;-)

@-AmA-: Wie das Tool heisst müsste ich eigentlich schon wissen wenn ich es finden soll, wenn ich ehrlich bin weiss ich jetzt noch nicht mal so recht was du mit Systeminternals meinst, zumindest scheinen die mir noch nicht begegnet zu sein, zumindest unter dem Überbegriff nicht. ^^

@CrAcKxX: Danke für den Tipp! Wie gesagt nach 1-2 Stunden merkt Hackshield dass was nicht stimmt und schaltet CA ab. Bis das Passiert hat der Bot aber immer einige Runden gespielt und es stört mich auch nicht so lange das so gut klappt. Wie so ein Bypass zu programmieren ist wund was für tools amn dafür braucht würde ich aber trotzdem gerne wissen.

Gruß,
sge
sge2000 is offline  
Old 08/27/2011, 16:18   #6
 
elite*gold: 20
Join Date: Feb 2010
Posts: 561
Received Thanks: 257
Tools : Keine
Bypass : Ich weiß nicht gerade wie man einen Bypass coded aber du könntest welche im Inet finden . Einen Bypass zu coden ist richtig schwer . Wenn man einen hätte könnte man hacks von 2009 noch benutzen können also musst du das wohl selber hinbekommen. Dafür musst du dich sehr gut mit C# auskennen also mit deiner Programmiersprache .Und dazu glaube ich auch noch mit OllyDBG
CrAcKxX is offline  
Old 08/28/2011, 00:03   #7
 
elite*gold: 0
Join Date: Sep 2009
Posts: 7
Received Thanks: 1
Hmm das du OllyDBG erwähnst ist lustig, ursprünglich wollte ich den nämlich benutzen um die Parameter die ich zum manuellen Start suchte aus der Datei zu lesen. Allerdings hatte ich noch nie damit gearbeitet und bin kläglich gescheitert ^^

Aber wie gesagt, das grundlegende das Der Bot erledigen soll klappt ja auch so ganz gut.

So, nun wäre da eben noch das rumlaufen bzw. das Key-Pressing. Ich hab jetzt nämlich schon sämtliche Plugins die ich für C# was das angeht ausprobiert und keines hat funktioniert. In einem anderen Forum hatte jemand einen VB.Net Bot für CA der genau das konnte, dummerweise hatte ich den nur zufällig auf einem Googletrip gefunden und weiss nun weder wo dieser Topic war noch wie der Autor hieß damit ich ihn um Hilfe bitten kann.

Im Prinzip würde mir ein Programm reichen das ich einfach mit Parametern im Hintergrundstarten könnte und das für x-Milisekunden einen emulierten Tastendruck an die momentan maximierte Anwendung schickt(In dem Fall CA).

Könnt ihr mir da eine Skriptsprache oder sogar ein bereits fertiges Programm empfehlen? Ob das nun mit VB.Net oder einer anderen Sprache ist ist da im Prinzip unwichtig, hauptsache es wäre einfach umzusetzen und über ein C#-Programm aufrufbar.

Gruß,
sge
sge2000 is offline  
Old 08/28/2011, 14:06   #8
 
elite*gold: 20
Join Date: Feb 2010
Posts: 561
Received Thanks: 257
Das schwierige ist ja wenn man mit Ollydbg erfahrung hat ist es noch schwer .
CrAcKxX is offline  
Old 09/18/2011, 16:40   #9
 
elite*gold: 0
Join Date: Sep 2009
Posts: 7
Received Thanks: 1
Okay, das Problem mit den nicht funktionieren wollenden Tastaturinputs besteht nach wie vor.

Kennt hier denn wirklich niemand eine entsprechende Implementation die für CA funktioniert?
sge2000 is offline  
Reply




All times are GMT +2. The time now is 23:36.


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.