[C++]EndScene hook

01/03/2011 16:05 .BritainAndy#1
Hallo Community,
ich habe ein Problem mit dem Thema 'EndScene' hooking.
Ich habe eine DLL geschrieben (Source unten).
Wenn ich diese in z.b. Css injecte um zu gucken ob bis jetzt alles richtig ist,
sprich ob das game crasht oder nicht.
Jedoch sagt Winject beim injecten der DLL "Both injection methods failed, target is protectet?".
Wenn ich jedoch eine DLL injecte, die einfach nur ne MSGBOX ausgibt, klappt es wunderbar.
Nun ist meine Frage, liegt der Fehler im Source meiner DLL oder ist Counterstrike:Source gegen D3D9 hooks protectet?
Es gibt ja viele Chamhacks usw. für Cs:s, daher würde ich letzteres ausschließen.
Hier der Source der DLL.
Bitte auch sagen, wenn ich Zeilen falsch auskommentiert habe.
Habs versucht leicht ausdrücken was im groben passiert, damit meine Freunde das auch verstehen.

Danke an Ende! für die Hilfe, der jetzt leider offline ist weshalb ich hier frage :>



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

Und bitte unterlasst nicht qualifizierte Kommentare -.-"
01/03/2011 16:48 MrSm!th#2
Die D3D9 und ggf. die D3Dx9 Dlls müssen im gleichen Verzeichnis wie deine Dll sein.
Dass Winject sie nicht injecten kann, liegt daran, dass Windows die Dlls, die die nötigen Funktionen exportieren, nicht finden kann.
Also gehst du in den Ordner deines D3D SDKs, gehst in den Ordner redist und suchst das Package mit den Redistributable Dlls, die zu deinem SDK passen und packst sie in das Verzeichnis.

Eine Frage:
Du kannst kaum C++ und willst D3D hooken wtf?
01/03/2011 17:06 .BritainAndy#3
Danke für die Antwort.
Mich interessiert Detouring/hooking halt.
Und wollte mich dann daran wagen.
Ich denke man lern am besten wenn man ins kalte wasser geschmissen wird.
Klar, mir fehlen gewisse Sachen, die kann ich dann wenn ich sie mir anschaue und "studiere" viel besser verstehen, wenn ich sie vorher schonmal gebraucht habe
01/03/2011 17:53 MrSm!th#4
Dann mal viel Glück lol

Außerdem ist das falsch:

Quote:
//Pointer der EndScene ist das 42te Array element aus der Originalen EndScene function (im Inet gefunden)
Die Adressse von EndScene ist das 42. Element in der VTable, das ist ein Array von Funktionspointern, das ein Objekt mit sich rumschleppt; da sind alle virtuellen Funktionen drin gespeichert.

An den Kommentaren sieht man eigentlich schon, wie viel du verstanden hast und wie viel du höchst wahrscheinlich auf diese Weise verstehen wirst.
01/03/2011 18:06 Akorn#5
Quote:
Originally Posted by .BritainAndy View Post

Und bitte unterlasst nicht qualifizierte Kommentare -.-"
Dann unterlass doch einfach nicht qualifizierte fragen.

Quote:
Ich denke man lern am besten wenn man ins kalte wasser geschmissen wird.
Coole idee schicken wir doch alle Kindergartenkinder auf die Uni:rolleyes:

Quote:
Originally Posted by .BritainAndy View Post
Klar, mir fehlen gewisse Sachen, die kann ich dann wenn ich sie mir anschaue und "studiere" viel besser verstehen, wenn ich sie vorher schonmal gebraucht habe
Weil das so gut funktioniert fragst du auch wegen jeden misst nach.
01/03/2011 18:13 .BritainAndy#6
Alles klar akorn.
Ein einfacher satz wie

Quote:
man kann funktionen nicht außerhalb von der mainfunktion oder anderen funktionen aufrufen
lässt sich zwar compilen, wird aber immer 0 returnen
Hätte schon genügt. Habs im eifer des gefechts übersehen.
01/04/2011 14:01 .BritainAndy#7
[Only registered and activated users can see links. Click Here To Register...]

so, nun daran das Pattern nichts finden will.
Muss andere Methoden nehmen oder ne andere Directx version

closerequest
01/04/2011 15:51 MrSm!th#8
wenn ich mir den code so ansehe, dann denke ich direkt daran, woran ich schon ein paar posts weiter oben gedacht hab:

das kommt davon, wenn man sich irgendwas zusammenkopiert.

du brauchst keine andere hooking methode, das ist schwachsinn.
ist klar, bei allen leuten funktioniert es und bei dir gerade nicht ;)
außerdem brauchst so oder so keine neue hooking methode, sondern nur eine andere, um die EndScene adresse zu finden.
dein SEH müll da im code hookt EndScene auf ne andere weise, aber die Adresse hast du ja eh nicht....außerdem hat SEH sehr starke einschränkungen und wenn ich das so sehe merke ich, dass du sie nicht kennst.

der ExceptionHandler muss im selben thread gesetzt sein; wenn du das in deiner dll main machst, bewirkt das gar nichts.


und wenn ich den code nochmal sehe....ganz ernsthaft, du kannst die sprache scheinbar kein bisschen, also lass es einfach!