AGB  ·  Datenschutz  ·  Impressum  







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

In den Speicher schreiben

Ein Thema von Reddog · begonnen am 5. Okt 2004 · letzter Beitrag vom 9. Okt 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Reddog
Reddog

Registriert seit: 18. Jul 2004
Ort: Würzburg
56 Beiträge
 
#1

In den Speicher schreiben

  Alt 5. Okt 2004, 00:49
Hallo,

kann mir jemand sagen, mit welcher Methode man am besten in den Speicher des eigenen Programms schreibt?
Also bei fremden habe ich immer WriteProcessMemory verwendet. Kann man das auch in dem eigentlichen Programm verwenden? Und was gibt man dann als Process-Handle an (vielleicht HInstance?)?

Also Danke für jegliche Hilfe,
Reddog.
All prime numbers are odd with the exception of two, which is an odd prime
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: In den Speicher schreiben

  Alt 5. Okt 2004, 01:52
Was willst du denn wohin schreiben, und um was zu bewirken?
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von Reddog
Reddog

Registriert seit: 18. Jul 2004
Ort: Würzburg
56 Beiträge
 
#3

Re: In den Speicher schreiben

  Alt 5. Okt 2004, 02:47
War eher so generell gefragt.

Zum Beispiel, will ich mein Programm im Speicher verändern (was man natürlich normal nicht sollte ). Oder einfach den Wert bei einer bestimmten Addresse ändern. Man könnte ja zum Beispiel Move() benutzen, oder? Ich wollte nur mal fragen, welche Methoden gut und sicher sind.

Aber eigentlich war das eine ziemlich dumme Frage, gebe ich zu.

Reddog.
All prime numbers are odd with the exception of two, which is an odd prime
  Mit Zitat antworten Zitat
MartinA

Registriert seit: 27. Aug 2003
13 Beiträge
 
#4

Re: In den Speicher schreiben

  Alt 6. Okt 2004, 11:27
Zitat von Reddog:
War eher so generell gefragt.

Zum Beispiel, will ich mein Programm im Speicher verändern (was man natürlich normal nicht sollte ). Oder einfach den Wert bei einer bestimmten Addresse ändern. Man könnte ja zum Beispiel Move() benutzen, oder? Ich wollte nur mal fragen, welche Methoden gut und sicher sind.

Aber eigentlich war das eine ziemlich dumme Frage, gebe ich zu.

Reddog.
So dumm find ich die Frage garnicht.
In einigen meiner Programme benötige ich diese Funktionalität auch und arbeite dann meist mit folgenden Procdeduren:

Code:
procedure WriteByte(Addr: DWord; Data: Byte); assembler
asm
  pushad
  mov bl,Data
  mov eax,Addr
  mov [eax],bl
  popad
end;

procedure WriteWord(Addr: DWord; Data: Word); assembler
asm
  pushad
  mov bx,Data
  mov eax,Addr
  mov [eax],bx
  popad
end;

procedure WriteDWord(Addr: DWord; Data: DWord); assembler
asm
  pushad
  mov ebx,Data
  mov eax,Addr
  mov [eax],ebx
  popad
end;
Gruß
Martin
ALT +F4
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: In den Speicher schreiben

  Alt 6. Okt 2004, 11:35
Kapier ich nicht. Sinnvoll ändern kan nman doch sowie so nur Bytes von Daten und über die habe ich doch sowieso in meinem Programm die volle Kontrolle.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
MartinA

Registriert seit: 27. Aug 2003
13 Beiträge
 
#6

Re: In den Speicher schreiben

  Alt 6. Okt 2004, 12:50
Zitat von Luckie:
Kapier ich nicht. Sinnvoll ändern kan nman doch sowie so nur Bytes von Daten und über die habe ich doch sowieso in meinem Programm die volle Kontrolle.
Ich gebe Dir vollkommen recht, wenn man von dem Standpunkt ausgeht, das es sich um Variablen handelt die man Programatisch verändern kann.

z.B
Code:
 A := 10;
A soll nun 11 werden.
 A := 11;
Ist allemal sinnvoller als
 WriteByte($woauchimmer,$B);
Wenn ich jedoch dynamisch den Code erweitern ohne jeweils alles neu zu Compilieren bzw. neu Auszuliefern hat man kaum eine andere Möglichkeit.

Pseudocode:
Code:
 dbgMakeJump(hxInMSGProcBase, DWord(@InMsgProc) + 2, 0);
 dbgMakeJump(DWord(@InMsgProc), hxInMSGProcBase-5, 0);
   :
   :
procedure dbgMakeJump(hxZielAddr, hxJumpAddr, NOPS: DWord);
Var
 Buffer : Array[1..5] of Byte;
 Data   : DWord;
 X      : Byte;
begin
  Data:= hxZielAddr - (hxJumpAddr + 5);
  Move(Data, Buffer[2], 4);
  Buffer[1]:= $E9;
  WriteSecureBuffer(hxJumpAddr, @Buffer, 5);
  For X:= 1 to NOPS do WriteSecureByte(hxJumpAddr + 4 + X, $90);
end;
Vorstehendender Code befindet sich in einer Debug-DLL die nur geladen wird wenn Sie da ist. Ist dem So wird eine bestimmte Routine der Exe auf eine Funktion der DLL umgebogen. Im Prinzip kommt das einen "Funktionshook" recht nahe.
Eine andere Einsatzmöglichkeit währe es auch z.B. einen Durchlaufszähler auf ähnliche Weise zu verändern. Nochmal deutlich hervorheben, will ich, daß die Änderungen aus der DLL kommen und im Hauptprogramm vorgenommen werden. Die Änderung im Hauptprogramm selbst auf diese weise ist, wie bereits richtig festgestellt wurde, relativ sinnlos.

Gruß
Martin
ALT +F4
  Mit Zitat antworten Zitat
Benutzerbild von Reddog
Reddog

Registriert seit: 18. Jul 2004
Ort: Würzburg
56 Beiträge
 
#7

Re: In den Speicher schreiben

  Alt 7. Okt 2004, 14:59
@MartinA: Danke für die Antwort und die Funktionen. Ich probier's mal aus. Ich wollte ja ursprünglich auch einen Funktionshook machen(zu keinm höheren Zweck, nur aus Neugier). Dazu fand ich auch Beispiele. Aber die bezogen sich auf function-hooks für andere Anwendungen, und haben mit WriteProcessMemory gearbeitet. Da ich aber einen für mein eigenes Programm machen wollte, habe ich mir eben die Frage gestellt, mit was schreib ich in den Speicher.

Reddog.
All prime numbers are odd with the exception of two, which is an odd prime
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#8

Re: In den Speicher schreiben

  Alt 7. Okt 2004, 15:03
Umleiten von Funktionsaufrufen
PS: jetzt passt der Link
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#9

Re: In den Speicher schreiben

  Alt 7. Okt 2004, 15:04
Zitat:
Umleiten von Funktionsaufrufen

Zitat:
Fehler: 404 - Datei nicht gefunden

Die Seite, die Du aufrufen wolltest, ist auf diesem Server nicht vorhanden.
Du kannst das Forum über einen der Links im Seitenkopf ansteuern.
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Reddog
Reddog

Registriert seit: 18. Jul 2004
Ort: Würzburg
56 Beiträge
 
#10

Re: In den Speicher schreiben

  Alt 9. Okt 2004, 01:10
Danke für das Beispiel.

Eigentlich wollte ich Nichts bestimmtes durch's Umleiten der Fuktionen erreichen. Ich wollte nur mein Verständnis für solche Sachen etwas erweitern.

Reddog.
All prime numbers are odd with the exception of two, which is an odd prime
  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 12:05 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