Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Spiel blockiert SendKey und andere virtuelle Eingaben (https://www.delphipraxis.net/98002-spiel-blockiert-sendkey-und-andere-virtuelle-eingaben.html)

Circle 20. Aug 2007 15:08


Spiel blockiert SendKey und andere virtuelle Eingaben
 
Hi Leute

Ich hab echt ein komisches Problem. Ich hab nen Code geschrieben der einem Spiel gewisse Tasten sendet, ich mach also sozusagen ein Macro. Aber das funktioniert irgendwie nicht.
Ich habs mit SendKey, keybd_event und postmessage versucht, aber keines funktioniert. Wenn ich zum Test z.B. Notepad öffne, dann wird das Makro schön ausgeführt, alle Zahlen werden geschrieben. Aber beim Spiel geschieht nichts, es scheint das ganze zu blockieren. Nur frag ich mich, wie ist das möglich. Wie kann ein Spiel das drücken einer Taste blockieren? Kann man das irgendwie umgehen, weil mir scheint das unlogisch :D

iGoA 20. Aug 2007 15:31

Re: Spiel blockiert SendKey und andere virtuelle Eingaben
 
Vielleicht ist das ein Anti-Cheater-Schutz? ;-)

Circle 20. Aug 2007 16:13

Re: Spiel blockiert SendKey und andere virtuelle Eingaben
 
Ja, aber z.B. die Bildschirmtastatur die funktioniert ja auch und das ist ja auch nur ne virtuelle Tastatur oder.

iGoA 20. Aug 2007 16:34

Re: Spiel blockiert SendKey und andere virtuelle Eingaben
 
Sorry, kann Dir nicht helfen. Das mit dem cheaten is mir nur sofort in den Kopf gekommen.

Robert Marquardt 20. Aug 2007 17:02

Re: Spiel blockiert SendKey und andere virtuelle Eingaben
 
Mach mal eine Pause zwischen Key Down und Key Up wenn du mit keybd_event sendest.

Circle 20. Aug 2007 18:30

Re: Spiel blockiert SendKey und andere virtuelle Eingaben
 
Hab mal ne sleep-funktion eingesetzt aber funktioniert auch ned. Versteh ich echt ned. Ist aber nen komischer Cheat-Schutz ^^
Welche Befehle nutzt denn die normale Bildschirmtastatur von Windows? Die kann ja nicht wsa spezielles haben.

Dani 20. Aug 2007 18:42

Re: Spiel blockiert SendKey und andere virtuelle Eingaben
 
Um welches Spiel geht es denn? Vieleicht brauchst du eine speziell auf das Spiel zugeschnittene DLL...

Timi-loader 20. Aug 2007 21:58

Re: Spiel blockiert SendKey und andere virtuelle Eingaben
 
hast du die tasten auchnoch zusätzlich gemappt? so:

down:
Code:
keybd_event(taste, MapvirtualKey(taste, 0), 0, 0);
up:
Code:
keybd_event(taste, MapvirtualKey(taste, 0), KEYEVENTF_KEYUP, 0);
mfg

Circle 24. Aug 2007 16:36

Re: Spiel blockiert SendKey und andere virtuelle Eingaben
 
danke, aber funktioniert auch nicht. ist aber egal, ich mach jetzt nen umweg über die bildschirmtastatur ^^ lass ichs halt dort klicken :D

TKC 24. Aug 2007 16:45

Re: Spiel blockiert SendKey und andere virtuelle Eingaben
 
Also die Bildschirmtastatur machts mit SendInput

Zitat:

SendInput Function

--------------------------------------------------------------------------------

The SendInput function synthesizes keystrokes, mouse motions, and button clicks.

Syntax

UINT SendInput( UINT nInputs,
LPINPUT pInputs,
int cbSize
);
Parameters

nInputs[in] Specifies the number of structures in the pInputs array.

