virtuellen speicher auslesen und so geschichten...

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
rider
User
Beiträge: 2
Registriert: Freitag 2. September 2005, 16:32

Dienstag 28. Februar 2006, 13:04

hallo zusammen!
bräuchte hilfe bei nem kleinen proggie.
es soll folgendes machen:

1.) an nen process attachen
2.) im kompletten vitual memory von dem process nach bestimmten bytes suchen (auch geladene system dlls und program dlls)
z.b. ich füttere das prog mit "\xe8\x00\x10\x00\x00" (far call (\xe8) mit entfernung 1000h bytes) und er spuckt mir aus an welchen adressen sich die bytes befinden
3.) wenn der EIP ne best. stelle im speicher anspringt mir ne meldung ausgeben. (so ne art breakpoint)
also wenn er mir z.b. die strcpy funktion in msvcrt.dll aufruft soll mir das programm sagen. acessing strcpy function (adresse).
4.) wenn er an so nem breakpoint ist soll er mir den inhalt eines bestimmten registers ausgeben.
zb. accessing strcpy function @ address 7c102030 (bsp) . edi is set to 11223344. und am besten noch nen string auf den edi pointet... =)


ich weiß, dass man sowas am besten mit c++ angeht, aber ich bin leider net sooo der c++-fan ;) und bisher bin ich an funktionalität noch nie durch python eingeschränkt gewesen. von daher bin ich mir eigtl sicher dass sowas doch machbar sein muss :)

ihr müsst mir hier keine komplettlösung posten, es würde allein schon reichen n paar ideen zu posten oder mir n modul oder sowas nennen wo ich mehr infos über das ganze finde... per google bin ich nicht wirklich schlauer geworden :/

danke schonmal,
rider
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Dienstag 28. Februar 2006, 13:42

Dafür gibts eigentlich Debugger, und sogar im allermeisten Fall sehr sinnvolle und gute die offen sind, wie zum Beispiel DDD...

Einen eigenen Debugger in Python zu implementieren halte ich persönlich für schwachsinnig (wobei die Betonung auf eigenen und nicht auf Python liegt), ganz davon abgesehen sind die entsprechenden Windows-Schnittstellen nichts was ich auf anhieb wüsste und wo Du Dich mal in der MSDN ein bisschen schlaulesen solltest.

Um einen Zeiger in irgendeine Richtung zu verteilen: Du willst wahrscheinlich ctypes benutzen und Dich damit an die entsprechenden Systembibliotheken binden die Debugging-Funktionalität zur Verfügung stellen. Nur, ob das Projekt so "klein" ist wie Du es jetzt hier beschreibst: das bezeifele ich arg... Du bist definitiv besser aufgehoben wenn Du einen bereits bestehenden Debugger an Deine Zwecke anpasst (da die meißten selbst programmierbar sind über eine Skriptsprache).
--- Heiko.
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Dienstag 28. Februar 2006, 15:31

Ich würde dir auch raten, einen fertigen Debugger zu verwenden.

Python ist für solche Dinge einfach nicht entwickelt worden; was nicht heisst, das es nicht geht, aber der Aufwand ist zu hoch; in der Zeit kannst du dir schon fast die entsprechenden C++-Kenntnisse einverleiben.
rider
User
Beiträge: 2
Registriert: Freitag 2. September 2005, 16:32

Dienstag 28. Februar 2006, 15:38

hi!
danke erstmal! hmm da hatte ich wohl den aufwand für sowas unterschätzt. ich dachte vielleicht gibts da ja ein python-modul welches für sowas nützlich ist... aber der tipp mit den skriptsprachen für debugger is glaub ich gut. ich denk mal das is der geschickteste weg um an c++ vorbeizukommen :D
danke euch ;)
rider
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Dienstag 28. Februar 2006, 22:59

Python ist für solche Dinge einfach nicht entwickelt worden
Kleiner Kommentar dazu: C++ ist auch nicht für solche Dinge entwickelt worden. Debugging ist inhärent eine haarige und schwierige Sache, unabhängig von der Sprache (wobei ich mir vorstellen könnte dass es in systemnäheren Sprachen noch schwieriger ist aufgrund des fehlenden Speichermanagements für die Objekte des Debuggers selbst). Deswegen gibts auch normalerweise vom Betriebssystem Bibliotheken die Debugger benutzen, die eben dieses vereinfachen, weil sich bereits jemand Gedanken darum gemacht hat wie man vernünftig auf einem Mehrprozess-Betriebssystem in einen anderen eingreifen kann ohne den eigenen Prozess zu gefährden. Bei Unix ist das zum Beispiel die Geschichten um den ptrace-syscall, bei Windows gibts entsprechende Libs die ähnliches machen.

Einen Debugger schreiben ist nicht mal an der Uni eine Semesterarbeit; im Gegensatz dazu einen Compiler schreiben zum Beispiel sehr wohl.
--- Heiko.
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mittwoch 1. März 2006, 10:33

Irgendwie erinnert mich das an alte "Trainer" für DOS Spiele... Diese haben sich oft in den Hintergrund eingeschmuggelt und suchten nach Spielständen um diese zu manipulieren :)

Das ist wahrscheinlich generell keine triviale Angelegenheit, gerade unter Windows/Linux die ja die Speicherbereiche IMHO abschotten/aufteilen...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten