Autor Beitrag
AHT
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 207



BeitragVerfasst: Mi 26.03.08 10:08 
Ich habe vor einiger Zeit mal eine kleine Entdeckung gemacht und möchte euch das eigentlich nicht vorenthalten. Vielleicht ist das ganze ja "kalter Kaffee" und jedem schon längst bekannt - falls dem so ist, bitte ich diesbezüglich um einen freundlichen Hinweis.

Folgendes bezieht sich auf NT basierende Windowssysteme und ist getestet unter Windows2000 und XP

Wer sich die Werte von Fensterhandlen schon mal etwas genauer angesehen hat wird feststellen, dass alle Fensterhandles gerade, also durch zwei teilbar, sind. Desweiteren liegen alle oberhalb des hexadezimalen Wertes FFFF (>=65536). Was liegt aber unterhalb des Wertes FFFF???

Hier scheint es folgende Gesetzmäßigkeit zu geben:
Jedes Hauptfenster besitzt ein zweites Handle, über das es sich genauso ansprechen lässt wie über das erste Handle. Diese zweite Handle besitzt einen Wert, der immer um genau FFFF+1 (=65536) niedriger ist, als sein erstes Handle.
Bislang ist mir noch kein Hauptfenster begegnet, das oberhalb des Wertes FFFF+FFFF (= 131070) liegt, ich gehe deshalb im Augenblick davon aus, das die maximale Anzahl von Hauptfenstern auf (FFFF-3)/2 (= 32766) begrenzt ist.

Das ganze klingt erst einmal ziemlich unspektakulär - warum sich um ein zweites Handle kümmern, wenn man doch ein anderes hat?
Das ist auch ziemlich unspektakulär - wenn man davon ausgeht, dass sich auch wirklich alle Hauptfenster über API Aufrufe listen lassen - und genau das ist nämlich nicht der Fall!
Windows versteckt einige Fenster vor dem User, die sich aber durch einen kleinen Trick trotzdem listen lassen:
Man geht alle geraden Zahlen von 2 bis 65534 durch und überprüft mit der API IsWindow, ob es sich dabei um ein Fenster handelt. Handelt es sich um ein Fenster, addiert man zur Not noch FFFF+1 hinzu und erhält damit das eigentliche Fensterhandle.

Wenn die geraden Handles bis FFFF (unter Umständen) ein zweites Handle für Hauptfenster sind, was sind dann aber die ungeraden Handles?
Die ungeraden Handles von 1 bis FFFF sind unter anderem für Handles auf Hooks reserviert - auch hier, wie bei den Fenstern, ist dabei ein zweites Handle gemeint, über das sich die mit SetWindowsHookEx erzeugten Hooks genauso ansprechen lassen, wie durch ihr eigentliches Handle.
Um alle durch SetWindowsHookEx erzeugten Hooks auf dem System zu lösen, "dürfte" (<= Schon getestet) es ausreichen, alle ungeraden Zahlen von 1 bis FFFF auf die API UnhookWindowsHookEx anzuwenden. Da hier aber auch die durch SetWindowsHookEx erzeugten Hooks von Virenscannern und Firewalls gelöst werden, bitte mit solchen Test etwas vorsichtig sein und die Kiste auf jeden Fall rebooten.

So, jetzt warte ich auf eine Korrektur meiner Aussagen (vielleicht weiß es jemand besser), auf irgendwelche Einwände, Ergänzungen, Erklärungen oder vielleicht ein zustimmendes Kopfnicken und auf Rückmeldungen, ob das auch für Vista so zutrifft...


Zuletzt bearbeitet von AHT am Mi 26.03.08 11:14, insgesamt 1-mal bearbeitet
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mi 26.03.08 10:54 
Hast Du ne kleine Demo zum Testen?

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
AHT Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 207



BeitragVerfasst: Mi 26.03.08 11:20 
user profile iconBenBE hat folgendes geschrieben:
Hast Du ne kleine Demo zum Testen?