pInputs[in] Pointer to an array of INPUT structures. Each structure represents an event to be inserted into
the keyboard or mouse input stream.

cbSize[in] Specifies the size, in bytes, of an INPUT structure. If cbSize is not the size of an INPUT structure,
the function will fail.


Return Value

The function returns the number of events that it successfully inserted into the keyboard or mouse input stream.
If the function returns zero, the input was already blocked by another thread.

To get extended error information, call GetLastError.


Remarks

The SendInput function inserts the events in the INPUT structures serially into the keyboard or mouse input stream.
These events aren't interspersed with other keyboard or mouse input events inserted either by the user
(with the keyboard or mouse) or by calls to keybd_event, mouse_event, or other calls to SendInput.

This function does not reset the keyboard's current state. Any keys that are already pressed when the
function is called might interfere with the events that this function generates. To avoid this problem,
check the keyboard's state with the GetAsyncKeyState function and correct as necessary.

KarYn-To 26. Aug 2007 16:58

Re: Spiel blockiert SendKey und andere virtuelle Eingaben
 
Man kann das ganze auch über DirectInput versuchen. Ich habs mal versucht und es war mir bissele zu hoch. Aber ich kenne ein Programm, kein Plan wie das heißt, wenn ichs weiß mach ichn link hin, der benutzt auf jedenfall den Weg über DirectX. Sollte für viele Spiele funktionieren. Andere haben nen Cheat-Schutz und überprüfen wer den Befehl sendet, wird nur ausgewertet, wenn der Key den richtigen Absender hat... etc...

Gruß Angelo

Kedariodakon 26. Aug 2007 23:42

Re: Spiel blockiert SendKey und andere virtuelle Eingaben
 
Das ist mal ein Interessantes Thema, mit welchem ich mich auch schonmal beschäftigen wollte...

Bei vielen Spielen, gerade im MMORPG bereich sind Anti-Cheat Programme am laufen.
Diese sind so rabiat, dass sie mal alles mögliche blocken und das ganze System mitziehn...

Was gegen Cheats und Bots zu unternehmen ist ja toll, aber wenn dann Systemweit keine Tasten eingaben mehr gehen, ist das mehr als nervig...

Die die mir einfallen (X-Trap und Game Guard), scheinen z.b. SetInput komplett zu deaktivieren...
Nicht nur fürs Spiel selbst, nein, im ganzen System...

Spiel gestartet und schon geht keine Windowstaste mehr, keine virtuelle Windowstastatur... ec.

Mich würd mal interessieren wie die das machen und wie man das ev. wieder rückgängig machen kann...

Zumindest für SetInput wär das mal was...

Ev. hat sich ja mal wer damit beschäftigt und hat dahingehend ein paar Infos/Tips

Bye Christian

KarYn-To 27. Aug 2007 00:05

Re: Spiel blockiert SendKey und andere virtuelle Eingaben
 
Also, ich kenne das ganze von den Emulatoren und einigen NCSoft Games. Die haben GameGuard. Aber auch bei den Emulatoren funktioniert mit SendInput nix. Ergo, es geht über DirectX Hooks, so wie in JoyToKey.

Hier klicken

Ich hab das Programm mal auseinander genommen, es funktioniert definitiv über DirectX, ob Hooks weiß ich nicht mehr genau, da war ich noch 16, aber ich wollte mal sowas ähnliches schreiben und bin gescheitert.

Zu anderen Varianten, die Sperren die Windows-Taste einfach. Könnte man realisieren indem man den Tastendruck über Hooks abfängt und blockt, was bei Vista glaub ich mal ein Problem darstellen würde. Wenn ihr mir ein Spiel nennt, was die Dinger blockt, dann teste ich das mal, die Videothek ist um die Ecke =).

