Deutsch
Stammtisch & Café

DLL Injektion für jedermann???

 
- Seite 1 -


Hallo alle zusammen...

Innerhalb von Windows sind einige Zaubereien möglich, die normalerweise gar nicht funktionieren sollten. Eine davon ist die DLL Einschleusung in fremde Prozesse. Ich denke, das ich eine weitere Möglichkeit der DLL-Injektion auch mit Profan hinbekomme. Sollte man das hier posten???
 
30.08.2006  
 



 
- Seite 3 -



Sebastian
König
Hallo Andreas,

[quote:e603eb83d3]Wie gesagt, wenn Subclassing von Fenstern fremder Prozesse ohne DLL Injektion auf neueren NT-basierenden Systemen wirklich funktionieren würde, würde mich das sehr erschrecken, denn es wäre für mich mit Sicherheit kein Problem innerhalb weniger Minuten ein Programm zu schreiben, was alle aktuellen Windowsversionen sicherheitstechnisch aushebelt (wie bei Shatter).[/quote:e603eb83d3]
abgesehen davon, dass der GetWindowLong()-Aufruf [und damit sicher auch SetWindowLong()] für das fremde Fenster erfreulicherweise fehlschlägt, gibt es ja zum Glück auch noch das prinzipielle Hindernis der getrennten Adressräume für verschiedene Prozesse (nicht nur unter WinNT/2000/XP sondern grundsätzlich seit Win95).

Aber weil Du so betonst, dass es Dir um NT-basierte Systeme geht: Funktioniert das Auslesen mit GetWindowLong() unter Win9x/ME tatsächlich?

MfG

Sebastian
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
02.09.2006  
 



[quote:8a5d6faacd=Sebastian König]Hallo Andreas,

abgesehen davon, dass der GetWindowLong()-Aufruf [und damit sicher auch SetWindowLong()] für das fremde Fenster erfreulicherweise fehlschlägt,
[/quote:8a5d6faacd]
Ja, das ist wirklich erfreulich. SetWindowLong schlägt natürlich (zum Glück) auch fehl.

[quote:8a5d6faacd=Sebastian König]
gibt es ja zum Glück auch noch das prinzipielle Hindernis der getrennten Adressräume für verschiedene Prozesse (nicht nur unter WinNT/2000/XP sondern grundsätzlich seit Win95).
[/quote:8a5d6faacd]
Wenn es darum geht, Windows zu knacken, läßt sich das ohne Probleme umgehen - genauer gesagt, man kann das außer acht lassen. Das hatte der Autor der Shatter Attacke damals auch nicht gesehen - MS scheint das aber zum Glück noch erkannt zu haben.

[quote:8a5d6faacd=Sebastian König]
Aber weil Du so betonst, dass es Dir um NT-basierte Systeme geht: Funktioniert das Auslesen mit GetWindowLong() unter Win9x/ME tatsächlich?

MfG

Sebastian[/quote:8a5d6faacd]
Definitiv ja! Da hier sowieso keine unterschiedlichen Rechte vorhanden sind, wurde das wohl außer acht gelassen.
 
02.09.2006  
 



Ach ja - apopo außer acht lassen:
Als mein großer Bruder sein ABI nachgemacht hat, hat er sich gedacht, er kann Deutsch außer acht lassen - und ist dann teilweise gar nicht zu den Prüfungen erschienen . Heute hat er einen Doktortitel in einem Informatikbereich.
Fazit: Wenn man bei allem, was man tut überlegt, was man ruhig unter den Tisch kehren kann, kommt man im Leben wesentlich weiter ...

Beste Gruße

Andreas (der jetzt seine Katzen füttern geht)
 
02.09.2006  
 



Ist nun doch in [...]  drin => Exportfunktionen in können nun in fremden Prozessen angesprochen werden, d.h. ich kann quasi von außen bestimmen, was in einem Prozess geschieht.
Einige Einschränkung:
Die Funktion darf nur einen Parameter haben.
Ausreichend Rechte müssen auf den jeweiligen Prozess vorhanden sein.

Wie geht das?
Wir starten zuerst Wordpad und danach [...] . Als nächstes schauen wird uns im ersten Thread von Wordpad die Fenster an, un merken uns das Hauptfensterhandle.
Danach klicken wir wieder aud den Wordpad Prozess und klicken mit der rechten Maustaste ins Treeview.
[...] 

