ADS/Stream mit Sonderzeichen ♣ in PowerShell 7 auslesen

Somebody111

Cadet 1st Year
Registriert
Mai 2008
Beiträge
11
Hallo,

mhhhhhh ..., früher gabs doch Kategorien nach Programmiersprachen; hab' trotz intensiver Suche keine mehr gefunden. Falls das Thema hier nicht korrekt plaziert ist, dann bitte nach PowerShell verschieben, falls es das doch noch gibt.

Zum Problem: Beschäftige mich nach ca. 15 Jahren mal wieder mit ADS/Streams und was sich da evtl. geändert hat. Als "alter" :) Batch'ler ist mir unter CMD auch alles gelungen, was ich testen wollte. In der PowerShell bin ich (noch) relativ neu und unerfahren. Durch viel lesen und stöbern im www, konnte ich auch unter PS7.2.24 (letzte W7) fast alles erledigen. An einem Problem scheitere ich jedoch und dazu ist auch im www nichts zu finden und alle KI/AI-Vorschläge sind nicht korrekt:

Den Inhalt eines ADS/Streams "♣SummaryInformation" an einer Datei mit PS7 oder auch PS5.1 anzuzeigen. Zum Stream selbst findet man Informationen, und auch wie man in der PS Streams, sowie deren Bezeichnungen und Größe anzeigt, jedoch nicht den Inhalt bei dem Sonderzeichen ♣ ([ALT]+[5]). Der Stream ist grundsätzlich binär (Eigenschaften früherer Explorer-Versionen) und alle Versuche, auch mit "-Raw", "-Encoding Byte" (PS5) oder "-AsByteStream" (PS7) funktionierten nicht. Ich habe bereits einiges weiteres versucht, auch mit Maskierung; in CMD kein Problem, aber in der PS-Konsole war kein Versuch erfolgreich. Ich vermute, dass es lediglich an der Darstellung oder Maskierung des Zeichens ♣ liegt und hoffe, dass erfahrene PS-Cracks wissen, wie man es richtig darstellt bzw. maskiert, damit es angezeigt wird, und mir helfen können:

Stream-Inhalt ohne Sonderzeichen im Namen funktioniert:
Get-Content .\Dateiname.exe -Stream Zone.Information
Stream-Inhalt mit Sonderzeichen funktioniert nicht und ich wäre über eine Lösung glücklich:
Get-Content .\Dateiname.exe -Stream ♣SummaryInformation

Einige meiner Versuche sind im Anhang ersichtlich:

Grüße
Somebody
 

Anhänge

  • PowerShell-7_ADS-Stream-♣-Anzeigen-4_zg_030.jpg
    PowerShell-7_ADS-Stream-♣-Anzeigen-4_zg_030.jpg
    116,9 KB · Aufrufe: 46
ich hab mal die ai gefragt - hab sehr gute Erfahrungen mit Powershell. hier die Antwort von GPT-5.4,
ich gebe sie 1:1 wieder - deswegen die leichte Redundanz:
"
Die Lösung: Das ♣ ist hier sehr wahrscheinlich nicht das echte Zeichen im Streamnamen. Bei SummaryInformation steckt
vorn das Steuerzeichen 0x05 drin. Manche Tools zeigen das nur als ♣ an, PowerShell erwartet aber den echten Namen.

$stream = [char]5 + 'SummaryInformation'

# PS 7+
Get-Content -LiteralPath .\Dateiname.exe -Stream $stream -AsByteStream -Raw

# PS 5.1
Get-Content -LiteralPath .\Dateiname.exe -Stream $stream -Encoding Byte -Raw

Wenn man den binären Inhalt sinnvoller ansehen will:

Format-Hex -InputObject (Get-Content -LiteralPath .\Dateiname.exe -Stream $stream -AsByteStream -Raw)

Das könntest du fast direkt so antworten:

Das Problem ist nicht die Maskierung von ♣, sondern dass das in diesem Fall gar nicht das echte Zeichen ist.
Bei SummaryInformation lautet der Streamname intern 0x05 + "SummaryInformation"; das führende Steuerzeichen wird
nur
von manchen Tools wie ein ♣ dargestellt.
Deshalb funktioniert Get-Content ... -Stream ♣SummaryInformation nicht. Funktionieren sollte dagegen:

Get-Content -LiteralPath .\Dateiname.exe -Stream ([char]5 + 'SummaryInformation') -AsByteStream -Raw

In Windows PowerShell 5.1:

Get-Content -LiteralPath .\Dateiname.exe -Stream ([char]5 + 'SummaryInformation') -Encoding Byte -Raw

Der Stream ist binär, daher ist Format-Hex oft die praktischere Ausgabeform.

"

Antwort von Claude Sonnet 4.6 (sieht gleicht aus - aber für mich leichter und präziser):
"
Das Problem ist ein Zeichencode-Konflikt:


│ Zeichen │ Codepoint │ Herkunft │
-----------------------------------------------------------------------------------------
│ ♣ (getippt) │ U+2663 (9827) │ Unicode CLUB SUIT │

│ ♣ im Stream-Namen │ 0x05 (5) │ DOS/OEM-Steuerzeichen (CP437) │


Der NTFS-Stream-Name beginnt mit dem Steuerzeichen 0x05, das in der alten DOS-Codepage (CP437) als ♣ dargestellt
wird – aber das ist nicht dasselbe wie das Unicode-Zeichen ♣ (U+2663), das man in PS eintippen würde.

Die Lösung – [char]5 statt dem eingetippten ♣:

# PS 7 (AsByteStream für binären Inhalt)
$stream = [char]5 + "SummaryInformation"
Get-Content .\Dateiname.exe -Stream $stream -AsByteStream | Format-Hex

# PS 5.1 (Encoding Byte)
$stream = [char]5 + "SummaryInformation"
Get-Content .\Dateiname.exe -Stream $stream -Encoding Byte | Format-Hex

Oder einzeilig:

Get-Content .\Dateiname.exe -Stream "$([char]5)SummaryInformation" -AsByteStream | Format-Hex

Warum funktioniert CMD aber PS nicht? In CMD erzeugt [ALT]+[5] direkt den Bytewert 0x05 über die OEM-Codepage –
PowerShell hingegen verwendet intern Unicode, und das eingetippte ♣ landet als U+2663 (9827), was vom
NTFS-Stream-Namen abweicht.

"
hoffe das hilft.
 
Zuletzt bearbeitet:
Vielen, vielen Dank für die Hilfe und die Erläuterungen @dermoritz, es funktioniert so, wie beschrieben. 👍 😀

Ich hatte vorher auch mit den Codepages 437, 850, 1252 + 65001 herumprobiert, aber ohne Erfolg.

Zur CMD: [ALT]+[5] funktioniert dort auch nicht. Man muss explizit die 0en mit angeben:
CMD = [ALT]+[0]+[0]+[5] (siehe Screenshot).

Ich werde morgen noch meine Ergebnisse hier posten, damit auch andere etwas davon haben.

Darf ich fragen, wie oder wo du gesucht hast, damit ich für die Zukunft etwas dazu lerne. Hast du eine App verwendet? Es verwundert mich nämlich, dass dir so schnell brauchbare Ergebnisse angezeigt wurden. Ich hab' bestimmt mit jeweils 10 unterschiedlichen Fragen im FF-Browser und auf meinem KI-Tablet im Edge-Canaris gesucht und nicht eine einzige solch guter Antworten erhalten.

 

Anhänge

  • CMD_ADS-Stream-♣-Anzeigen-2_zg_030.jpg
    CMD_ADS-Stream-♣-Anzeigen-2_zg_030.jpg
    49 KB · Aufrufe: 13
  • Gefällt mir
Reaktionen: dermoritz
Benutz einfach chatgpt: kann deine Frage 1:1 eingeben auch das bild anfügen.
Ich hab Github Copilot benutzt, andere Alternativen:
  • claude code
  • gemini cli

(ich hatte hier auch kurz die antwort von chatgpt drin - wurdse gelöscht, wgen zu viel ki.)
 
Zurück
Oben