Wäre bereit mich aufzuopfern sowas ähnliches zu Entwickeln, wenn jemand mehr Àhnung von DirectX, DirectX Hooks und etlichem hat. Genügend Zeit hab ich, mein derzeitiges Projekt steht kurz vor der Fertigstellung zu Version 1.0 und sämtliche Bugs sind, wie sagt der Engländer so schön ? "Annihilated" ^^

Also, schaut euch mal JoyToKey an und Debugged das ganze mal mit Olly oder SoftIce, sieht wirklich interessant aus.
Ich hoffe ich mach mich mit dem Debuggen nicht strafbar, hab ja nichts am Ursprünglichen Code verändert, wenn doch, dann sagts mir, damit ichs rechtzeitig editieren kann ^^.

Gruß Angelo

Kedariodakon 27. Aug 2007 01:05

Re: Spiel blockiert SendKey und andere virtuelle Eingaben
 
Hab mein Joystick hüpsch konfiguriert und funktioniert auch in Windows...

Im geschützten Spiel... Pustekuchen :roll:

Kedariodakon 29. Aug 2007 10:26

Re: Spiel blockiert SendKey und andere virtuelle Eingaben
 
So ich greife das Thema nochmal von anderer Seiter her auf und führe das Thema mal passend weiter...

eins Vorweg: Ich hab mich bis jetzt weniger mit Hooks und ähnlichem beschäftigt, also sprich alles was unter der Oberfläche der Win-API funktioniert, bzw. was mit dem darunter möglich ist...

Alles Besprochene werde ich an dem Spiel testen, welches ich zz. ab und an spiele und zwar Sword of the New World (Spiel ist übrigens gar nicht mal so schlecht und ist Free2Play ;))
So nun komm ich mal langsam zum Thema...

Im Grunde geht es mir jetzt nicht mal unbedingt um eine Cheatengine, einen Bot oder sonstiges Spielmanipulierendes, da ich eigentlich nicht wirklich viel spiele und auch keinen Sinn sehe da wo zu betrügen...
somit geht es hier nur bis zu dem Punkt an dem Spielmanipulationen möglich wären und dies ist ev. schon ein langer Weg... (kann das nicht beurteilen)

So kommen wir zu dem oben genannten Spiel zurück.
Dieses Spiel verwendet nebenbei eine Software namens "X-Trap" ist sowas ähnliches wie "Gameguard" und die anderen Protection Tools...

Nun wie dem auch sei, wird diese Art von Software immer rabiater und wird für einen Gelegenheitsspieler wie mich, der beim Spielen nebenbei noch andere Dinge macht zum großen nervenden Etwas...
Warum?
  • Systemweite Deaktivierung der Windowstasten
  • Deaktivierung mancher Tastenkombinationen
  • schlucken von diversen API aufrufen ec.
Dies führt dann dazu, dass viele Sachen auf dem System nicht mehr so funktioniert wie es soll, was man ja eigentlich als normaler Spieler nicht merkt, solange man einfach nur spielt ;)
Als Beispiel zu erwähnen wäre:
  • die Tastatur, die nicht mehr so arbeitet wie sie sollte (Tasten Macros z.b. Explorer oder eMail-Client öffnen )
  • die Fernbedienung die nicht mehr mit dem Rechner komuniziert
Im Grunde ist ja nicht mal das Spiel selbst daran schuld, sondern eines der oben genannten *Sicherheitstools*, daher gehts auch eher um dieses Schutztool als um das Spiel an sich...

Nun die große Preisfrage, wie machen das diese Tools?
Gut, einfach mal nachgedacht, werden das wohl alles Hooks sein, nur davon gibts ja scheinbar auch mehrere Arten, die die ich vom Namen her kenne sind:
  • Import Adressen Tabellen Hooks (Modulweit???)
  • Funktionsumleitungen (Prozessweit???)
  • API-Hooks (Systemweit)
  • Kernel Hooks (Systemweit)
