[VB.Net2010] Tastenfolge an Spiel senden (DAOC)

11/28/2011 10:07 dominic.e#1
Guten Morgen Gemeinde ;)

ich habe mal wieder ein Problem beim programmieren und komm nicht weiter.

Ich möchte verschiedene Tasten an das Spiel DAOC senden, nur lässt es das nicht so ganz zu glaube ich.

Mit WoW funktioniert es komischerweise problemlos, aber eben bei DAOC nicht.

Ich habe es mit Sendmessage, Postmessage, SendInput versucht, aber es zeigt keine wirkung.

Ausser bei SendInput, da gibts ne kleinigkeit. Wenn ich nur Enter oder iwas anderes simuliere passiert garnichts, aber wenn ich zb in DAOC das chatfenster öffne, einen text eingebe und dann mein Programm die Enter Taste schicken lasse, dann schickt er das auch weg.

Aber ich möchte zb die Taste 7 an das spiel senden, weil da dann eine Aktion leigt um zb iwas herzustellen.

Ich habe iwo gelesen, das es mit DirectInput geht, aber nutzt DirectInput nicht auch SendInput im endeffekt?

Ich find nirgens was gescheites, vllt könnt ihr mir helfen ;)

Gruß,
Dominic
11/28/2011 19:36 vwap#2
DirectInput ist doch von DirectX für eigene Games wenn ich mich nicht irre.

Warscheinlich blocked DOAC einfach virutelle Inputs.
11/28/2011 20:54 dominic.e#3
Das is halt jetzt die Frage, ob DAOC die inputs blockt, aber es muss doch iwie ne möglichkeit geben :D
11/30/2011 09:39 dominic.e#4
weiss denn niemand was? -.-' wie siehts aus, wenn ich iwie noch autoit nutze, vllt klappts damit besser.

was gibts denn alles fuer moeglichkeiten bei autoit um tastenanschlaege zu senden?

gruss
12/01/2011 09:45 vwap#5
Quote:
Originally Posted by dominic.e View Post
weiss denn niemand was? -.-' wie siehts aus, wenn ich iwie noch autoit nutze, vllt klappts damit besser.

was gibts denn alles fuer moeglichkeiten bei autoit um tastenanschlaege zu senden?

gruss
Du verstehst nich ganz. DOAC blockt virtuelle Inputs.
Da nutzt dir auch AutoIt nichts.
12/01/2011 09:52 s3cid#6
Genau wie Headpuster sagt, das Spiel blockt virtuelle inputs.
Du wirst mit VB nichts coden können, was den Hackshield umgeht.
12/01/2011 10:32 dominic.e#7
okay, hab ich mir dann schon fast gedacht :D

gaebe es dann eine alternative moeglichkeit, oder kann man bzw das projekt sozusagen jetz inn wind schiessen? ueber iwelche injektionen, bzw andere programmiersprachen, mir is alles recht ;)

danke schonmal fuer euren hinweis wegen blocken der inputs.

gruss ;)
12/01/2011 13:40 vwap#8
BlockFunction mit C++ hooken und Error returnen.
12/01/2011 18:06 dominic.e#9
was soll error returnen heissen? ;) bzw was damit gemeint.

ich hab ma n bisschen recherchiert und es gibt wohl die moeglichkeit uebern bypass, so wies bei flyff un so gemacht wird. also die send- oder postmessage aufrufen aber iwie die ersten 5bytes uebersprungen weil die das spiel doch iwie nutzt um das zu filtern.

werde mich mal daran versuchen ;)

gruss,
dominic

Edit:
Ich hab mir mal das Tutorial/How-To angeguckt hier : [Only registered and activated users can see links. Click Here To Register...]

aber iwas versteh ich da nicht ganz, den code versteh ich schon soweit nur wie und wo ich den genau reinsetzen muss.

der erste große codeteil (wo die windows.h includiert wird bis zum ende der mypostmessagea function) hab ich kp wo genau im vc++2010 projekt das hinkommt.
kommt das in die haupt cpp oder wohin genau? mein projekt hab ich agp_api genannt, sprich meine datei heißt dann agp_api.cpp.

der zweite große codeteil kommt ja in die dllmain.cpp wenn ich das richtig verstanden habe, aber wenn ich das dann debuggen will meckert er rum, weil er ja die variablen nicht kennt, weil sie ja in agp_api.cpp deklariert sind, is ja klar und verständlich.

Was ich noch versucht habe ist, alles in die dllmain.cpp zu packen, dann meckert er auch nicht, aber ich kann am ende die dll nicht in meinem vb.net projekt aufrufen -.-' iwo versteh ich das nicht...

Wäre cool wenn ihr mir vllt n bissl helfen könnt ;)

Gruß

Also, ich habs jetzt zwar hinbekommen eine dll zu erstellen, aber iwie klappt da noch garnichts :D wenn ich sie in meinem vb projekt deklariere klappt auch alles und wenn ich die funktion dann aufrufe passiert garnichts.

Hier is mal der Code der Dll :

Code:
#include "stdafx.h"
#include <windows.h>

HINSTANCE hInst; 
DWORD DLLFunc; 
HWND hWnd;

__declspec(naked) BOOL WINAPI __stdcall myPostMessageA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
   __asm
   {
      mov  edi, edi
      push ebp
      mov  ebp, esp
      jmp [DLLFunc]
   }
}

BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpvReason*/)
{
    switch (dwReason)
    {
        
        case DLL_PROCESS_ATTACH:
        {
               if (DLLFunc == NULL) {
                hInst = LoadLibrary("user32.dll");
                DLLFunc = (DWORD)GetProcAddress(hInst, "PostMessageA") + 5; 
                }
        }
        break;

        case DLL_THREAD_ATTACH:
            {
               if (DLLFunc == NULL) {
                hInst = LoadLibrary("user32.dll");
                DLLFunc = (DWORD)GetProcAddress(hInst, "PostMessageA") + 5; 
                }
            }
        break;
        case DLL_THREAD_DETACH:
            {
                if (hInst != NULL) {
               // Un-Load DLL
               ::FreeLibrary(hInst);
               hInst = NULL;
            } 
            }
        break;
        case DLL_PROCESS_DETACH:
        {
                if (hInst != NULL) {
               // Un-Load DLL
               ::FreeLibrary(hInst);
               hInst = NULL;
            } 
        }
        break;
    }
    return TRUE;
}
Theoretisch kann ich damit doch auch die Postmessage ganz normal aufrufen, egal ob zu nem spiel oder zu nem programm oder?
12/02/2011 23:30 vwap#10
Was willst du mit einem Gameguard Bypass?

Sieh dir das an: [Only registered and activated users can see links. Click Here To Register...]

Hooking per Detours.
12/03/2011 09:18 dominic.e#11
Ich dachte mir vllt wenn ich das n bissl abändere ist das ganze universal.
Ich weiß ja nicht, OB das Spiel die dlls hooked, also die funktionen da abändert (ich denks aber schon, weil sonst müsste man ja problemlos sendmessage nutzen können).

Jetzt ist halt die frage, wie ich das am besten rausbekomme und wie ich mir dann n bypass programmiere oder iwas anderes um halt an die funktionen sendmessage un co ranzukommen um diese ans spiel zu senden.

Werde mir das video mal angucken ;) dankeschön dafür.

Gruß,
Dominic

Edit:

Ich hab mir das Vid jetzt mal angeguckt, schon cool ;) aber da funktioniert das ganze ja per Inject, geht das nicht auch ohne irgendwie?

Ich möchte einfach nur ein programm schreiben, welches mir zb an DAOC die Taste 7 drückt, weil er damit Castet. das ganze würde ich gerne entweder über Post- oder Sendmessage machen. Jetzt dachte ich mir schreibe ich eine dll, welche diese umleitung von DAOC beim aufruf von funktionen umleitet wieder zurück auf die eigentliche funktion (hoffentlich versteht ihr was ich meine), sodass DAOC die Message doch empfängt.

Ist das nicht so, dass immer 5bytes dafür genutzt werden um die funktion umzuleiten oder wie bekommt man das dann raus?

Gruß
12/03/2011 11:09 vwap#12
Hooks geht ohne Injection nicht.
Und nein, es werden nicht immer 5 Bytes genutzt.
12/03/2011 11:34 dominic.e#13
Heißt im endeffekt, ich muss zwingend die dll dann injecten um den Sendmessage befehl nutzen zu können oder wie?

Edit:

Bzw was ist jetzt im Endeffekt die beste/schoenste loesung um einen tastenanschlag (zb. Enter, oder 7) an das spiel zu senden, welches ja anscheinend die virtuellen inputs blockt.

Gruß
12/05/2011 18:34 dominic.e#14
Hier in dem TUT ist beschrieben, dass man die Funktionen dann auch ganz normal in VB.Net zb aufrufen kann.

--> [Only registered and activated users can see links. Click Here To Register...]

Von daher bin ich ausgegangen, das es dann auch iwie bei DAOC oder ähnlichen funzt.

Aber gibts denn nu eine schöne lösung OHNE zu injecten, mit welcher ich zb Send- und PostMessage nutzen kann?
Oder ist die beste/einzige Lösung übers injecten?

Gruß und Danke schonma,
Dominic
12/05/2011 21:31 vwap#15
Quote:
Originally Posted by dominic.e View Post
Hier in dem TUT ist beschrieben, dass man die Funktionen dann auch ganz normal in VB.Net zb aufrufen kann.

--> [Only registered and activated users can see links. Click Here To Register...]

Von daher bin ich ausgegangen, das es dann auch iwie bei DAOC oder ähnlichen funzt.

Aber gibts denn nu eine schöne lösung OHNE zu injecten, mit welcher ich zb Send- und PostMessage nutzen kann?
Oder ist die beste/einzige Lösung übers injecten?

Gruß und Danke schonma,
Dominic
Nochmal, GameGuard und die ganzen anderen CrapBlocker blocken virtuelle Inputs nicht.
Sondern direkt das Spiel blockt sie.

Somit kannst du alle HighLevel-Programmiersprachen mal direkt vergessen.
Was anderes als C / C++ + ASM bleibt dir nicht übrig.
Block Funktion mit OllyDBG reversen (z.B. mit einem VB-Programm einen virtuellen Input senden, dann in den Stack schauen, was gerade gepusht wird und dann die Function bis zum Urpsrung verfolgen), dann in C++ hooken (z.B. mit Detours, HWBPs oder what ever) und am Ende statt dem Pointer "ERROR_SUCCESS" returnen und die Funktion sollte ausgehebelt sein.