![]() |
Speicher ändern
Ich denke zwar, dass die lösung schon im forum steht, ich habe es aber nicht gefunden.
also ich habe eine speicheradresse (Hex: 26A1FF1, Dez: 40509425), aber wie kann ich die jetzt ändern. wie kann man das z.B. WriteProcessMemory machen, oder geht das auch anders??? |
Re: Speicher ändern
Adressen sind doch nur Schall und Rauch. Denn deren Gültigkeit hängt stark von deren Kontext (auch Prozess genannt) ab.
Und ja, mit der genannten Funktion geht so einiges. Aber das ist alles wundervoll bei MSDN oder im Platform SDK dokumentiert. |
Re: Speicher ändern
Das du WriteProcessMemory nicht im Forum findest halte ich für eine Lüge ;)
Das Problem an den Speicheradressen ist vielseitig. Es kann sein das die Adressen durch DMA geschützt sind. Das bedeutet dass sich die Adresse bei jedem Neustart des Prozesses dynamisch neu zusammensetzt. Durch einen Debugger wie z.B. SoftIce lässt sich das bei manchen Prozessen allerdings noch hinbiegen. Wenn kein DMA benutzt wird, wird die Adresse auf deinem PC immer gleich bleiben. Es kann aber gut sein dass die Adresse im Speicher einer DLL Datei liegt. Der Speicher ein DLL Datei wird aber über eine API Funktion reserviert (siehe Virtualalloc), und wird deshalb von PC zu PC verschieden liegen. Die Materie in die duch dich einarbeiten willst ist extrem vielschichtig und auch relativ kompliziert. Meistens sind umfangreiche Assemblerkenntnisse Grundvoraussetzung. |
Re: Speicher ändern
Zitat:
Zitat:
Zitat:
Und so kompliziert ist das garnicht, wenn man sich die abgegrenzten Prozesse irgendwie versinnbildlicht und immer daran denkt, daß jeder Prozess seinen eigenen Adressraum hat. |
Re: Speicher ändern
Seit 32 Bit Windows ist ein direkter Speicherzugriff auf den Adressraum eines anderen Prozess nicht mehr so einfach möglich. Auch mit
![]() ![]() |
Re: Speicher ändern
Luckie meint (Hervorhebung Mephisto): Auch mit ![]() |
Re: Speicher ändern
Das stimmt, nur ist die Frage, welche Prozesse diese Rechte bekommen können. Ich befürchte das sind nur Prozesse unter dem Administrator Konto mit Debuggrechten.
|
Re: Speicher ändern
Zitat:
Auch über VirtualAllocEx() heißt es: Im Platform SDK steht: You must have PROCESS_VM_OPERATION access to the process. If you do not, the function fails. Wo war also der Bezug? Ich stehe wohl aktuell auf der Leitung ... |
Re: Speicher ändern
Folgendes:
Wenn man mit VirtualAllocEx sich Speicher im fremden Prozess alloziiert, dann sind diese Rechte nicht nötig, um in diesen Speicherbercih mit WrteProcessMemory zu schreiben. Da es VirtualAllocEx aber nur unter NT basierenden Systemen gibt, ist unter Win9x ein Hack nötig. Und wenn man doch mit WriteProcessMemory wild in fremden Adressräumen rumschreiben könnte, dann würde ich vom Glauben abfallen. Ich hege immer noch die Hoffnung, dass nur ganz spezielle Prozesse die sich die nötigen Rechte (PROCESS_VM_WRITE und PROCESS_VM_OPERATION) beschaffen können. Ich dachte da an so was wie Dienste oder Treiber. Wobei mir Dienste schon wieder unheimlich wären. |
Re: Speicher ändern
Zitat:
Zitat:
Fuer alle diejenigen die jetzt schon wieder auf dumme gedanken kommen, einen Treiber/Dienst zu laden/installieren erfordert auch erst mal bestimmte rechte ;) |
Re: Speicher ändern
Zitat:
|
Re: Speicher ändern
Zitat:
Zitat:
Treiber sind übrigens keine Prozesse, alle laufen (ähnlich wie Dienste, welche unter services.exe laufen) im Kontext des Systemprozesses. Zitat:
Ich habe manche Zeit damit verloren; Denn ein vollkommner Widerspruch Bleibt gleich geheimnißvoll für Kluge wie für Thoren. Zitat:
|
Re: Speicher ändern
Zitat:
Delphi-Quellcode:
Ist aus meinen LuckieDIPS.
ListView := GetDesktopListView;
ProcessId := 0; GetWindowThreadProcessId(ListView, @ProcessId); Process := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE, False, ProcessId); if Process <> 0 then try // Lokalen und entfernten (im Zielprozess) Puffer anlegen Size := SizeOf(TLvItemBuffer); MemLocal := VirtualAlloc(nil, Size, MEM_COMMIT, PAGE_READWRITE); MemRemote := VirtualAllocEx(Process, nil, Size, MEM_COMMIT, PAGE_READWRITE); if Assigned(MemLocal) and Assigned(MemRemote) then try // Anzahl der Symbole ermitteln und in einer Schleife durchlaufen IconCount := SendMessage(ListView, LVM_GETITEMCOUNT, 0, 0); |
Re: Speicher ändern
Zitat:
Zitat:
|
Re: Speicher ändern
Zitat:
Ein Theil von jener Kraft, Die stets das Böse will, und stets das Gute schafft. Zitat:
Zitat:
|
Re: Speicher ändern
Zitat:
Zitat:
|
Re: Speicher ändern
Zitat:
|
Re: Speicher ändern
das wuerde jetzt zu stark vom thema abschweifen, ich erklaere es dir geren per PM (schreib mich an) oder in einem extra topic.
|
Re: Speicher ändern
1. streitet euch nicht oder wie ich es nennen soll( mahct das über pn's)
2. die adresse ändert sich nie und ist auf jedem pc gleich. 3 geht das jetzt oder nicht (anscheinend ja sachon, denn wie sollten den sonst trainer für spiele funktionieren (außer sie simulieren tasteneingaben)? |
Re: Speicher ändern
1. Das , dass weiter per pns gereglt wirde wurde oben schon gesagt.
2. Wenn du die Suche benutzten würdest hättest du schon lange etwas gefunden. 3. Sie wollten dir "nur" helfen... Mfg ReDoX |
Re: Speicher ändern
Zitat:
|
Re: Speicher ändern
Zitat:
Und ist so wunderlich, als wie am ersten Tag. Zitat:
Mal nicht 'nen Strich durch die Rechnung zieht Wenn da nur etwas Verständnis für das PE-Format, Speichermanagement, Prozesstrennung und Relokation wäre, würdest du soetwas wirres nicht behaupten. Zumindest eine interessante Beweisführung, wenn du behauptest, daß es so sei. Aber wie stellte schon unser lieber Freund Friedrich Nietzsche so trefflich fest: Behaupten ist sicherer als beweisen. Zitat:
@ReDoX: Danke! ;) Gehabt Euch wohl, |
Re: Speicher ändern
Hallo?
Geht das denn jetzt mit WriteProcessMemory, odwer nicht. ist doch mein problem, ob sich die adresse ändert oder nicht. :evil: :evil: :evil: :evil: :evil: |
Re: Speicher ändern
Zitat:
Zitat:
__________________________________________________ ______ Um nochmal die erste Seite zu rekapitulieren: Zitat:
Zitat:
|
Re: Speicher ändern
Aber auch mit DMA kann man noch ganz gut was mit machen....kommt halt drauf an , was du letztendlich vorhast.
Bei Spielen , die DMA verwenden ändert sich zwar immer die Adresse der Speicherorte wo z.b. die Energie , Munition etc gespeichert ist, allerdings gibt es immer eine feste Adresse wo die Funktion (z.b. die Munition zu verringern) aufgerufen wird. Dann wäre da noch die Möglichkeit der Codeinjection. Dazu musst du dann aber schon über recht gute Assemblerkenntnisse verfügen, allerdings kannst du damit dann eigentlich alles machen , was du willst. |
Re: Speicher ändern
Zitat:
Zurück zur Frage: Ja, es geht mit WriteProcessMemory. Bleibt nur die Frage, was das Problem darstellt, da die Dokumentation der API-Funktionen keine Hürde darstellen sollte. |
Re: Speicher ändern
Moin Jasper,
ja, geht mit WriteProcessMemory. Das absolute Minimum an erforderlichen Funktionen, dass Du Dir dazu anschauen solltest: ![]() ![]() Dringend zu empfehlen ist dann noch ![]() |
Re: Speicher ändern
Zitat:
Zumindest aber weiß ich, daß selbst DLLs und Treiber (eben PEs) reloziert werden, wenn dummerweise eine andere DLL exakt jenen Speicherbereich, welcher in der PE als "Empfehlung" drinsteht schon belegt ist. So gesehen ist meine Aussage (welche sich einzig auf die Tatsache bezieht, daß die Adresse im Speicher eben nicht auf 2 PCs zwangsläufig gleich sein muß) doch gerechtfertigt, oder? Allein bei der Behauptung, daß es auf allen PCs gleich wäre, nur weil er es vielleicht auf, sagen wir mal, einem halben dutzend PCs ausgetestet hat, wo es so war, rollen sich mir die Fußnägel auf. Wenn Mathematiker so beweisen würden, gäbe es wohl dank Millionen Verkehrstoter jährlich nur eine geringe Erdbevölkerung (die natürlich pro Jahr weniger abnimmt, da die "Aufschlagschance" :mrgreen: geringer ist). _________________________________________ Danke an perle, NicoDE und Christian Seehase - nur bei aufmerksamem Lesen und der Zuhandnahme der Dokumentation wäre dies schon beim Lesen der ersten Seite klargeworden. Oder? |
Re: Speicher ändern
Zitat:
Zitat:
|
Re: Speicher ändern
Zitat:
Zitat:
Zitat:
Selbstverständlich beschränkt sich diese Aussage hauptsächlich auf DLLs - aber wenn er nichts genaues sagt, können wir uns da gegenseitig mit konträren Mutmaßungen erschlagen. Mir ist das einfach zu affig, weshalb ich mich bis zu seiner Replik hier ausklinke. |
Re: Speicher ändern
ich denke mal er meint die Adresse innerhalb des Prozesstypischen Adressraumes. Um mal wieder ein einfaches BeiSPIEL zu nehmen, ist z.B. die Adresse der noch verbleibenden Zeit bei Minesweeper IMMER $100579C. Egal auf welchen Rechner (was dann wohl auch SMA genannt wird)
|
Re: Speicher ändern
Zitat:
|
Re: Speicher ändern
Zitat:
Zu Windows Minesweeper: Ich muss es ja wissen ... ist schliesslich meine Jugend-forscht arbeit ... :zwinker: ciao, Philipp |
Re: Speicher ändern
hokay (absichtlich mit h)
sry. ahb msdn auf der festplatte (gekauft). ich weiß, dass ich blöd bin und da hätte gucken können, aber ich hatte es im zusammenhang von visual studios und deshalb dachte ich, ich kann das für delphi nicht verwenden. |
Re: Speicher ändern
Moin Jasper,
um das PSDK akutell zu halten: ![]() Einige Dinge sind halt nicht nach Delphi übersetzt worden, so dass man das selber machen muss, aber das Meiste ist schon enthalten. Zu diesem Thema auf jeden Fall. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:09 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-2025 by Thomas Breitkreuz