AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

WriteProcessMemory/dealloc fragen

Ein Thema von k4ni · begonnen am 30. Dez 2007 · letzter Beitrag vom 31. Dez 2007
Antwort Antwort
Seite 1 von 2  1 2      
k4ni

Registriert seit: 17. Jul 2007
Ort: Ulm
258 Beiträge
 
Delphi 7 Enterprise
 
#1

WriteProcessMemory/dealloc fragen

  Alt 30. Dez 2007, 21:54
Hey leute,

also ich arbeite seit vorgestern an einem trainer.
Hier erstmal der code worum es sich handelt damit ihr es besser versteht

Delphi-Quellcode:
if GMZoritaVAC.Checked = true
then
begin
// Allocating for CSEAX X
  lulz := VirtualAllocEx(HandleWindow, nil, 128, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE);
// Writing on allocated memory CSEAX X
buf := integer(lulz);
ShowMessage(IntToStr(buf));
  WriteProcessMemory(HandleWindow, lulz, @ZoritaAllc1, 5, Write);
  WriteProcessMemory(HandleWindow, ptr(integer(lulz)+5), @ZoritaAllc2, 1, Write);
  WriteProcessMemory(HandleWindow, ptr(integer(lulz)+6), @ZoritaAllc3, 6, Write);
  WriteProcessMemory(HandleWindow, ptr(integer(lulz)+12), @ZoritaAllc4, 1, Write);
  WriteProcessMemory(HandleWindow, ptr(integer(lulz)+13), @ZoritaAllc5, 6, Write);
  WriteProcessMemory(HandleWindow, ptr(integer(lulz)+19), @ZoritaAllc6, 2, Write);
  WriteProcessMemory(HandleWindow, ptr(integer(lulz)+21), @ZoritaAllc7, 3, Write);
  WriteProcessMemory(HandleWindow, ptr(integer(lulz)+24), @ZoritaAllc8, 1, Write);
// Writing the call
  WriteProcessMemory(HandleWindow, ptr($006DF140), [free], 2, Write);
  CloseHandle(HandleWindow);
end
else
  begin
    VirtualFreeEx(HandleWindow, lulz, 0, MEM_RELEASE);
    CloseHandle(HandleWindow);
  end;
Jetzt hab ich folgende probleme:
1. Das allocaten mit VirtualAllocEx allocated zu viel, ich will nur 128 bytes aber der macht mir 4kb oder so
2. Das deallocate (VirtualFreeEx) funktionier nicht. Aber ich kann keinen fehler sehen
3. Am ende bei "Writing the call" da muss ich auf die addresse $006DF140 schreiben "call "+Die eben allocated memory. Doch wie?

danke im vorraus..
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: WriteProcessMemory/dealloc fragen

  Alt 30. Dez 2007, 22:03
Der erste Punkt lässt sich nicht ändern. Die Virtual-Funktion arbeiten immer mit ganzen Pages, die bei Windows üblicherweise 4 Kilobytes groß sind.
Für den zweiten Punkt solltest du dir noch mal dein Programm anschauen: Du rufst nämlich VirtualFreeEx genau dann auf, wenn du VirtualAllocEx nicht aufgerufen hast. Was soll das?
Und für das dritte solltest du dir nochmal überlegen, was du eigentlich willst. Das kann ich deinem Text nämlich nicht entnehmen. Und du musst dir anschauen, wie Call codiert wird und wie dabei die Adresse, an die gesprungen werden soll, geschrieben wird.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
k4ni

Registriert seit: 17. Jul 2007
Ort: Ulm
258 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: WriteProcessMemory/dealloc fragen

  Alt 30. Dez 2007, 22:13
Danke für die schnelle antwort.

Also zum 2. punkt: Also das ist ne checkbox der die das macht, man mus ja die checkbox ersteinmal anticken bevor man sie wieder wegticken kann. Also beim ersten mal anticken = allocate und des ganze zeug. dann kann man ja erst den hacken wegmachen. d.H wenn man den hacken wegmacht hat dar ja schon allocated. Also tut es dann deallocaten.

zum 3. punkt
Der allocated die memory ja immer wo anderst, also kann ich ja keinen festen array bestimmen oder?
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: WriteProcessMemory/dealloc fragen

  Alt 30. Dez 2007, 22:15
