Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 11:35

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

Advertisement



VTable hooking Problem

Discussion on VTable hooking Problem within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Sep 2010
Posts: 454
Received Thanks: 212
VTable hooking Problem

Hey, ich habe jetzt mal mit der Funktion von Heavyhacker versucht eine Funktion zu hooken.
Code:
PBYTE HookVTable(DWORD** VTablePtr, int VTableIndex, PBYTE HookPtr) 
{
	DWORD oldProtect;
	VirtualProtect((void*)((*VTablePtr)+(VTableIndex*sizeof(DWORD))),sizeof(DWORD),PAGE_EXECUTE_READWRITE,&oldProtect);
	PBYTE original=((BYTE*)(*VTablePtr)[VTableIndex]);
	(*VTablePtr)[VTableIndex]=(DWORD)HookPtr;
	VirtualProtect((void*)((*VTablePtr)+(VTableIndex*sizeof(DWORD))),sizeof(DWORD),oldProtect,&oldProtect);
	return original;
}
In meinem Code so umgesetzt:
Code:
pEndScene = (EndScene_a)HookVTable(&ViTableStart, index, (PBYTE)hkEndScenea);
Die Zeiger der 2 vtable's zeigen anschließend auf meine Funktion, statt auf die original Funktion. Trotzdem wird noch die originalfunktion ausgeführt.
Was habe ich schwerwiegendes übersehen?
Zwawo is offline  
Old 07/01/2012, 10:16   #2
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
1. wieso "2 vtables"?
2. vllt wird die vtable garnicht benutzt? CS:S benutzt z.b. nicht die aus der d3d9.dll.
3. index == 42? (bei dx9)
4. vergiss diese funktion und schreib dir selber etwas, was du auch verstehst.

Tipp:
hook eine dx funktion mit einem normalem hook, fang das übergebene objekt ab, in dem ersten dword vom objekt ist (normalerweise - muss nicht) ein pointer auf die vtable des objekts, dann noch einen statischen pointer auf das objekt suchen und du kommst ganz ohne den d3d9 mist aus.
Dr. Coxxy is offline  
Thanks
1 User
Old 07/01/2012, 13:36   #3


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,908
Received Thanks: 25,409
und wie willst du ohne die vtable eine andere funktion hooken? Doch wohl nicht etwa mit ner statischen adresse?!
MrSm!th is offline  
Old 07/01/2012, 13:40   #4
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
Quote:
Originally Posted by MrSm!th View Post
und wie willst du ohne die vtable eine andere funktion hooken? Doch wohl nicht etwa mit ner statischen adresse?!
war das an mich?
nö, ganz normal über nen code patch, 0xe9 zu nem eigenen hook.
adresse von ner funktion kriegste entweder über nen searchpattern von ner vtable ref, direkt auf ne funktion, oder über nen statischen offset zu ner exportierten funktion.
Dr. Coxxy is offline  
Old 07/01/2012, 15:32   #5
 
elite*gold: 0
Join Date: Sep 2010
Posts: 454
Received Thanks: 212
Ich hatte das ja schon mit nem Detour gemacht, also search pattern auf die Referenz der vtable und darüber halt zur funktion und diese gehooked. Aber ich wollte es halt mal anders machen, meinen Horizont erweitern.
2 vtables weil 2 auf die Funktion gezeigt haben.

Quote:
vllt wird die vtable garnicht benutzt? CS:S benutzt z.b. nicht die aus der d3d9.dll.
Daran wird es wohl liegen.

Zu dem sind Detours ja die leichtesten Hooks und werden somit auch von AC Systemen leicht erkannt.
Soweit ich weiß wird die d3d9.dll zwar nicht von VAC2 gescannt (korrigiert mich wenn ich falsch liege),
trotzdem wird der Detour für spätere Zwecke nicht ausreichen.
Zwawo is offline  
Old 07/01/2012, 15:42   #6
 
elite*gold: 0
Join Date: Jun 2012
Posts: 187
Received Thanks: 58
dann einfach mal den callstack überprüfen und nachschauen wo er sich die call adresse herzieht. WC3TFT hat eine minorrelease version lang mit einer ganz eigenen vtable gearbeitet, die war dazu auch noch völlig anders aufgebaut. Da musste man auch via callstack mühsam jeden schritt verfolgen um an die funktionen zu kommen, die eigentlich benutzt wurden.
tnd0 is offline  
Old 07/01/2012, 16:54   #7
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
ich habe immer noch deine frage beantwortet:
Quote:
hook eine dx funktion mit einem normalem hook, fang das übergebene objekt ab, in dem ersten dword vom objekt ist (normalerweise - muss nicht) ein pointer auf die vtable des objekts, dann noch einen statischen pointer auf das objekt suchen und du kommst ganz ohne den d3d9 mist aus.
der normale hook ist nur einmalig um überhaupt an das objekt heranzukommen, danach hookst du die vtable dieses objektes.
ansonsten kannst du auch mit nem debugger hingehen und gucken, wo CreateDevice aufgerufen wird und wo das objekt gespeichert wird, oder, oder, oder...