Nach dem Klick aud DLL einschleusen sehen wir das hier...
[...] 
...und wählen mal wieder Franks ProSpeed.DLL aus , die danach unter dem Prozess von Wordpad wiederzufinden ist.
[...] 

Jetzt wählen wir im Listview der Registrierkarte Objekt-Infos die Funktion Version aus und klicken danach mit der rechten Maustaste ins Listview.
[...] 

Jetzt Funktion in fremdem Prozess ausführen anklicken.
Im dann erscheinenden Dialog ins Edit das Handle des Wordpad Fensters eingeben.
[...] 

Danach Funktion ausführen anklicken. Das gibts als Ergebnis:
[...] 

107 kB
Kurzbeschreibung: BILD 1
Hochgeladen:04.09.2006
Ladeanzahl118
Herunterladen
78 kB
Kurzbeschreibung: BILD 2
Hochgeladen:04.09.2006
Ladeanzahl110
Herunterladen
98 kB
Kurzbeschreibung: BILD 3
Hochgeladen:04.09.2006
Ladeanzahl79
Herunterladen
98 kB
Kurzbeschreibung: BILD 4
Hochgeladen:04.09.2006
Ladeanzahl89
Herunterladen
74 kB
Kurzbeschreibung: BILD 5
Hochgeladen:04.09.2006
Ladeanzahl113
Herunterladen
55 kB
Kurzbeschreibung: BILD 6
Hochgeladen:04.09.2006
Ladeanzahl122
Herunterladen
 
04.09.2006  
 



Nicht uninteressant zum Thema:  [...] 
 
08.09.2006  
 



Hallo IF...

Gut gefunden, doch es geht einfacher und sicherer (in der Funktion) - man arbeitet ja nicht mehr mit Windows98 ...
Zur Speicheraufteilung entspricht das dem, was man mit [...]  nachvollziehen kann. Insgesammt die beste Erklärung zu dem Thema, die ich bislang gesehen habe.
 
08.09.2006  
 



Ich habs im Augenblick nur schnell überflogen, aber bei IFs Link ist mir ein Absatz doch etwas sauer aufgestoßen:
[quote:196bfa3cd0]
Dasselbe Verfahren, also Code in mehrere virtuelle Adressräume gleichzeitig einzublenden, wendet Windows bei DLLs an, die ja an mehrere Prozesse gleichzeitig gebunden sein können.
Denn das ist ja gerade einer der Vorzüge einer DLL: Man kann den von mehreren Anwendungen benötigten Code in DLLs bündeln und dann eben diesen Code nur einmal in den physischen Speicher laden, obwohl er von mehreren unabhängigen Prozessen verwendet wird. Dadurch kann immens Speicher gespart werden. Dies ist wohl einer der Gründe warum ein Großteil des Windowsbetriebssystems auf der DLL-Technik basiert.
[/quote:196bfa3cd0]
Das bedeutet für mich: Windows lädt z.B. die NTDLL.DLL, und wenn ein anderer Prozess diese ebenfalls lädt,, zeigt der virtuelle Prozessspeicher an die gleiche reale RAM-Adresse. Aber ist das wirlich so? Auch das kann man mit TNT sehr einfach überprüfen:
1.) WORDPAD starten.
2.) Mit TNT ein Byte im virtuellen Prozessspeicher von WORDPAD ändern, das innerhalb des geladenen Moduls NTDLL.DLL liegt. Ist diese Änderung auch in andern Prozessen zu sehen? Wenn dem so wäre, wäre das die Katastrophe unter NT - und dem wird wohl (hoffentlich) nicht so sein.
 
08.09.2006  
 



 
- Seite 4 -



Michael
Wodrich
DLLs:
das gleiche Codesegment, eigene Datensegmente.
Du bekommst also den Text des anderen Prozesses nicht zu sehen.

Eine DLL kann auch ein Datensegment enthalten, aber: diese Vorgabe-Daten werden kopiert und die variablen Datenbereiche, da hat jeder Prozess seinen eigenen Topf.

Oder versuchst Du in den Code-Bereich zu schreiben???
Der sollte eigentlich ReadOnly sein, sonst ists Essig mit der Sicherheit.
 
Programmieren, das spannendste Detektivspiel der Welt.
08.09.2006  
 



