Visual Basic Forum

Visual Basic Forum
für VB6 und VB.NET Programmierer
 
RegistrierenRegistrieren  LoginLogin

Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Texte und Ebooks
Autor
Nachricht
ZiG_
Überflieger
Überflieger

Anmeldedatum: 07.03.2007
Beiträge: 1248

[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 Wink.

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
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
_________________
 
TheCoder_
Überflieger
Überflieger



Anmeldedatum: 31.12.2006
Beiträge: 359
Wohnort: Essen


Verfasst am: 02.08.2007, 15:19

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 Shocked
_________________
 
raptor0576_
Tutorial Leser
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!!! Smile

danke nochmal^^
 
ZiG_
Überflieger
Ü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)
 
TheCoder_
Überflieger
Überflieger



Anmeldedatum: 31.12.2006
Beiträge: 359
Wohnort: Essen


Verfasst am: 02.08.2007, 17:34

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 Razz
_________________
 
Bahamut_
« Moderator »<b><font color=green>« Moderator »</font



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:

http://www.infosecwriters.com/texts.php?op=display&id=53
_________________
VB.Net-Compiler: http://www.microsoft.com/germany/express/download/default.aspx
VB.Net-eBook: http://www.galileocomputing.de/openbook/visual_basic/
 
ZiG_
Überflieger
Überflieger

Anmeldedatum: 07.03.2007
Beiträge: 1248


Verfasst am: 02.08.2007, 18:13

Benutzt du Vista? Da wurden die Rechte dazu stark eingeschränkt.
_________________
Wer nicht auf seine Weise denkt, denkt überhaupt nicht. (Oscar Wilde)
 
Bahamut_
« Moderator »<b><font color=green>« Moderator »</font



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)

Hier mal n Screeni, auf dem alles drauf is:

http://img70.imageshack.us/img70/707/errorxn0.jpg
_________________
VB.Net-Compiler: http://www.microsoft.com/germany/express/download/default.aspx
VB.Net-eBook: http://www.galileocomputing.de/openbook/visual_basic/
 
ZiG_
Überflieger
Überflieger

Anmeldedatum: 07.03.2007
Beiträge: 1248


Verfasst am: 04.08.2007, 07:11

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
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"Wink
man kann sich ja mal irren^^
_________________


 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Texte und Ebooks

Tags: data stream, alternate data

 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Wie kann ich mich bei euch anmelden?? 796 20.05.2002, 00:28
Keine neuen Beiträge Eine kleine Frage an euch.. 906 30.09.2007, 08:57
Keine neuen Beiträge TopMost Funktion unter DirectX 921 27.07.2007, 10:48
Keine neuen Beiträge Wie Funktion nutzen ? 1101 29.06.2007, 20:59
Keine neuen Beiträge update funktion einbauen 1341 28.01.2007, 23:11
 



[ Time: 0.4078s ][ Queries: 123 (0.0453s) ][ GZIP on - Debug on ]