Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Speicher ändern (https://www.delphipraxis.net/43017-speicher-aendern.html)

Luckie 28. Mär 2005 23:51

Re: Speicher ändern
 
Zitat:

Zitat von w3seek
Dazu braucht man erst einmal einen handle zu diesem fremden Prozess der die genau gleichen Rechte benoetigt wie WriteProcessMemory. Somit funktioniert auch das nicht wenn man die benoetigten Rechte nicht hat.

Darauf will ich hinaus, dass das hoffentlich eben nicht so einfach geht. ;)

Mephistopheles 28. Mär 2005 23:52

Re: Speicher ändern
 
Zitat:

Zitat von Luckie
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.

Was? Dann könnte man ja das windows-eigene Sicherungssystem umgehen. Denn VirtualAllocEx() benötigt nur eine Untermenge der Rechte die WriteProcessMemory() bräuchte. Du kannst ja mal gern versuchen bei VirtualAllocEx() als Flag (letzter Parameter) PAGE_READONLY anzugeben und danach mit WriteProcessMemory() dort hinein zu schreiben. Du hast nicht mehr Rechte! Probier's aus.

Zitat:

Zitat von Luckie
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.

Ähem ja. Mir war so als hätte ich das gesagt.
Treiber sind übrigens keine Prozesse, alle laufen (ähnlich wie Dienste, welche unter services.exe laufen) im Kontext des Systemprozesses.

Zitat:

Zitat von Luckie
Darauf will ich hinaus, dass das hoffentlich eben nicht so einfach geht. ;)

:gruebel: ... deine Aussage (siehe Zitat: "dann sind diese Rechte nicht nötig [...]") ist das genaue Gegenteil. Genau genommen widersprichst du dir seit deinem ersten Beitrag in diesem Thread mehrfach. :|

Ich habe manche Zeit damit verloren;
Denn ein vollkommner Widerspruch
Bleibt gleich geheimnißvoll für Kluge wie für Thoren.


Zitat:

Zitat von w3seek
Mit treibern lassen sich auch saemtliche Schutz- und Sicherheitsmechanismen umgehen und auch selbstverstaendlich das Betriebssystem zum Absturz bringen.

Dienste gehören ebenfalls zu dieser Klasse, die sich TCB (Trusted Computing Base) nennt. Es gibt auch ein entsprechendes Privileg. Übrigens: zum Absturz bringen kann ich Windows (die NT-basierten) auch mit einem nichtprivilegierten Prozess und der Übergabe von verrückten Parametern an eine bestimmte Win32-Registryfunktion.

Luckie 28. Mär 2005 23:59

Re: Speicher ändern
 
Zitat:

Zitat von Mephistopheles
Zitat:

Zitat von Luckie
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.

Was? Dann könnte man ja das windows-eigene Sicherungssystem umgehen. Denn VirtualAllocEx() benötigt nur eine Untermenge der Rechte die WriteProcessMemory() bräuchte. Du kannst ja mal gern versuchen bei VirtualAllocEx() als Flag (letzter Parameter) PAGE_READONLY anzugeben und danach mit WriteProcessMemory() dort hinein zu schreiben. Du hast nicht mehr Rechte! Probier's aus.

War etwas unglücklich ausgedrückt von mir und ich hätte vorher mal etwas genauer recherchieren sollen. Sorry. Natürlich braucht man für VirtualAllocEx auch diese Rechte. Aber dann kann man auch nur in den Speicher rumschreiben, den man sich selber mit VirtualAllocEx reserviert hat. Ich mache es ja selber so:
Delphi-Quellcode:
  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);
Ist aus meinen LuckieDIPS.

w3seek 29. Mär 2005 00:08

Re: Speicher ändern
 
Zitat:

Zitat von Mephistopheles
Dienste gehören ebenfalls zu dieser Klasse, die sich TCB (Trusted Computing Base) nennt. Es gibt auch ein entsprechendes Privileg.