Keinen festen was? Du hast doch die Adresse, das ist doch gerade lulz. Sorry, aber ein bisschen solltest du dir auch anschauen, was die Funktionen zurückgeben.

Ist lulz eigentlich global oder lokal?
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
k4ni

Registriert seit: 17. Jul 2007
Ort: Ulm
258 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: WriteProcessMemory/dealloc fragen

  Alt 30. Dez 2007, 22:26
Jap, nur ich weis nicht wie ich das machen soll
Code:
buf := 'call 'ptr(lulz);
  WriteProcessMemory(HandleWindow, ptr($006DF140), buf, 2, Write);
Geht natürlich nicht. Ich müsste den code fuer "call" holen. aber auch dann wüsste ich nicht wie.
Hilfe bitte.

PS: irgend ne idee wegen dem dealloc dings?

lulz = lokal
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: WriteProcessMemory/dealloc fragen

  Alt 31. Dez 2007, 11:41
Wenn lulz lokal ist, wie soll das dann funktionieren? Wenn der Haken in der Checkbox entfernt wird, wird das Ereignis aufgerufen, und in lokalen Variablen steht nunmal am Anfang Müll! Also global machen, damit der Pointer erhalten wird.

Die Frage mit den Opcodes wird hier gerade geklärt.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
31. Dez 2007, 12:17
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Windows API / MS.NET Framework API" verschoben.
Delphi-Frage
k4ni

Registriert seit: 17. Jul 2007
Ort: Ulm
258 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: WriteProcessMemory/dealloc fragen

  Alt 31. Dez 2007, 17:39
Also das mit den opcodes versteh ich schon, ich mach das immer mit arrays.
also z.B:
Globaler wert:
 ZoritaAllc1: Array [0..15] of Byte =($A1, $98, $C8, $80, $00, $50, $8B, $80, $40, $06, $00, $00, $58, $8B, $80, $48); Und reinschreiben:
  WriteProcessMemory(HandleWindow, lulz, @ZoritaAllc1, 5, Write); Aber der allocated die memory ja nicht immer auf der gleichen addresse also kann ich ja nicht das hier machen:

globaler wert (der array):
 ZoritaOn1: Array [0..15] of Byte =($E8, $22, $34, $00, $00, $59, $85, $C0, $75, $08, $6A, $1C, $E8, $C3, $00, $00); das wäre dann z.B "call 007493c6" (die addresse im call ist zufalls-auswahl) aber ich möchte einen array erstellen in dem "call lulz" also damit der den call auf lulz also auf die eben ge allocatedte memory macht.
Wie soll ich das machen?
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: WriteProcessMemory/dealloc fragen

  Alt 31. Dez 2007, 17:42
Ich verstehe dein Problem nicht. Du schreibst den Opcode für Call, dann schreibst du die Adresse. Fertig. Und du solltest dich nicht auf Arrays festlegen. Du brauchst irgendeinen Puffer. Du kannst auch den Inhalt einer Integer-Variablen in den fremden Prozess schreiben.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
k4ni

Registriert seit: 17. Jul 2007
Ort: Ulm
258 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: WriteProcessMemory/dealloc fragen

  Alt 31. Dez 2007, 17:58
Also ich zeig dir mal den AA script des codes:
Code:
[Enable]
alloc(CSX,128)
alloc(CSY,128)
alloc(VACRange,4)
registerSymbol(VACRange)

VACRange:
dd 1E

CSX:
mov eax, [80c898]
push eax
mov eax, [eax+640]
pop eax
mov eax, [eax+648]
mov [ebx],eax
mov edi,[ebp+10]
ret

CSY:
mov eax, [80c898]
push eax
mov eax, [eax+644]
add eax,[VACRange]
pop eax
mov eax, [eax+64C]
mov [edi],eax
mov ebx,[ebp+14]
ret

006DF140:
call CSX

006DF1A5:
call CSY

[Disable]
006DF140:
mov [ebx],eax
mov edi,[ebp+10]

006DF1A5:
mov [edi],eax
mov ebx,[ebp+14]

dealloc(CSX)
dealloc(CSY)
dealloc(VACRange)
unregisterSymbol(VACRange)
Wie du siehst allocated er erst die memory (name=CSX) dann schreibt er darauf und dann bei der addresse $006DF140 macht er das
Code:
006DF140:
call CSX
Ich hoffe jetzt hast du es verstanden
doch wie kann ich genau das in delphi machen?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:08 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