wenn du einmal das objekt hast, und eine statischen pointer von diesem objekt hast, kannst du dir immer wieder das objekt holen und dessen vtable hooken.
Dr. Coxxy is offline  
Thanks
1 User
Old 07/02/2012, 11:53   #8


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,908
Received Thanks: 25,409
Quote:
Originally Posted by Dr. Coxxy View Post
war das an mich?
nö, ganz normal über nen code patch, 0xe9 zu nem eigenen hook.
adresse von ner funktion kriegste entweder über nen searchpattern von ner vtable ref, direkt auf ne funktion, oder über nen statischen offset zu ner exportierten funktion.
Wie man hookt ist mir klar, ich meinte das Finden der Adresse.
Du meintest ja er solle erst normal detouren, um das Objekt abzufangen, um dann auf die Vtable schließen zu können.
Und ich frage mich, welchen Sinn es hat, dann noch die Vtable abzufangen, wenn man ohnehin schon die Adresse für den ersten Hook über Pattern Search der Vtable gefunden hat (was du ja auch als Möglichkeit aufgelistet hast).
MrSm!th is offline  
Thanks
1 User
Old 07/02/2012, 19:45   #9
 
elite*gold: 0
Join Date: Sep 2010
Posts: 454
Received Thanks: 212
Wäre es denn eine gute Idee die Adresse von der original Funktion in die gehookte zu ändern also da von wo sie aufgerufen wurde. D.h das Program holt sich ja bevor er die Funktion aufruft die Adresse, verschiebt sie in eax und callt sie dann. Wäre es möglich per Code die Adresse zu ändern? Sollte man dann wenn, dass von der Funktion aus machen oder eine statische Adresse nehmen?
Über Olly funktioniert das Ändern ja.

(Ich glaube das meinte auch tnd0)
Zwawo is offline  
Old 07/03/2012, 13:44   #10
 
elite*gold: 0
Join Date: Jun 2012
Posts: 187
Received Thanks: 58
das ist an sich eine gute idee, leider weiß das auch jeder spieleentwickler der sich ein kleinwenig um anticheat maßnahmen bemüht.
tnd0 is offline  
Thanks
1 User
Reply


Similar Threads Similar Threads
[Tutorial] Hooking, Detours, VTable etc.
08/21/2018 - Coding Tutorials - 5 Replies
Da man öfters hier im Forum die Frage aufkommen sieht "Wie male ich etwas auf ein Spiel" und "Wie sende ich Tastendrücke an mein spiel?!?111" Präsentiere ich hiermit stolz pünktlich zu Neujahr mein Tutorial rund ums Hooking, Detours, Searchpattern, VTables etc. 27 Seiten geballte Informationen mit 2 Beispielen für einen DirectInput und einen D3DHook. Download: HookingTutorial.rar | xup.in GL & HF
[C++] VTable Hook
10/15/2011 - Coding Tutorials - 1 Replies
schnell erklärt was das hier is: eine "andere" methode vtable funktionen zu hooken, die meisten hooken direkt die funktion! diese funktion hier nicht, es wird nur der vtable eintrag überschrieben... vorteil: es wird keine backup funktion benötigt da die gehookte funktion nicht + geändert wird! zwar nur eine kleinigkeit, finde ich trotzdem einfacher als immer CreateHook((void*)VTable, hookVTable4,true,true); zu callen! ich werds nicht weiter erklären, man sollte es verstehen: PBYTE...
D3D Hooking Problem
03/01/2011 - General Coding - 1 Replies
Alloa, ich habe mir das Tutorial von D3D9 Hooking - Wie code ich D3D Hacks? durchgelesen und dementsprechend auch versucht was eigenes zu konstruieren. Ich habe eine eigene DLL Hook Datei programmiert und sie mit einem fremden Injector verbunden. Klappt bisher prima. Es ist mir gut gelungen, ein Rechteck zu zeichnen und ein bisschen Text darauf abzubilden. Sobald ich mein Spiel starte geht alles wie von Zauberhand. Allerdings ist mir vor kurzem aufgefallen, dass mein "Hook"...
d3d hooking problem
02/12/2011 - WarRock - 2 Replies
hey ich mach grad des d3d hooking tut von purple.d1amond und habe als erstes um zu testen obs geht den code kopiert und versucht zu testen. problem is nur, dass warrock crasht direkt nachdem ich beim patcher auf spiel starten geklickt habe. weis einer, warum es nicht geht? PS die endscene adresse habe ich die richtige reingemacht. code: -->



All times are GMT +1. The time now is 11:36.


Powered by vBulletin®
Copyright ©2000 - 2026, 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 ©2026 elitepvpers All Rights Reserved.