[VB] Memory base address achterhalen

Pagina: 1
Acties:

  • Dragon
  • Registratie: Oktober 2002
  • Laatst online: 23-06 10:04
Ok dit is een lastige waar ik zelf niet uitkom. Ik heb hier het spel GTA Vice City en hier wil ik graag vanuit mn VB programma de speler eigenschappen veranderen. Denk hierbij aan health, armor, coordinaten, etc.
Nu heb ik met een memhacking(T-Search) programma wel de plekken gevonden waar health en armor enzo staan en als ik het aanpas werkt het ook echt. Maar het probleem is dat het geheugenadres dynamisch wordt toegekend dus elke keer staat het op een andere plek. Ik heb begrepen dat ik het base address voro dat gedeelte moet zien te achterhalen netzoals het bij GTA3 1.1 bv &H6FB1C8 is.
Misschien dat deze code regels iets helpen:

hierbij is PlayerAdr in GTA3 1.1 &H6FB1C8
en lngPhandle de handle om bij het proces geheugen te komen.
lngHookBuffer is de echte plek waar in het geheugen de playerstats gedeelte begint.

Visual Basic:
1
2
3
4
lngHWnd = FindWindow(vbNullString, "GTA3")
GetWindowThreadProcessId lngHWnd, lngPid
lngPhandle = OpenProcess(PROCESS_ALL_ACCESS, False, lngPid)
lngReadReturn = ReadProcessMemory(lngPhandle, PlayerAdr, lngHookBuffer, 4, 0&)

[ Voor 2% gewijzigd door curry684 op 20-09-2003 21:16 . Reden: correcte tag is [code=vb] dus ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Ik denk dat je iets basaals mist op het puntje 'dynamisch geheugen alloceren'. Je zegt dat je de info op offset 0x6FB1C8 hebt gevonden, maar dat ie iedere keer op een andere plek staat. Dat houdt in dat het blok 'statusgeheugen' intern door het programma zelf wordt gealloceerd via malloc of new. Je zult dus een pointer moeten zien te ontdekken naar dat blok geheugen, en wellicht staat die pointer ook weer in een dynamisch gealloceerd gebied etc. Zo moet je de hele boom aflopen totdat je een statische pointer vindt, en die zal altijd op dezelfde plaats in het proces staan.

Optie 2 is dat je de assemblercode zoekt die bijv. de armor veranderd, en de offset van die code als referentie gebruikt. Deze zal namelijk ook altijd op dezelfde plek staan, en na het laden de goede pointer bevatten.

Professionele website nodig?


  • Dragon
  • Registratie: Oktober 2002
  • Laatst online: 23-06 10:04
ja ik had eigenlijk niks gemist maar verkeerd onder woorden gebracht. Ik heb de pointer dus gevonden en alles werkt nu. Het werkt dus zo Pointer->Player Info->Waaronder een integer met de health waarde

  • klinz
  • Registratie: Maart 2002
  • Laatst online: 10-08 15:44

klinz

weet van NIETS

GetModuleHandle() geeft de handle van een module terug. Deze handle is gelijk aan het base address van die module.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

The-Dragon schreef op 20 september 2003 @ 21:41:
ja ik had eigenlijk niks gemist maar verkeerd onder woorden gebracht. Ik heb de pointer dus gevonden en alles werkt nu. Het werkt dus zo Pointer->Player Info->Waaronder een integer met de health waarde
Exact zoals ik omschreef dus :) Kun je de volgende keer als je topic opgelost is meteen even vermelden hoe je het gedaan hebt? Dat houdt de search bruikbaarder en had mij hier 10 minuten typen gescheeld.... alvast bedankt :Y)

Professionele website nodig?


  • Dragon
  • Registratie: Oktober 2002
  • Laatst online: 23-06 10:04
Nou ik had het antwoord ontvangen vlak nadat jij gepost had dus eigenlijk kon ik er ook niets aan doen. Maar goed ik heb het antwoord ontvangen van iemand uit UK. Hoe weet ik niet precies maar voor de geinteresseerden: &H7E4B8C
Pagina: 1