Was diese so in etwa machen kann ich mir denken, aber selber schreibe kann ich sie nicht. Habe zwar mal damit getestet, aber nur fremde Hook-Komponenten (z.b. madshi) zur Implementierung verwendet, aber nicht wirklich was daraus gelernt, sprich dieses "wie funktioniert das dahinter"...
Auch wenn ich mir Code anschau z.B. die uallCollection vom DP-Member Brechi ist mir der Sinn meist unklar und dies geht wohl ev. noch anderen Personen so...


Um da mal mit anderen Interessierten hinter die Kulissen zu schaun hab ich da mal eine kleine Schrittplanung gemacht die ich jetzt persönlich mal abarbeiten möchte und mich auch interessiert:

1. Was macht dieses "X-Trap" genau (Mindmap) (Was)
2. Womit macht "X-Trap" dieses Was? Wie bekomme ich es heraus? (Womit)
3. Wie kann ich diese/ähnliche genutzte Funktion von "X-Trap" selbst implementieren. (Wie)

Als letztes kommen die Punkte:
4. Wie kann ich es umgehen...
5. Wie kann ich es deaktivieren...

Dies Schlussendlich natürlich mit eigenen Mitteln und nicht mit Fremdkomponenten, da diese kein Lerneffekt hervorrufen...

So dies wäre der Lehrplan, fehlt nur noch der Lehrer, bzw. eine passende Gruppe die sich ebenfalls damit beschäftigen mag...


Bye Christian

KarYn-To 1. Sep 2007 02:39

Re: Spiel blockiert SendKey und andere virtuelle Eingaben
 
Ich habs mir jetzt auch runtergeladen, ich schaus mir auch mal an, wenn ich heute mehr Zeit finde. Sorry für den Spam ^^, aber ich woljetzt sitzen wir schon zu zweit daran.

Nen Bot schreiben mit dem Packet-Sniffing und TimeStamp und Checksummen und evtl Verschlüsselung... ich habs damals aufgegeben, so gut im analysieren bin ich nicht =)

Gruß Angelo

InZiDeR 21. Sep 2007 14:37

Re: Spiel blockiert SendKey und andere virtuelle Eingaben
 
Ich will mich auch mal zu diesem Thema äussern,ich finde das eine schande :)
Ich würde aber gerne auch mal mein eigenes Makro Programm schreiben (bzw Bot).

Doch würde ich es auch gerne mal in Packetform probieren ;) da dies viel einfacher und unumständlicher ist.

Aber hier auch ein paar beweise was passiert wenn die Packete Falsch analysiert (gesnifft) werden ;)
http://www.youtube.com/watch?v=5T6Vr3yI6yI
http://www.youtube.com/watch?v=Vz3pCiYphgY


mfg InZiDeR

Relicted 9. Okt 2007 07:31

Re: Spiel blockiert SendKey und andere virtuelle Eingaben
 
moin moin!

habe hier folgendes gefunden. schaut nach dem aus was ihr sucht :-)


[C++] DirectInput Hooking component and sample
http://www.gamedev.net/community/for...opic_id=371104

vielleicht isses ja genau das was benötigt wird und jemand setzt sich hin und schreibt das mal für die allgemeinheit nach delphi um :-)

gruß
reli

edit1:
hier noch nen link den mir g00gle ausgespuckt hat:
http://www.mpcforum.com/archive/index.php/t-158812.html
behandelt ziemlich genau das thema :-)


edit2:
noch ein anderer denkansatz: schonmal jemand versucht solche spiele via vnc zu spielen? also auf rechner a einzuloggen und mit rechner b via vnc auf rechner a zugreifen und dann sich in nem game oder so zu bewegen? wenn das klappt kann man sich ja mal z.b. den source von http://www.uvnc.com/ anschauen... eine idee ist es auf jeden fall :-)

edit3:
ich weiß ich nerve... noch ne idee: direkt in den tastaturbuffer schreiben...via VxD
http://split-s.blogspot.com/2005/01/...n-windows.html


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz