AGB  ·  Datenschutz  ·  Impressum  







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

AV beim schreiben in DLL-Adressraum

Ein Thema von SirThornberry · begonnen am 4. Jul 2006 · letzter Beitrag vom 4. Jul 2006
Antwort Antwort
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#1

AV beim schreiben in DLL-Adressraum

  Alt 4. Jul 2006, 10:05
Hallo,

ich lade mit LoadLibrary eine DLL, hole mir mit GetProcAddr die Adresse einer Funktion und will dort was hinschreiben. Leider kommt dabei eine AV. Ich dachte innerhalb meines Prozesses darf ich den Speicher umschreiben wie ich will, oder lieg ich da falsch?

Hier mein TestQuelltext
Delphi-Quellcode:
var lLib: Cardinal;
    lAddr: PChar;
begin
  lLib := LoadLibrary('user32.dll');
  if lLib <> 0 then
  begin
    lAddr := GetProcAddress(lLib, 'MessageBoxA');
    lAddr[0] := '5';
Das die '5' unsinnig ist weiß ich, mir ging es erstmal darum überhaupt dort hin schreiben zu können.

Warum geht das nicht?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: AV beim schreiben in DLL-Adressraum

  Alt 4. Jul 2006, 10:08
Die Prozessadresse ist in einem als Ausführbar gekennzeichneten Bereich auf den standardmäßig keine Schreibrechge vorhanden sind. Um dorthin zuschreiben (z.B. Hooking) mußt du die Rechte der Speicherpage ändern. In der Jedi gibt es Klassen (TJclPeMapImgHooks) die sowas können. Diesen Code kannst Du dir mal anschauen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: AV beim schreiben in DLL-Adressraum

  Alt 4. Jul 2006, 10:09
thx, bin bisher davon ausgegangen das ich dort schreibrechte hab weil innerhalb des eigenen Exe-Codes das auch ging (aber da wird ja auch nix mit LoadLibrary geladen)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#4

Re: AV beim schreiben in DLL-Adressraum

  Alt 4. Jul 2006, 10:16
Und falls du was gegen die Jedis hast (es soll solche Menschen geben), kannst du auch MSDN-Library durchsuchenVirtualProtect nutzen (Erst mit PAGE_WRITECOPY und dann mit PAGE_EXECUTE)
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: AV beim schreiben in DLL-Adressraum

  Alt 4. Jul 2006, 10:20
Die Klasse TJclPeMapImgHooks nutzt intern diese WinAPI-Funktion. Was will sie auch anders machen?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: AV beim schreiben in DLL-Adressraum

  Alt 4. Jul 2006, 10:34
Zitat von chaosben:
Und falls du was gegen die Jedis hast (es soll solche Menschen geben), kannst du auch MSDN-Library durchsuchenVirtualProtect nutzen (Erst mit PAGE_WRITECOPY und dann mit PAGE_EXECUTE)
Ich hab jetzt meinen eigenen Prozess mit OpenProcess geöffnet. Ich kam nicht drauf wie die andere Funktion heißt.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#7

Re: AV beim schreiben in DLL-Adressraum

  Alt 4. Jul 2006, 12:40
Zitat von Bernhard Geyer:
Die Klasse TJclPeMapImgHooks nutzt intern diese WinAPI-Funktion. Was will sie auch anders machen?
Ja, das war mir schon klar. Mir sind nur leider schon Programmierer über den Weg gelaufem, die auf keinen Fall eine Jedi-Unit einbinden wollten (wenngleich ich SirThornberry nicht für einen solchen halte). Für diesen Fall war mein Kommentar gedacht.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: AV beim schreiben in DLL-Adressraum

  Alt 4. Jul 2006, 12:51
@chaosben: Deine Bedenken waren richtig. Ich halte es für übertrieben für eine solch kleine Sache eine ganze Unit einzubinden bzw. ein so riesiges Package zu installieren (zumal es nur spielerei ist und ich es nicht für was wichtiges benötige).
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:29 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