Si vous souhaitez avoir plus d'informations sur l'ADS, consulter ce lien:
http://www.paperblog.fr/2964348/le-dang ... ta-stream/
Résumé:
Sur les systèmes de fichier NTFS, il est possible d'associer des données (stream) à un fichier ou un répertoire .
Ces données ne seront pas visibles dans l'explorateur, seul la date de modification du fichier principal changera mais pas sa taille. Il faut des outils spécifiques pour scanner et supprimer les streams tout en sauvegardant le fichier ou le répertoire principale.
A partir de Vista il est possible de lister ces fichiers par la commande: Dir /r
Il est très simple de créer des Streams comme nous allons le voir,
Je vous propose ce code qui permet de créer, extraire et supprimer un Stream connu:
Code : Tout sélectionner
;----------------
; PureBasic 4.50
;----------------
;-----------------------------------------------------------------------------------------------------------------------
; Lecture, écriture et extraction d'un Alternate Data Stream (ADS); en Français (flux de données additionnels)
; Info sur les ADS --> http://www.paperblog.fr/2964348/le-danger-des-flux-additionnels-ads-alternate-data-stream/
; Fonctionne sur le système de Fichier NTFS 2000, NT, XP, Vista, Window 7
;-----------------------------------------------------------------------------------------------------------------------
; ----------------------------------------------------------------------------------------------------------------------------------
; Ce code vous permet d'associer un fichier (On dira un Stream) à un autre fichier ou un répertoire
; Le Stream que vous aurez associé au fichier ne sera pas visible dans l'explorateur de Window
; Seul la date de modification du fichier changera mais pas sa taille
; L'utilisateur Lambda ne sera jamais qu'il a certains fichiers cachés dans son système
; C'est un bon moyen de sauvegarder des données sensibles et les cachées, car impossible de les supprimer,
; sans effacer le fichier principal ou le répertoire
; Il faut en effet des outils spécifiques pour scanner et ainsi voir tous ces fichiers cachés
; j'en ai essayer certains comme ADS Spy ou hijackthis qui fonctionne très bien
; ----------------------------------------------------------------------------------------------------------------------------------
; Récupère l'adresse d'un dossier spécifique de Windows
Procedure.s GetSpecialFolderLocation(Valeur.l)
Protected SpecialFolderLocation.s, Dossier_ID.l
If SHGetSpecialFolderLocation_(0, Valeur, @Dossier_ID) = 0
SpecialFolderLocation = Space(#MAX_PATH)
SHGetPathFromIDList_(Dossier_ID, @SpecialFolderLocation)
If SpecialFolderLocation
If Right(SpecialFolderLocation, 1) <> "\"
SpecialFolderLocation + "\"
EndIf
EndIf
EndIf
ProcedureReturn SpecialFolderLocation
EndProcedure
Procedure CreateStream(Chemin_ou_CheminFichier.s, NomdeFichier.s, *Buffer.i, longueur.l)
Protected Res.l
If CreateFile(0, Chemin_ou_CheminFichier+":"+NomdeFichier)
WriteData(0, *Buffer,longueur)
CloseFile(0)
Res=1
EndIf
ProcedureReturn Res
EndProcedure
Procedure ExtractStream(Chemin_ou_CheminFichier.s, NomdeFichier.s, Destination.s)
Protected Longueur.l, *Buffer.i, Res.l
If ReadFile(0, Chemin_ou_CheminFichier+":"+NomdeFichier)
Longueur=Lof(0)
*Buffer=AllocateMemory(Longueur)
ReadData(0, *Buffer,longueur)
CloseFile(0)
If CreateFile(0, Destination)
WriteData(0, *Buffer,longueur)
CloseFile(0)
Res=1
EndIf
FreeMemory(*Buffer)
EndIf
ProcedureReturn Res
EndProcedure
Procedure.l DeleteStream(Chemin_ou_CheminFichier.s, NomdeFichier.s)
Protected Res.l
Res=DeleteFile(Chemin_ou_CheminFichier+":"+NomdeFichier)
ProcedureReturn Res
EndProcedure
; --------------------------------------------------------------------
; Création d'un Fichier nommé Test.txt sur le bureau
; On écrira le texte :PureBasic
CheminBureau.s=GetSpecialFolderLocation(#CSIDL_DESKTOPDIRECTORY)
CheminFichier.s=CheminBureau+"Test.txt"
If CreateFile(0,CheminFichier)
WriteString(0,"PureBasic")
CloseFile(0)
EndIf
; --------------------------------------------------------------------
; --------------------------------------------------------------------
; Création d'un ADS "Fred.txt" associé au fichier "Test.txt"
Texte.s="Fred, le créateur de PureBasic"
CreateStream(CheminFichier,"Fred.txt",@Texte,Len(Texte))
; --------------------------------------------------------------------
; --------------------------------------------------------------------
; Extraction de l' ADS "Fred.txt" associé au Fichier "Test.txt"
ExtractStream(CheminFichier,"Fred.txt", CheminBureau+"Extract.txt")
; --------------------------------------------------------------------
; --------------------------------------------------------------------
; Supression de l'ADS
DeleteStream(CheminFichier,"Fred.txt")
; --------------------------------------------------------------------