Ja, habe ich, aber nicht als Quelltext in Delphi (Grund ist ja bekannt)..

Du kannst das selbst ganz einfach testen:
1) Starte Wordpad
2) Ermittele das Handle des Hauptfenster von Wordpad
3) Ziehe vom ermittelten Handle 65536 ab.
4) Sende die Message WM_CLOSE an das durch diese Rechnung ermittelte Fensterhandle.

Was passiert????

PS: Komme gerade aus der Nachtschicht und hatte mich um 1 verrechnet - hab´s oben korrigiert.

Link auf Testprogramme folgt noch.
AHT Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 207



BeitragVerfasst: Mi 26.03.08 16:53 
Hier mal ein kleines Programm, das recht gut zeigt, nwas ich da meine.

freenet-homepage.de/...grube/GetWindows.zip

Das Programm überprüft alle Zahlen zwischen 1 und FFFFFFFF mit Hilfe der API IsWindow daraufhin, ob sich hinter dieser Zahl ein Fensterhandle verbirgt. Gibt IsWindow 1 zurück, ermittle es dann aus diesem Handle die weiteren Daten des Fensters.

Folgendes ist hier zu sehen:
1.) Es gibt Fenster, die in keiner anderen Auflistung erscheinen.
2.) Alle Fensterhandles sind durch 2 teilbar.
3.) Addiert man zu einem Fenster, das sich zwischen 1 und 65536 befindet die Zahl 65536 hinzu, kommt man zu einem zweiten Fensterhandle mit den gleichen Fensterdaten. Das es sich dabei um das selbe Fenster handelt, kann jeder sehr einfach über die API ShowWindow nachprüfen.

Auch meine Aussage bezüglich der Hooks lässt sich sehr einfach mit ganz wenigen Zeilen Quelltext überprüfen (das Ergebnis ist recht interessant).
Da ich im Augenblick davon Ausgehe, das unter anderem auch Firewalls und Virenscanner durch dieser Verfahren negativ beeinflusst werden können, möchte ich Aufgrund der Gesetzesdlage in Deutschland hier vorsichtshalber kein Programm dazu posten und überlasse es jedem selbst, die Sachlage einmal zu überprüfen.
Wie gesagt, wer das mit den Hooks mal ganz gerne mit eigenem Quelltext testen möchten - vorsichtshalber weg vom Netz und nacher auf jeden Fall rebooten!
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 26.03.08 19:42 
Schön und gut. Aber wozu muss man das wissen? Der Wert eines Handles ist absolut irrelevant.
AHT Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 207



BeitragVerfasst: Mi 26.03.08 19:55 
user profile iconLuckie hat folgendes geschrieben:
Schön und gut. Aber wozu muss man das wissen? Der Wert eines Handles ist absolut irrelevant.


...ja, er ist solange irrelevant, wie man davon ausgeht, das sich wirklich alle Fenster listen lassen...
Sind für jemanden die Fenster irrelevant, die man auf normalem Weg scheinbar nicht listen kann, ist auch alles andere ohne Bedeutung.

Desweiteren geht es hier nicht nur um Fenster, sondern auch um Hooks.
AHT Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 207



BeitragVerfasst: Mi 26.03.08 20:16 
...mir geht es dabei unter anderem um das Hauptfenster mit dem Klassennamen "Message" dessen Handle direkt über dem mit der API GetDesktopWindow ermittelbaren "Desktopfenster" liegt.

Es kann gut sein, dass ich dort irgendwo einen Fehler mache (mache die täglich und laufend und manchmal riesengroße) - mir gelingt es aber bislang nicht, das irgendwie anders zu listen. Hat da jemand mehr Glück?
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mi 26.03.08 21:47 
Erinnert mich ein wenig an Scatter ... nur dass man hier gesagt bekommt, wo man überall hinwerfen darf :P