Damit hast du teilweise natuerlich recht, ich weiss worauf du hinaus willst aber ein Dienst ist eine ganz normale user mode anwendung die das System keinesfalls zum Absturz bringen kann. Da ein Dienst dem SYSTEM angehoert, hat dieser natuerlich entsprechend privilegien um bestimmte operationen durchfuehren zu koennen. Ein Treiber dagegen laeuft im kernel mode, d.h. hat absolute Kontrolle ueber das system.


Zitat:

Zitat von Mephistopheles
Übrigens: zum Absturz bringen kann ich Windows (die NT-basierten) auch mit einem nichtprivilegierten Prozess und der Übergabe von verrückten Parametern an eine bestimmte Win32-Registryfunktion.

Das mag vielleicht auf NT4 (Stichwort LPC) und in einigen wenigen Faellen auch win 2000 zutreffen, Microsoft hatte es einfach verschlafen system calls zu sichern. In neueren Versionen von windows sollte das allerdings nicht mehr der Fall sein, mir ist jedenfalls keine solche Luecke mehr begegnet (wenn man mal von win32k und dessen unbegruendeten schluchten absieht). Worauf ich hinaus will ist dass das eindeutig Bugs sind und im Idealfall nicht existieren sollten. Wenn dir tatsaechlich noch so eine Luecke bekannt ist, bitte melde das an Microsoft.

Mephistopheles 29. Mär 2005 00:14

Re: Speicher ändern
 
Zitat:

Zitat von w3seek
Ein Treiber dagegen laeuft im kernel mode, d.h. hat absolute Kontrolle ueber das system.

Wenn das nicht geil ist, zusammen mit meinem Motto:
Ein Theil von jener Kraft,
Die stets das Böse will, und stets das Gute schafft.


Zitat:

Zitat von w3seek
Das mag vielleicht auf NT4 (Stichwort LPC) und in einigen wenigen Faellen auch win 2000 zutreffen, Microsoft hatte es einfach verschlafen system calls zu sichern. In neueren Versionen von windows sollte das allerdings nicht mehr der Fall sein, mir ist jedenfalls keine solche Luecke mehr begegnet (wenn man mal von win32k und dessen unbegruendeten schluchten absieht). Worauf ich hinaus will ist dass das eindeutig Bugs sind und im Idealfall nicht existieren sollten. Wenn dir tatsaechlich noch so eine Luecke bekannt ist, bitte melde das an Microsoft.

Getestet habe ich es auf Windows 2000 - erst mit XP wurde ja SYSENTER eingeführt (ups wir driften aber vom Thema ab :lol:), aber ich werde es nochmal auf einem XP-System testen. Und ggf. melden.

Zitat:

Zitat von Luckie
Aber dann kann man auch nur in den Speicher rumschreiben, den man sich selber mit VirtualAllocEx reserviert hat.

Das tust du zwar, aber versuche doch mal spontan ein paar beliebige Seiten (0x40000 ist sehr interessant *g*) mit VirtualProtectEx() so zu modifizieren, daß du Schreibrechte hast. Und voila ... auch dorthin kannst du schreiben. Ganz ohne VirtualAllocEx() ... und ohne Zauberei.

w3seek 29. Mär 2005 00:19

Re: Speicher ändern
 
Zitat:

Zitat von Mephistopheles
erst mit XP wurde ja SYSENTER eingeführt

SYSENTER (intel)/SYSCALL (amd) hat damit herzlich wenig zu tun.

Zitat:

Zitat von Mephistopheles
ups wir driften aber vom Thema ab

allerdings ;)

Mephistopheles 29. Mär 2005 00:33

Re: Speicher ändern
 
Zitat:

Zitat von w3seek
SYSENTER (intel)/SYSCALL (amd) hat damit herzlich wenig zu tun.

Was genau meintest du dann? Insbesondere bei den Registryfunktionen hat sich zwischen W2K und WXP nichts anderes geändert. Und du spieltest darauf an, daß du einen Absturz nur unter Windows NT, maximal 2000, erwarten würdest.

w3seek 29. Mär 2005 00:40

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.

vlees91 29. Mär 2005 17:14

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)?

ReDoX 29. Mär 2005 17:26

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 Uhr.
Seite 2 von 4     12 34      

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