Ja, in den Codebereich meine ich. Readonely kann man mit [...]  ändern (schon getan). Ist das Byte in jedem Prozess vorhanden?
 
08.09.2006  
 



DLLs zu patchen, nachdem sie geladen wurden, ist kein Problem. Würde ich eine DLL in meinem Bereich patchen und ein Zeiger eines anderen Prozesses würde auf den gleichen Codebereich zeigen, würde auch der Code im anderen Prozess geändert werden. Ist das wirklich so? Ich denke nicht.
 
08.09.2006  
 



...wie gesagt, es ist kein Problem, das mit [...]  zu testen - genau dafür wurde das Programm geschrieben. Da ich im Augenblick auf einem anderen OS festsitze gibts die Testergebnisse erst morgen.
 
08.09.2006  
 



Hallo Michael...

Auch hier gilt natürlich: Windows ist nicht gleich Windows, und das was hier steht, ist unter NT-basierenden Systemen so:

So, dann mal los.
Als erstes starten wir mal WordPad und dann [...] . Nach dem Auswählen des WordPad Prozesses klicken wir dann auf die von WordPad geladene NTDLL.DLL. Die Funktion CsrAllocateCaptureBuffer hat bei mir die Adresse 2005459760 (hexadezimal $7788E330). An dieser Adresse müßte also auf jeden Fall Code stehen und kein Datensegment sein.

[...] 

Wer Zweifel hat, kann mit DASM32 disassemblen und erhält dann das:

[...] 

Mittels Recchtsklick auf WordPad.exe in [...]  können wir uns nun den Speicher an dieser Stelle anzeigen lassen.

[...] 

Wir wählen als hexadezimale Bytefolge und lesen ein Byte aus.

[...] 

Bei mir kommt da 8B heraus.

Nun wieder Rechtsklick auf WordPad.exe und diesmal Speicherbereich ändern wählen.
Beim neuen Inhalt geben wir jetzt zum Spaß mal AB ein und klicken dann auf Speicherbereich ändern.

Lesen wir jetzt die besagte Adresse aus, sehen wir, das dort auch wirklich AB drin steht.

Nun klicken wir auf einen anderen Prozess und lassen uns dort die gleiche Adresse auslesen:
Da steht immer noch 8B, aber nicht AB.

Fazit => kein Pointer auf eine gemeinsame reale Adresse im Speicher, was zu beweisen war.

Auch den Schutz der Seiten in denen Code steht kann man mit [...]  sehr einfach ermitteln. Einfach nach dem Rechtsklick Infos über Adresse auslesen anklicken und im Edit die Codeadresse eingeben.
Wie gesagt: Schreibschutz kann man (in bestimmtem Rahmen) per API ändern .

Da nicht alles in einen Topf geschmissen wird und im RAM auf der selben Adresse landet, ist es auch nicht Essig mit der Sicherheit. Zwar kann man Quellcode von DLLs ohne Probleme ändern, aber nur für den eigenen Prozess. Microsoft achtet (in der Regel) sehr gut darauf, das Sicherheitsabfragen immer Empfängerseitig gelöst werden - wenn ich ausgeschlafen habe, kommt ein Beispiel mit Quelltext zum Shatter Bugfix - aber in einem anderen Thread.

So, und nun warte ich auf jemanden, der mit eigenen Test meine Aussagen widerlegt.

82 kB
Kurzbeschreibung: Bild 1
Hochgeladen:09.09.2006
Ladeanzahl117
Herunterladen
69 kB
Kurzbeschreibung: Bild 2
Hochgeladen:09.09.2006
Ladeanzahl78
Herunterladen
74 kB
Kurzbeschreibung: Bild 3
Hochgeladen:09.09.2006
Ladeanzahl93
Herunterladen
46 kB
Kurzbeschreibung: Bild 4
Hochgeladen:09.09.2006
Ladeanzahl92
Herunterladen
44 kB
Kurzbeschreibung: Bild 5
Hochgeladen:09.09.2006
Ladeanzahl77
Herunterladen
 
09.09.2006  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

7.538 Betrachtungen

Unbenanntvor 0 min.
Andreas Miethe21.01.2013
Manfred Barei11.01.2013
Michael Borowiak22.12.2012
E.T.17.01.2012
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie