OldSchoolHack

Registrieren / Anmelden Deutsch

Offsets der VMTable finden. Wie? CS:S


icon Offsets der VMTable finden. Wie? CS:S #1

Anmeldungsdatum: Feb 2011

Beiträge: 5

Hallo,

ich probiere mich derzeit an einem basehook.
nun möchte ich jedoch die "createmove" funktion hooken, was sich als äußerst kompliziert darstellt, da mir der benötigte offset fehlt.

hier wäre der teil der mich wahnsinnig macht:
CPP Code:
  1.  
  2. if(VirtualProtect((LPVOID)((DWORD)pdwClientVMT + 0x24/*0x24*/), 4, PAGE_EXECUTE_READWRITE, &dwOldProtect)) // (DWORD)pdwPanelVMT + 36
  3. {
  4. GLogSystem.AddToLogFileA( "Basehook2011.log", "test1", buffer);
  5. g_dwOrgHudUpdate = pdwClientVMT[9]; // 9. Stelle im Array / 10. in der Headerdatei ! Geknackt yes!!! :)
  6. GLogSystem.AddToLogFileA( "Basehook2011.log", "test2", buffer);
  7. pdwClientVMT[9] = (DWORD)&new_HudUpdate;
  8. GLogSystem.AddToLogFileA( "Basehook2011.log", "test3", buffer);
  9. VirtualProtect((LPVOID)((DWORD)pdwClientVMT + 0x24 // hier müsste ein anderer offset (genau wie oben auch) hin soweit ich mich nicht irre nur wie komme ich daran?/*0x24*/), 4, dwOldProtect, &dwOldProtect);
  10. GLogSystem.AddToLogFileA( "Basehook2011.log", "test4", buffer);
  11. }
  12.  

In der logdatei finde ich auch jeweils test1-4 wieder, aber sobald ich auf einen server connecte stürzt das spiel ab

die funktion selbst sieht so aus:

CPP Code:
  1.  
  2. void __stdcall new_HudUpdate(bool bActive)
  3. {
  4. _asm
  5. {
  6. PUSH bActive
  7. CALL g_dwOrgHudUpdate
  8. }
  9.  
  10. g_pClient->HudUpdate(bActive);
  11.  
  12. GLogSystem.AddToLogFileA( "Basehook2011.log", ">>>HudUpdate EXECUTED!<<<" );
  13. }
  14.  
  15. In der logdatei selbst steht nachdem der readfehler bzw. speicherfehler auftritt trotzdem das "HudUpdate EXECUTED" ... also demnach wird die funktion zumindest zu ende ausgeführt, auch wenn das spiel dann abstürzt
  16.  


vielen dank für eure hilfe im vorraus

zw3rgy

icon #2

Anmeldungsdatum: Aug 2007

Beiträge: 8643

Benutzer-Bewertung:

199 positiv
33 negativ
sicher läuft bei deinem PUSH CALL was falsch. Sicher reicht es, wenn du g_dwOrgHudUpdate(bActive) aufrufst, wenn so der Rückgabewert deiner Hookfunktion ist.

greetz KN4CK3R

__________________

Hallo
icon #3

Anmeldungsdatum: Feb 2011

Beiträge: 5

ich hab jetzt schon alles mögliche versucht und finde meinen fehler einfach nicht.
kannst du mir vllt noch einen denkanstoß geben, der mich weiterbringt?

zw3rgy
icon #4

Anmeldungsdatum: Aug 2007

Beiträge: 8643

Benutzer-Bewertung:

199 positiv
33 negativ
also an den Offsets liegts schonmal nicht, denn VirtualProtect funktioniert immer nur pageweise und eine Page ist bei Windows im Normalfall 4096Byte groß, du erwischt also auf jeden Fall alles in der VMT. Schau dir im Debugger an an welcher Stelle es schief läuft. Schau ob das Problem auch mit einem naked Hook passiert.

greetz KN4CK3R

__________________

Hallo
icon #5

Anmeldungsdatum: Feb 2011

Beiträge: 5

Sobald ich die HUDUpdate funktion rausnehme läuft der hook.

Zu den Offsets heisst es es ist egal welchen Offset ich dazu rechne?

CPP Code:
  1. VirtualProtect((LPVOID)((DWORD)pdwClientVMT + 0x24

könnte da auch + 0x10 stehen? Ich möchte gerne wissen woraus sich das ergibt, ich kanns nicht leiden dinge zu übernehmen ohne deren herkunft zu kennen. :/ wäre nett wenn du mir das erklären könntest.

zw3rgy
icon #6

Anmeldungsdatum: Aug 2007

Beiträge: 8643

Benutzer-Bewertung:

199 positiv
33 negativ
es geht der Irrglaube herum, dass ein VirtualProtect auf eine Adresse mit dem Wert 4 als size nur die 4 Bytes an der Adresse protected. In Wirklichkeit schaut Windows aber in welcher Page die Adresse + size liegen und protected dann die Page(s).
Das Offset ist insofern nur wichtig, dass du in der richtigen Page landest, aber die Size ist mehr oder weniger uninteressant, da die Größe im Normalfall unter der Pagegröße liegt (normal 4096Bytes). Ob in dem Beispiel jetzt 0x10 oder 0x24 steht, könnte egal sein, wenn sich beides innerhalb der gleichen 4096Byte Page liegt.

greetz KN4CK3R

__________________

Hallo