Re: Delphi WriteProcessMemory mit Offsets zum Pointer
Delphi-Quellcode:
procedure p_memorywrite(value,size:integer;adresse:dword);
begin GetMem(buf,1); ThreadId := GetWindowThreadProcessId(WindowName,@ProcessId); HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId); try buf^ := Chr(value); WriteProcessMemory(HandleWindow,ptr(adresse),buf,size,write); finally FreeMem(buf); closehandle(HandleWindow); end; end; |
Re: Delphi WriteProcessMemory mit Offsets zum Pointer
oha. ;-)
Sagen wir es mal so - Dein Code hat gewisse Entfaltungsmöglichkeiten. Ich werde ihn Dir nicht neu schreiben, habe aber ein paar Anregungen: - Wo kommen "WindowName" und "ProcessId" her? Globale Variablen sind i.a. "pfui". - Wenn Du eine Funktion wie "GetWindowThreadProcessId" oder "openProcess" aufrufst, muss Du immer damit rechnen, dass diese Funktionen fehlschlagen. Also das Ergebnis dieser Funktionen prüfen, ob ein Fehlercode geliefert wurde. (Google: msdn + {funktionsname} führt Dich zur Doku) - "Chr(value)" versucht, den in Value enthaltenen Wert in den Datentyp Character zu pressen. Die klassischen Charakters konnten aber nur Werte bis 255 - Dein Value, vom Typ intger, kann deutlich mehr. Was passiert bei größeren Werten? Das solltest Du berücksichtigen. In Zeiten von Unicode ist ein Zeichen nicht mehr unbedingt ein Byte lang. Du reservierst ein Byte an Speicher, schreibst aber u.U. deutlich mehr in diesen Bereich und verletzt damit umliegende Bereiche. Nur so auf die Schnelle. |
Re: Delphi WriteProcessMemory mit Offsets zum Pointer
der code von nuclear läuft schonmal!
aber eine frage habe ich trotzdem noch: kann ich diese funktion genauso übernehmen, bloß mit readprocessmemory? für die, die nicht genau wissen, was ich meine hier mal ein bild: http://1337files.13.funpic.de/ce.jpg der pointer ist hier:00903804 offsets:+20+450 pointet zur adresse 053080c0 den wert, der dann in dieser adresse ist, möchte ich auslesen! mfg infy |
Re: Delphi WriteProcessMemory mit Offsets zum Pointer
Zitat:
|
Re: Delphi WriteProcessMemory mit Offsets zum Pointer
du musst den Quelltext verstehen! Dann weißt du auch ob es mit ReadProcessMemory funktioniert. Es macht absolut keinen Sinn das du Quelltext verwendest ohne zu wissen was da genau passiert. Dabei lernst du rein gar nichts. Nur wenn du den Quelltext auch verstehst kann am Ende was sinnvolles dabei raus kommen.
|
Re: Delphi WriteProcessMemory mit Offsets zum Pointer
hast recht, das wars also ersmal bis hier, den rest krieg ich schon irgendwie hin!
danke für eure hilfe mfg infy |
Re: Delphi WriteProcessMemory mit Offsets zum Pointer
Zitat:
bei meinem problem zeigt der pointer $00903804 mit dem offset $20 auf die adresse 0320ADD8(siehe bild) http://1337files.13.funpic.de/ce.jpg was ich brauche, wäre also eine funktion in delphi, die das mit den pointern geregelt kriegt. zum vergleich, in autoit sah die funktion so aus:
Delphi-Quellcode:
ist also doch nicht so leicht, wie ich dachte! bitte um hilfe, mfg infy
Func _MemoryPointerRead ($iv_Address, $ah_Handle, $av_Offset, $sv_Type = 'dword')
If IsArray($av_Offset) Then If IsArray($ah_Handle) Then Local $iv_PointerCount = UBound($av_Offset) - 1 Else SetError(2) Return 0 EndIf Else SetError(1) Return 0 EndIf Local $iv_Data[2], $i Local $v_Buffer = DllStructCreate('dword') For $i = 0 to $iv_PointerCount If $i = $iv_PointerCount Then $v_Buffer = DllStructCreate($sv_Type) If @Error Then SetError(@Error + 2) Return 0 EndIf $iv_Address = '0x' & hex($iv_Data[1] + $av_Offset[$i]) DllCall($ah_Handle[0], 'int', 'ReadProcessMemory', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer), 'int', '') If @Error Then SetError(7) Return 0 EndIf $iv_Data[1] = DllStructGetData($v_Buffer, 1) ElseIf $i = 0 Then DllCall($ah_Handle[0], 'int', 'ReadProcessMemory', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer), 'int', '') If @Error Then SetError(7) Return 0 EndIf $iv_Data[1] = DllStructGetData($v_Buffer, 1) Else $iv_Address = '0x' & hex($iv_Data[1] + $av_Offset[$i]) DllCall($ah_Handle[0], 'int', 'ReadProcessMemory', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer), 'int', '') If @Error Then SetError(7) Return 0 EndIf $iv_Data[1] = DllStructGetData($v_Buffer, 1) EndIf Next $iv_Data[0] = $iv_Address Return $iv_Data EndFunc |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz