Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Betriebssysteme (https://www.delphipraxis.net/27-betriebssysteme/)
-   -   Adresse in Speicher, welche Datei (https://www.delphipraxis.net/112196-adresse-speicher-welche-datei.html)

_frank_ 16. Apr 2008 16:55


Adresse in Speicher, welche Datei
 
Moin,
ich hab mal mit dem Hxd rumgespielt und im Explorer-Prozess nach dem Startbutton-Text gesucht ;)
innerhalb vom explorer-Prozess ist der Text (bei mir) an Adresse $53ADC0. Kurz zuvor taucht der String Shell_TrayWnd auf. diesen hab ich versucht in der explorer.exe zu finden, erfolglos (Start taucht ja dutzende male auf). $1000 der Explorer.exe ist an $1001C00 im Prozess-Speicher.

Mich wundert auch, warum ich den Text im Hxd nicht ändern kann, andere Stellen des Prozesses aber schon...

laut ProzessExporer ist an dieser Speicher-Adresse keine Dll/Handle geladen. Hinweise auf einen Packer/Crypter hab ich nicht gefunden.

Klar, der Startbutton-Text ist nur eine Spielerei, aber das Wissen hilft evtl. bei Fehlern (AVs), wo man teilweise nur die Speicheradresse hat.

Wäre cool, wenn jemand mehr über die Prozess-peicher-Aufteilung weis :)

Gruß Frank

Nuclear-Ping 16. Apr 2008 17:32

Re: Adresse in Speicher, welche Datei
 
Schonmal daran gedacht, dass der Start-Button vielleicht ein Bild ist? ;)

Wenn du nur Speicheradressen von AVs hast, wirst du selbst mit Wissen über Prozessspeicher damit nicht viel anfangen können, da diese bei jedem Programmdurchlauf imho unterschiedlich sein können, je nachdem wo das Programm halt grad im Speicher landet.
Sinnvoll ist das nur, wenn du "Lesen/Schreiben von Adresse 00000000" hast, denn das deutet darauf hin, dass ein Objekt nicht initialisiert wurde.

Wenn du genauere Fehlerreportings willst, nutze entweder MadExcept, JEDI Exception Dialog, etc.

_frank_ 16. Apr 2008 17:38

Re: Adresse in Speicher, welche Datei
 
der Startbutton ist ein normaler button mit normalem Text, denn man kann den Text per Findwindow...SetWindowText setzen ;)

naja, wenn sich windows nicht gerade mit nem Bluescreen verabschiedet, kann man den prozes noch z.b. mit dem ProzessExplorer anschauen und im Falle einer DLL herausfinden, welche Dll das ist. halt nur solange der Prozess noch aktiv ist (die Meldung nicht bestätigen...). So hab ich mal herausgefunden, welches Plugin mir Miranda crasht ;)

Das mit dem nil-Pointer ist klar :)

Gruß Frank

Nuclear-Ping 16. Apr 2008 17:44

Re: Adresse in Speicher, welche Datei
 
Naja, mein Startbutton ist zB rund und hat 'n Bild drin (XP mit Vista-Inspirat), da ist kein Text mit "Start". :mrgreen:

Aber für Endanwender bringt das nix, wenn da ne AV nur mit 'ner Adresse kommt. Das kannst du bei dir nicht mehr reproduzieren.

Worum gehts eigentlich nochmal genau? :D

_frank_ 16. Apr 2008 17:53

Re: Adresse in Speicher, welche Datei
 
mich interessiert einfach, wie ich z.b. die Datei/Adresse für solche Texte herausbekomme. Der Startbutton ist nur ein Beispiel. Ich kann ja mit der findwindow-Methode den Text in etwas einzigartiges ändern und diesen Text im Speicher suchen.
Die Sache mit der Zugriffsverletzung war nur ein Beispiel, was ich in den meisten Fällen schon nachvollziehen kann (mittels PE und DllExp), wobei mich aber die programmiertechnische umsetzung auch interessieren würde, um z.b. ein Programm schreiben zu können, welches man den Prozess und die Adresse übergeben kann und es berechnet, in welchem modul+Fileoffset der Fehler/Text steht. Die Prozedur über PE und dllexp ist halt ziemlich aufwendig.

Gruß Frank

Nuclear-Ping 16. Apr 2008 18:00

Re: Adresse in Speicher, welche Datei
 
Hast du schonmal nach "S#0t#0a#0r#0t#0" gesucht?

_frank_ 16. Apr 2008 18:12

Re: Adresse in Speicher, welche Datei
 
klar, unicode, mitm hxd...wies auch im Prozessspeicher drinsteht

Gruß Frank

Neotracer64 16. Apr 2008 19:04

Re: Adresse in Speicher, welche Datei
 
Zitat:

Mich wundert auch, warum ich den Text im Hxd nicht ändern kann, andere Stellen des Prozesses aber schon...
Die Speicherseite ist möglicherweise schreibgeschützt.
Probiere es mal mit:

http://www.memoryhacking.com/

OldGrumpy 16. Apr 2008 20:55

Re: Adresse in Speicher, welche Datei
 
Zitat:

Zitat von _frank_
wobei mich aber die programmiertechnische umsetzung auch interessieren würde, um z.b. ein Programm schreiben zu können, welches man den Prozess und die Adresse übergeben kann und es berechnet, in welchem modul+Fileoffset der Fehler/Text steht. Die Prozedur über PE und dllexp ist halt ziemlich aufwendig.

Das funktioniert auch nur wenn keine Laufzeitpacker oder sonstige Sperenzchen zum Einsatz kommen. Bei gepackten Dateien gibt es keinen passenden Fileoffset.

Ansonsten funktioniert das relativ simpel... Zuerstmal brauchst Du ein Handle auf den Zielprocess. Dann kannst Du Dir mittels EnumProcessModules aus der psapi.dll eine Liste der Module im Prozess holen. Mittels GetModuleFileNameEx bekommst Du dann für jedes der Module aus der Liste den kompletten Pfad, und der Handlewert ist praktischerweise identisch mit der Adresse des Moduls im Adressraum des Zielprozesses. Offset ist dann auch relativ einfach zu berechnen, dazu müsste man aber genaugenommen noch dessen PE-Header parsen um zu sehen wie die Sections verteilt sind. Ausserdem kann dynamisch allozierter Speicher ja eigentlich überall sonst wo noch rumliegen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz