Hackshield PostMessage Block?

08/04/2011 23:19 kurrbis#1
Hallo,
ich wollte mir nen Level Bot für Fantasy Tennis schreiben. Da ich den gerne im Hintergrund laufen lassen möchte, habe ich an Postmessage gedacht.
In der Game-Lobby funktioniert alles ohne Probleme. Bin ich aber in einem Match, scheinen die Tastendrücke nicht mehr akzeptiert zu werden, da nichts passiert. Öffne ich aber das Chatfenster kann ich die Tastendrücke wieder sehen. Da ich Postmessage schon öfters in anderen Spielen verwendet habe und es immer geklappt hat, denke ich mir nun, dass es an Hackshield liegen könnte. Ist jemanden da etwas bekannt, dass Hackshield Postmessage oder auch Sendmessage blockiert?
08/05/2011 01:50 MrSm!th#2
Wenn es in der Lobby klappt, liegt es wahrscheinlich nicht an HS, da der ja die ganze Zeit läuft.
Probier es mal mit SendInput.

Viele Spiele nehmen ihren Input direkt vom Keyboard per DirectInput, das kannst du nur mit SendInput manipulieren.
08/05/2011 01:55 kurrbis#3
Quote:
Originally Posted by MrSm!th View Post
Wenn es in der Lobby klappt, liegt es wahrscheinlich nicht an HS, da der ja die ganze Zeit läuft.
Probier es mal mit SendInput.

Viele Spiele nehmen ihren Input direkt vom Keyboard per DirectInput, das kannst du nur mit SendInput manipulieren.
muss ich injected sein oder? Oder kann ich SendInput auch an ein Handle senden?
08/05/2011 12:21 Akorn#4
Quote:
Originally Posted by kurrbis View Post
muss ich injected sein oder? Oder kann ich SendInput auch an ein Handle senden?
Steht doch bei MSDN wie das geht.
08/05/2011 12:44 MrSm!th#5
SendInput manipuliert den Input Stream direkt am Treiber, da brauchst du keinen Handle.
Es simuliert einfach Tastendrücke, als wären sie wirklich gedrückt worden.
Wenn das Spiel im Vordergrund ist, bekommt es das automatisch mit.
08/05/2011 13:33 kurrbis#6
Quote:
Originally Posted by MrSm!th View Post
SendInput manipuliert den Input Stream direkt am Treiber, da brauchst du keinen Handle.
Es simuliert einfach Tastendrücke, als wären sie wirklich gedrückt worden.
Wenn das Spiel im Vordergrund ist, bekommt es das automatisch mit.
Dann könnte ich ja direkt AutoIt benutzen, da es sich bei dem Bot um ein wirklich sehr kleines Projekt handelt. Aber ich möchte nicht, dass das Spiel den Fokus haben muss. Gibt es denn keine andere Möglichkeit Tasten zu simulieren, außer ein eigener Treiber, welche auch funktioniert wenn das Fenster sich im Hintergrund befindet?

Ps: Abgesehen davon, funktioniert SendInput leider auch nur in der Lobby und im Chatfenster...
08/05/2011 15:14 buFFy!#7
schau mit spy++ was passiert wenn du ne taste drückst. vielleicht brauchst du noch spezielle parameter (hatte das letztens bei irgendeinem spiel).

ansonsten musst du wohl entweder den vordergrund nehmen, oder dich ans reverse engineering machen.
08/05/2011 15:49 Ende!#8
Falls dein Spiel wirklich DirectInput benutzen sollte, kannst du auch einfach das hooken ;) Dass du dafür injecten musst, sollte klar sein - außerdem ist dabei dann natürlich etwas mehr Wissen bzgl. Gamehacking Vorraussetzung. Solltest vllt einfach mal DirectInput8Create detouren und schauen, ob die Funktion called wird.

€: Falls DI used werden sollte, müsste ich noch irgendwo 'ne Klasse rumfliegen haben, mit der ich DI8 immer hooked hab. Könnte dir da evtl Codeteile zukommen lassen.
08/05/2011 16:25 MrSm!th#9
Autoit nutzt aber Apis und kann dementsprechend leichter geblockt werden.
Ein eigener treiber würde da nicht helfen, da musst du schon DI hooken wie ende das schon sagte.
08/05/2011 16:40 kurrbis#10
Also ich habe grade IDA und Dependency Walker benutzt und kann keinen Hinweis darauf finden, dasss DirectInput benutzt wird. Mit Spy++ habe ich rausgefunden, dasss wenn ich im Spiel eine Taste drücke, dieses über WM_KEYDOWN, WM_CHAR, WM_KEYUP ankommt. Ich habe exakt den gleichen wParam und lParam benutzt wie es mir angezeigt wurde, doch wieder nur erscheint der Tastendruck in der Lobby oder im Chatfenster...
08/05/2011 19:53 buFFy!#11
Quote:
Originally Posted by Ende! View Post
Falls dein Spiel wirklich DirectInput benutzen sollte, kannst du auch einfach das hooken ;) Dass du dafür injecten musst, sollte klar sein -
?
08/05/2011 21:48 Ende!#12
Quote:
Originally Posted by buFFy! View Post
?
...

Gut, man könnte natürlich auch 'nen Treiber laden, Codeinjections usen oder die Funcs für die Detours via manual mapping in den Speicher des Games laden, aber bleiben wir mal realistisch: glaubst du, dass jmd, der dazu fähig ist, überhaupt erst in Erwägung ziehen würde die WinAPI Funktionen für Keystroke-Faking zu usen? :rolleyes:

Wenn ich den tieferen Sinn deines 1-Character-Posts nicht so verstanden habe, wie du es meintest, darfst du meinen Post hier ignorieren.
08/05/2011 21:59 MrSm!th#13
Ein Treiber würde verdammt wenig Sinn machen, da der ja wahrscheinlich den Input Stream wie SendInput manipulieren würde.
Will man das nur für das Game machen, egal ob es im Hintergrund oder Vordergrund ist, dann kommt man um einen DI Hook im Game nicht herum.
08/06/2011 00:29 kurrbis#14
Was genau kann ich denn jetzt noch machen, hab eig. alles versucht...PostMessage, SendMessage, SendInput...alles mit den richtigen Parametern und nix geht? DirectInput scheint nicht genutzt zu werden.
Noch wer eine Idee?
08/06/2011 06:46 MrSm!th#15
DirectInput wird sicherlich genutzt, etwas anderes als DirectInput, GetKeyboardState oder Windows Messages kann gar nicht genutzt werden, wobei alle drei durch SendInput abgedeckt werden.
Liegt wohl doch am HS; dann schützt der das Spiel wohl nur ingame und nicht die ganze Zeit.