Archive for the ‘CIM’ Category

Mittels Powershell geladene DLL-Dateien aus einem Prozess auslesen

4 Januar 2016

Öffnet man unter Windows die Eingabeaufforderung, so kann man mit TASKLIST.EXE die aktuell ausgeführten Programme bzw. Prozesse auflisten. Bei den Optionen kann man /M angeben, dann werden zu jedem Prozess die geladenen DLL-Dateien angezeigt.

Hier ein Beispiel von Windows 8.1:

tasklist /FI "imagename eq cmd.exe" /M

Abbildname                     PID Module
========================= ======== ============================================
cmd.exe                      15872 ntdll.dll, KERNEL32.DLL, KERNELBASE.dll,
                                   msvcrt.dll, winbrand.dll

Nun ist es wie immer schwierig von einer Textausgabe die Daten weiterzuverarbeiten. Aber es gibt ja Powershell und das äquivalente Kommando in Powershell sieht so aus:

Get-CimInstance -ClassName Win32_Process -Filter "Name=’cmd.exe’" | Get-CimAssociatedInstance -Association Cim_ProcessExecutable | ft name

die Ausgabe sieht dann so aus:

name
—-
c:\windows\system32\cmd.exe
c:\windows\system32\ntdll.dll
c:\windows\system32\kernel32.dll
c:\windows\system32\kernelbase.dll
c:\windows\system32\msvcrt.dll
c:\windows\system32\winbrand.dll

da es aber nun Objekte sind, kann man natürlich auch mehr Infos anfordern:

Get-CimInstance -ClassName Win32_Process -Filter "Name=’cmd.exe’" | Get-CimAssociatedInstance -Association Cim_ProcessExecutable | ft name, version

name                               version
—-                               ——-
c:\windows\system32\cmd.exe        6.3.9600.17415
c:\windows\system32\ntdll.dll      6.3.9600.17736
c:\windows\system32\kernel32.dll   6.3.9600.17415
c:\windows\system32\kernelbase.dll 6.3.9600.17415
c:\windows\system32\msvcrt.dll     7.0.9600.17415
c:\windows\system32\winbrand.dll   6.3.9600.17415

Mit etwas Aufwand kann man sich auch einen Prozessbaum bauen: https://p0w3rsh3ll.wordpress.com/2012/10/12/show-processtree/

Mittels Get-CimAssociatedInstance kann man sowieso noch jede Menge interessante Dinge in Erfahrung bringen, z. B. wer angemeldet ist, welche Partitionen ein Laufwerk enthält usw. http://csharpening.net/?p=876.

Advertisements

Soft- und Hardware-Inventarisierung per Powershell leichtgemacht

5 August 2015

Von Zeit zu Zeit muss man wissen, was alles in einem System verbaut ist, welche Software installiert ist, welche Frameworks verfügbar sind, welche DLLs da sind, welche Fehler aufgetreten sind, wie viel Speicherplatz frei ist, wann die Oma Geburtstag hat usw. usf.

Nichts leichter als das, man halte Zettel und Bleistift bereit und gibt in einer Powershelleingabeaufforderung – am besten mit Adminrechten – folgendes ein:

Get-CimAssociatedInstance (Get-CimInstance CIM_ComputerSystem)

Nun nehme man Zettel und Bleistift zur Hand und schreibe mit.

Mittels Alias wird es noch etwas knackiger:

Get-CimAssociatedInstance (gcim CIM_ComputerSystem)

Damit es funktioniert braucht man nur Windows 8, Server 2012 oder höher. Um es auf Windows 7 oder Server 2008 R2 ausführen zu können, benötigt man das Microsoft Management Framework 3.0, welches Powershell 3.0 mitbringt und damit auch die CIM-Cmdlets.

So wer jetzt immer noch die Infos auf seinem Zettel mitschreibt, dem sei gesagt, das Ding läuft EWIG, auch auf guter und aktueller Hardware!

Netter Nebeneffekt: Da durch den Aufruf so ziemlich alles im System angelangt wird, was irgendwie installiert oder verbaut ist, eignet sich der Aufruf auch ideal um Rechner auf Zuverlässigkeit zu testen. Forensiker freuen sich über die Vielzahl von Informationen. Mal sehen, vielleicht taugt es sogar für DOS-Attacken…

Übrigens, wer die ganzen Infos noch langfristig speichern möchte, der fügt noch ein | Export-CliXml Inventar.xml hinzu, also so:

Get-CimAssociatedInstance (gcim CIM_ComputerSystem) | Export-CliXML $Env:USERPROFILE\Inventar.XML

Somit kann man die ganzen Infos später wieder mittels Import-CliXML einlesen und zum Vergleich heranziehen. Somit hat man eine Baseline mittels der Veränderungen immer nachvollzogen werden können.

Nutzt man Powershell 5.0 kann man die XML-Datei mittels Compress-Archive noch etwas kleiner bekommen. Leider hat MS an den Möglichkeiten bei Compress-Archive etwas gezaudert, so dass nicht ein Stream von Export-CliXML übernommen werden kann, sondern es muss die XML-Datei von der Platte gelesen und dann komprimiert werden:

Compress-Archive $Env:USERPROFILE\Inventar.XML $Env:USERPROFILE\Inventar.ZIP

Hier noch eine kleine Einführung in CIM: http://blogs.msdn.com/b/powershell/archive/2012/08/24/introduction-to-cim-cmdlets.aspx.

DER Einführungsartikel in WMI/CIM/OMI und Remoting mit Powershell

28 April 2015

Unten stehender Link sollte für jeden Pflicht werden, der irgendwie etwas mit Powershell anfängt. Denn der Artikel bringt die Microsoft Begriffssuppe mit den Dingen DCOM, WMI, CIM, OMI, WS-Man, WS-Management, WinRM usw. alles klar und deutlich in die richtige Perspektive, vor allem auch in Bezug WS-Man.

http://powershell.org/wp/2015/04/24/management-information-the-omicimwmimidmtf-dictionary/