[Text] Alternate Data Stream nutzen Verfasst am: 02.08.2007, 12:21
Thema: ADS – Alternate Data Stream (Wikipedia, Msdn)
Hallo an alle.
Wiedermal hab ich mich an ein Tutorial gesetzt. Diesmal möchte ich euch etwas Besonderes zeigen.
1. Erklärung
Ich versuche mal so einfach wie möglich zu erklären was es mit ADS auf sich hat.
ADS (Alternate Data Stream) ist eine Funktion die es nur bei dem Dateisystem NTFS gibt, mit der man Daten an verschiedenste Dateien anhängen kann ohne dass diese sichtbar sind.
Ihr kennt doch sicher alle die kleinen Vorschaubildchen (Thumbnails) von euren Bildern oder Filmen die ihr gespeichert habt. Habt ihr euch schon mal gefragt wo diese Thumbnails gespeichert werden?
Ganz genau. Diese Thumbnails sind versteckt an den Dateien angehängt. Im Grunde nutzt Windows also diese Funktion um weitere Daten/Informationen dieser Datei versteckt mitzuliefern.
Das ist alles nicht neu und wird von einigen Viren was ich so gehört habe auch ausgenutzt. Viele Antivirenhersteller wissen das auch und scannen ebenfalls diese Möglichkeit.
Diese Funktion habe ich damals in meinen Binder eingebaut und wenn ich mich nicht irre gibt es diese auch bei dem Trojaner „shark“. Trotzdem sieht man diese Funktion immer noch sehr selten.
Und genau deswegen mache ich euch hier ein Tutorial. So seid ihr anderen Programmieren schon mal einen Schritt voraus .
2. Schreibweise
Beispiel: Datei:ADS
Wie ihr seht benutzt man den Doppelpunkt als Trennungszeichen zwischen der Datei und dem Stream(ADS).
Einsetzen kann man das z.B. so.
Erstellt euch am besten einen Ordner dafür und zwei Textdateien.
Und dann gebt in der Eingabeaufforderung(CMD) das ein: „type a.txt > b.txt:a.txt“
Was geschieht ist, dass die Datei a.txt als ADS an die Datei b.txt angehängt wird.
Ansehen kann man sich die Datei dann z.B. per Notepad: „notepad b.txt:a.txt“
Das liegt daran, dass notepad mit solchen verstecken Dateien umgehen kann. Leider kann das nicht jedes Programm. Ausführbare Dateien sind in der Regel kein Problem, aber Filme und andere Dateien hängen von den benutzen Programmen ab. Außerdem kann man Streams auch an Ordner hängen und nicht nur an Dateien.
Es gibt übrigens auch Programme mit dem man Alternate Data Streams aufspüren kann. Hier ein Link zu so einem Programm: http://www.safer-networking.org/files/adsl.zip
3. In VB6 nutzen
Da man nicht mit den üblichen Methoden auf so einen Stream zugreifen bzw. ihn löschen kann, brauchen wir als erstes 2 Apis die uns dabei helfen.
Code:
Private Declare Function OpenFile Lib "kernel32" (ByVal lpFileName As String, lpReOpenBuff As OFSTRUCT, ByVal wStyle As Long) As Long
Private Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" (ByVal lpFileName As String) As Long
Und noch die dazugehörigen Deklarationen.
Code:
Private Const OF_EXIST = &H4000
Private Const OFS_MAXPATHNAME = 128
Private Type OFSTRUCT
cBytes As Byte
fFixedDisk As Byte
nErrCode As Integer
Reserved1 As Integer
Reserved2 As Integer
szPathName(OFS_MAXPATHNAME) As Byte
End Type
Mit diesen Apis (OpenFile und DeleteFile) können wir jetzt ohne Probleme auf die verstecken Daten zugreifen.
Als nächstes müßen wir mal eine Datei als ADS erstellen. Hier mal ein Code wie man eine Datei in den Speicher einlesen und dann als ADS wieder erstellen kann.
Code:
Dim buffer as string, FilePath as string, NewPath as string
FilePath = “C:\a.txt”
NewPath = “C:\b.txt:a.txt”
Open FilePath For Binary As #1
Open NewPath For Binary As #2
buffer = Space$(LOF(1))
Get #1, , buffer
Put #2, , buffer
Close
Hier wird nur die Datei „a.txt“ mit der Nummer #1 in buffer eingelesen und dann in „b.txt:a.txt“ wieder erstellt.
Jetzt wissen wir aber natürlich nicht ob die Datei wirklich da ist und jedesmal per CMD testen ist ja auch langweilig. Mit der normalen „FileExists“ Funktion geht es auch nicht und deshalb kommt jetzt die Api „OpenFile“ zum Einsatz.
Hier ein Code zum Überprüfen der Existenz einer Datei:
Code:
Public Function FileExists(ByVal Filename As String) As Boolean
Dim OF As OFSTRUCT
FileExists = OpenFile(Filename, OF, OF_EXIST) = 1
End Function
Diese könnt ihr einfach in einem Modul speichern und dann so im Code aufrufen.
Code:
If FileExists(NewPath) = True then
Call MsgBox(“Datei ist vorhanden”)
End if
Eine Datei löschen kann man so:
Code:
Call DeleteFile(newpath)
So könnt ihr sehr einfach auch ausführbare Dateien als ADS verstecken und diese per Shell oder ShellExecute starten.
Mal sehen ob in Zukunft ein paar Projekte von euch mit dieser Funktion kommen. Würde mich freuen.
hf, ZiG _________________ Wer nicht auf seine Weise denkt, denkt überhaupt nicht. (Oscar Wilde)
Zuletzt bearbeitet von ZiG_ am 20.02.2008, 10:17, insgesamt einmal bearbeitet
ChEeTaH_ Tutorial Leser
Anmeldedatum: 01.07.2007 Beiträge: 67
Verfasst am: 02.08.2007, 14:43
Öhm die Thumbnails werden in einer Thums.db gespeichert soweit ich weiss. geh mal unter Ordneroptionen ->Systemdateien anzeigen. Genutzt wird das ADS beim Internet Explorer. In einer PC-Welt gabs mal ne Beschreibung wie man sowas sichtbar macht. Get glaub ich mit auch DOS. Ansonsten nice TuT. Kann man immer gut gebrauchen _________________
Ein schönes Tut Zig. Ich wusste weder das es diese möglichkeit gibt noch das sie in Vb nutzbar ist. Werd mich dann wohl mal eingehender mti beschäftigen. Weißt du welche Avs den ADS scannen und welche nicht?
Und wenn du mehr solche "methoden" kennst mach ruhig tutorials ^^
Kannst ja mal nen Tut zum Direct Memory Access machen, das wärs doch mal _________________
raptor0576_ Tutorial Leser
Anmeldedatum: 19.05.2007 Beiträge: 20
interessant ;) Verfasst am: 02.08.2007, 15:33
nice tut!
wusste auch noch nix davon...
aber ist seeehr interessant;)
immer her mit neuen tutorials!!!
danke nochmal^^
ZiG_ Überflieger
Anmeldedatum: 07.03.2007 Beiträge: 1248
Verfasst am: 02.08.2007, 17:25
@ChEeTaH
Zitat aus Wikipedia
Zitat:
Windows 2000 und Windows XP verwenden ADS-Unterdatenströme zur Speicherung von Vorschaubildern
Ich dachte eigentlich auch das sie in der Thumbs.db gespeichert werden. Ist mir aber eigentlich auch egal wie es jetzt gemacht wird.^^
@TheCoder
Ich glaube die meisten AV's scannen diese Möglichkeit.
Hier gibts ne Liste ganz unten, die aber leider schon 1Jahr alt ist:
http://www.heise.de/security/artikel/74641
Jedenfalls thx für die gute Kritik. Werde mir noch andere Tuts überlegen.
mfg _________________ Wer nicht auf seine Weise denkt, denkt überhaupt nicht. (Oscar Wilde)
Ok danke. Sieht aus als würden alle oft verwendeten und meist benutzten av´s den ADS scannen. Naja schade wär ja auch zu schön gewesen. Also immer noch FUD programmieren, aber trotzdem ist das eine sehr nette untersützung.
Ja wenn du mehr solche Tutorials kennst dann immer her damit. Ich glaub an sowas ist immer Bedarf und, ich hätts selber nich gedacht, diese Methode war mir bisher unbekannt.
Wie gesagt mach mal nen Tut zu DMA (Direct Memory Access) ich wollt schon immer mit vb ne exe datei direkt in den Speicher laden _________________
Bahamut_ « Moderator »
Anmeldedatum: 12.12.2006 Beiträge: 250
Verfasst am: 02.08.2007, 18:05
Wow, echt interessant. Nur mit .exen die in Vb.Net geschrieben wurden wills irgendwie nicht so wie ich will xD
Mach aufjedenfall weiter so, schon allein dieses Tut bringt wieder Möglichkeiten mit sich, an die ich noch nie gedacht habe ^^
Hier stehen (vorallem gegen Ende) noch einiges interessante Sachen zu ADS/NTFS allgemein:
Benutzt du Vista? Da wurden die Rechte dazu stark eingeschränkt. _________________ Wer nicht auf seine Weise denkt, denkt überhaupt nicht. (Oscar Wilde)
Bahamut_ « Moderator »
Anmeldedatum: 12.12.2006 Beiträge: 250
Verfasst am: 02.08.2007, 20:11
Nope Win XP SP2, mit ner normalen .exe gehts (z.b Taskmgr)
Tja. Noch ein Grund für mich mit dem Umstieg auf VB.Net zu warten. xD _________________ Wer nicht auf seine Weise denkt, denkt überhaupt nicht. (Oscar Wilde)
ChEeTaH_ Tutorial Leser
Anmeldedatum: 01.07.2007 Beiträge: 67
Verfasst am: 22.08.2007, 15:11
ZiG hat Folgendes geschrieben:
@ChEeTaH
Zitat aus Wikipedia
Zitat:
Windows 2000 und Windows XP verwenden ADS-Unterdatenströme zur Speicherung von Vorschaubildern
Ich dachte eigentlich auch das sie in der Thumbs.db gespeichert werden. Ist mir aber eigentlich auch egal wie es jetzt gemacht wird.^^
oh sry "erare humanum est"
man kann sich ja mal irren^^ _________________