BTW: Den EXE-Filename aus dem Prozesshandle wäre schön gewesen, ich hab aber auch so gesehen, dass hier teilweise sogar Fenster von CSRSS.exe (Handles 20, 22, 24 und 26) gelistet werden ;-).

Ferner hab ich festgestellt, dass das Audio-Control-Panel für mein Notebook mit BCB oder Delphi programmiert ist, und es sogar Handles jenseits der 4 Mio.!!! gibt (siehe Anhang).


ScatterTargets.png  (28.94 KB) Download (Rev 0)
 (526x, 526x gesamt)
Beschreibung: Hier besagter Screenshot ... 2428 ist der FF
_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
AHT Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 207



BeitragVerfasst: Do 27.03.08 20:45 
user profile iconBenBE hat folgendes geschrieben:
Erinnert mich ein wenig an Scatter ... nur dass man hier gesagt bekommt, wo man überall hinwerfen darf :P

"Wo man hinschießen darf" finde ich gut, das trifft das hundertprozentig und drückt genau aus, worauf ich hinaus will! Hier dürfte vor allen Dingen das Schießen auf Hooks sehr interessant sein - willst du darauf hinaus?
Was ist Scatter?

user profile iconBenBE hat folgendes geschrieben:

BTW: Den EXE-Filename aus dem Prozesshandle wäre schön gewesen,...

Kein Problem, werde das zur Not ergänzen. Wird dann aber nur unter NT basierenden Systemen angezeigt - der Rest ist mir zu aufwendig.

user profile iconBenBE hat folgendes geschrieben:

...ich hab aber auch so gesehen, dass hier teilweise sogar Fenster von CSRSS.exe (Handles 20, 22, 24 und 26) gelistet werden ;-).

Die Fenster von CSRSS meine ich. Sehe im Augenblick keine Möglichkeit, diese anders zu listen. Zwanzig ist das Dektopfenster - haben die anderen eventuell etwas mit der Zwischenablage zu tun? :wink:
Wo irgendwo ein Fenster ist, lässt sich immer gut irgendwie etwas einklinken - keine Zugriffsrechte, keine Privilegien... 8)

user profile iconBenBE hat folgendes geschrieben:

Ferner hab ich festgestellt, dass das Audio-Control-Panel für mein Notebook mit BCB oder Delphi programmiert ist, und es sogar Handles jenseits der 4 Mio.!!! gibt (siehe Anhang).

Du hast vollkommen Recht, im meiner These stimmt etwas ganz und gar nicht!
Wegen meiner Nachtschicht
(hatten auch noch Feueralarm :shock: ), ist bei mir da einiges durcheinander geraten :oops:
Ziehe mal solange 65536 von diesem hohen Handle ab, bis du auf eine Zahl unter 65536 kommst - da dürfte das zweite Handle liegen - stimmt das?
Wenn ja, halte ich meine These mit der maximal möglichen Anzahl von Hauptfenstern aufrecht...
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 27.03.08 22:09 
user profile iconAHT hat folgendes geschrieben:
user profile iconBenBE hat folgendes geschrieben:
Erinnert mich ein wenig an Scatter ... nur dass man hier gesagt bekommt, wo man überall hinwerfen darf :P

"Wo man hinschießen darf" finde ich gut, das trifft das hundertprozentig und drückt genau aus, worauf ich hinaus will! Hier dürfte vor allen Dingen das Schießen auf Hooks sehr interessant sein - willst du darauf hinaus?
Was ist Scatter?

Ooops, verschrieben: en.wikipedia.org/wiki/Shatter_attack Hoffe, das erklärt alles nötige ;-)

user profile iconAHT hat folgendes geschrieben:
user profile iconBenBE hat folgendes geschrieben:

BTW: Den EXE-Filename aus dem Prozesshandle wäre schön gewesen,...

Kein Problem, werde das zur Not ergänzen. Wird dann aber nur unter NT basierenden Systemen angezeigt - der Rest ist mir zu aufwendig.

Kein Thema ... Ist doch eh nur unter NT interessant ... Oder ist das unter 9x ähnlich?

user profile iconAHT hat folgendes geschrieben:
user profile iconBenBE hat folgendes geschrieben:

...ich hab aber auch so gesehen, dass hier teilweise sogar Fenster von CSRSS.exe (Handles 20, 22, 24 und 26) gelistet werden ;-).

Die Fenster von CSRSS meine ich. Sehe im Augenblick keine Möglichkeit, diese anders zu listen. Zwanzig ist das Dektopfenster - haben die anderen eventuell etwas mit der Zwischenablage zu tun? :wink:
Wo irgendwo ein Fenster ist, lässt sich immer gut irgendwie etwas einklinken - keine Zugriffsrechte, keine Privilegien... 8)

Siehe Link ;-)

user profile iconAHT hat folgendes geschrieben:
user profile iconBenBE hat folgendes geschrieben:

Ferner hab ich festgestellt, dass das Audio-Control-Panel für mein Notebook mit BCB oder Delphi programmiert ist, und es sogar Handles jenseits der 4 Mio.!!! gibt (siehe Anhang).

Du hast vollkommen Recht, im meiner These stimmt etwas ganz und gar nicht!
Wegen meiner Nachtschicht
(hatten auch noch Feueralarm :shock: ), ist bei mir da einiges durcheinander geraten :oops:
Ziehe mal solange 65536 von diesem hohen Handle ab, bis du auf eine Zahl unter 65536 kommst - da dürfte das zweite Handle liegen - stimmt das?
Wenn ja, halte ich meine These mit der maximal möglichen Anzahl von Hauptfenstern aufrecht...

Müsste ich bei Gelegenheit noch mal prüfen ... Ich geb bescheid ...

OK, getestet:
Für beliebige Handles >64k stimmt der Word-Anteil mit dem vollständigen Handle überein.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
AHT Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 207



BeitragVerfasst: Do 27.03.08 22:48 
user profile iconBenBE hat folgendes geschrieben:

Ooops, verschrieben: en.wikipedia.org/wiki/Shatter_attack Hoffe, das erklärt alles nötige ;-)


Mmmh... ich habe mich selbst ja mal mit Shatter etwas intensiver beschäftigt und könnte dazu noch einiges mehr (und interessanteres) schreiben, als in dem wohl jedem bekannte White Paper veröffentlicht wurde.
Diese Fenster eignen sich für eine Attacke durch Shatter (wenn ich mich richtig erinnere, ist ja schon ewig her) nicht, wohl aber die von WINLOGON.EXE erzeugten Fenster, wenn der Admin ein Loginpasswort angelegt hat.
Shatter ist mit SP2 ja zum Glück recht gut gefixt, muss man sich also nicht mehr sehr viel Gedanken drüber machen.

Das nur OFFTOPIC...
AHT Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 207



BeitragVerfasst: Mo 31.03.08 18:25 
user profile iconBenBE hat folgendes geschrieben:


Kein Thema ... Ist doch eh nur unter NT interessant ... Oder ist das unter 9x ähnlich?


Nein, da wird das anders geregelt. Musste mich noch um andere Sachen kümmern und habe dershalb gerade erst das Update hochgeladen.
Beim Verändern der Fenstergröße werden die Controls nun angepasst und ganz rechts kann man jetzt den Prozesserzeuger auslesen. Bei CSRSS.EXE geht das Auslesen des Prozesserzeugers natürlich nicht, da fehlen sogar dem Admin die Rechte zum Lesen im Prozessspeicher. Unter XP kann man das Proggie ja recht einfach über den Befehl AT mit dem Parameter INTERACTIVE im System Account starten - der hat auch da die erforderlichen Rechte.