Neugier ist der Ursprung allen
Forschungsdrangs; und Ende 2005 hatte mich die Neugier ganz und gar
gepackt. Kann man den Inhalt einer Listbox oder Listview irgendwie
komplett in einem Rutsch an eine andere Stelle kopieren? Sind
bestimmte Speicherbereiche eines Fensters immer an der gleichen
Adresse zu finden? Welche Exportfunktionen befinden sich in einer
DLL? Kann man irgendwie an deren Parameter kommen?? Warum werden
Prozesse immer mit bestimmten Rechten gestartet, obwohl ich gar keine
Zugriffsrechte direkt festlege? Welche Privilegien müssen
aktiviert werden um sie zu benutzen und welche nicht? Wie sind in
etwa fremde Programme aufgebaut und welche optischen und
programmtechnischen Spielereien werden dort benutzt? Wofür sind
einzelne Threads in fremden Programmen zuständig?
Fragen
sind wie geschlossene Türen - und hinter jeder dieser Türen
befinden sich neue Möglichkeiten und Ideen. Um Türen zu
öffnen zu denen man den Schlüssel nicht hat, benötigt
man Werkzeug - und aus diesem Gedanken heraus ist 'Tasks and Token'
(TNT) entstanden, ein Proggi das mir helfen sollte, verschlossene
Türen einen ganz kleinen Spalt weit zu öffnen um einen
Blick zu riskieren. Einen Blick, bei dem ich dann doch wesentlich
mehr gesehen habe, als ich mir am Anfang ausgemalt habe und der auch
an einigen Stellen schon Früchte getragen hat...
Was
kann TNT?
1.) Verschlossene Türen öffnen: TNT kann
Zugriffsrechte auf Prozesse, Threads, den Access-Token und
Prozessspeicher ändern oder sich selbst als Systemservice
starten und sich so mehr Möglichkeiten verschaffen, Daten
fremder Prozesse auszulesen und zu ändern...
2.) Daten
lesen: TNT kann den Userspeicher fremder Prozesse und dessen
Attribute auslesen und dort nach Daten suchen. Ausgelesene Daten
können in die Zwischenablage kopiert werden. Außerdem
können Heaps fremder Prozesse mit ihren Speicherblöcken
gelistet und ausgelsesen werden. Eine Zuordnung von Handles zu
bestimmten Speicherbereichen innerhalb fremder Prozesse kann mit TNT
in vielen Fällen mit diesen Mitteln umgesetzt werden. TNT kann
den Access-Token fremder Prozesse lesen und zeigt dessen Daten
auswertbar an. Daten fremder Fenster, wie z.B. Fensterstile,
Fenstergröße, Position, Klassenname und Fenstertext liest
TNT aus. Fensterstile werden (soweit bekannt) ausgewertet und mit
ihren Flagnamen angezeigt. Module werden nach Exportfunktionen
gesucht und deren Adressen innerhalb des fremden Prozesses angezeigt.
Moduldaten fremder Prozesse wie Einsprungsadresse, Ursprungsname bei
der Kompilierung oder verschiedene Versionsinformationen kann man
ebenfalls über TNT erhalten.
3.) Daten ändern: TNT
kann einstellbare Daten des Tokens eines fremden Users ändern.
Dazu gehört z.B. das Aktivieren oder Deaktivieren von Gruppen
und Privilegien. Aber auch der Default-DACL eines Fremdprozesses -
der die Rechte eines Kindprozesses bestimmt, wenn kein
Security-Descriptor mitgegeben wurde (z.B. bei @Winexec(), RUN,
Shell...) - kann geändert werden. TNT ist in der Lage, die
Zugriffsrechte auf Speicherseiten in anderen Prozessen zu ändern
und deren Inhalt neu zu setzen. Fensterstile, Fensterpositionen und
Größen fremder Fenster können bei Bedarf geändert
werden
4.) Beenden und anhalten: TNT kann Fremde Fenster
schließen, Prozesse beenden und Threads anhalten, fortsetzen
und beenden...
5.) Messages senden: TNT kann Messages an
fremde Fenster senden und in vielen Fällen auch deren
Rückmeldung einholen.
6.) DLLs Injizieren: TNT kann
unter Windows2000/XP eigene DLLs in den Virtuellen Speicher eines
Prozesses einschleusen und die enthaltenen Exportfunktionen direkt
anspringen.
7.) TNT kann in fremden Prozessen Speicher für
eigene Verwendung bereitstellen.