Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Использование алтернативных потоков данных


Автор: mihanik 10.10.2006, 13:40
Привет!

Сразу предупреждаю, что это не вопрос!
Просто хочу поделиться тем, чем немного научился пользоваться...

Сейчас практически везде используюется система Windows XP в различных своих версиях.
Довольно часто на компьютерах с этой системой используется файловая система NTFS, которая позволяет использовать у файла альтернативные потоки данных.
Такие потоки можно размещать абсолютно в любом файле и даже, говорят, каталоге.
(С каталогами правда я не эксперементировал, но поверю на слово.)

Итак!
Я решил попробовать "прятать" информацию от чужих глаз в этих самых потоках.
И у меня получилось!!!

Формат имени альтернативных потоков имеет следующий вид:

имя_файла:имя_потока:атрибут

Т.к. атрибут является не обязательным параметром, то я его не использовал.

Как оказалось, с альтернативными потоками данных на программном уровне можно работать точно так же, как и с обычными файлами, используя стандартные средства бейсика.

Чтобы повторить мой эксперимент вы можете создать проект с единственной формой.
Разместите на нём две кнопки btnSaveMyFile и btnOpenMyFile при помощи которых мы будем записывать и считывать данные.
А также два текстовых поля:
Text1 - для написания "записок", которые будем прятать 
(у этого элемента я поставил свойство MultiLine = True )
Text2 - для указания имени альтернативного потока данных в файле.

Я также "бросил" на форму CommonDialog1 для удобного выбора подопытных файлов.

Ниже текст программы...

Код

Private Sub btnOpenMyFile_Click()
Dim strFileName As String
Dim lngFilesDescriptor As Long
Dim strString As String

    CommonDialog1.ShowOpen
    strFileName = CommonDialog1.Name
    
    strFileName = strFileName + ":" + Text2.Text
    
    lngFD = FreeFile()
    
    Open strFileName For Input As lngFD
    
    Text1.Text = ""

    While Not EOF(lngFD)
    
        Line Input #lngFD, strString
        Text1.Text = Text1.Text + strString + vbCrLf
    Wend
    
    Close lngFD

End Sub

Private Sub btnSaveMyFile_Click()
Dim strFileName As String
Dim lngFD As Long

    CommonDialog1.ShowSave
    strFileName = CommonDialog1.Name
    
    strFileName = strFileName + ":" + Text2.Text
    
    lngFD = FreeFile()
    
    Open strFileName For Output As lngFD
    
    Print #lngFD, Text1.Text
    
    Close lngFD
    
End Sub


Для экспериментов я выбрал первый попавшийся текстовый файл.
мои действия.

1. Открыл этот файл в блокноте, посмотрел на его содержание.
2. При помощи моей проги записал в этот файл свою записочку. (указал в качестве имени дополнительного потока "111")
3. Открыл текстовый файл. ИЗМЕНЕНИЙ В ФАЙЛЕ НЕ ОБНАРУЖИЛОСЬ!!!
4. При помощи своей проги прочитал данные из потока. Данные считались!!!

Мне данный способ использования особенностей файловой системы NTFS очень понравился.
Почему?
Сейчас пишу прогу для заказчика и не уверен в получении с него денюжек...
При помощи этого приёма я смогу сделать свою прогу триальной на пару дней, а затем заставить её не запускаться...
(я точно знаю, что у моего заказчика система XP с файловой системой NTFS).

Сейчас учусь находить список всех альтернативных файловых потоков у конкретного файла.
Мало ли что туда могут записать другие...  smile

Добавлено @ 13:44 
Замечание!!!

Программный код работает, но ошибок пользователя не  ловит.
Поэтому не забывайте правильно выбирать имена файлов и обязательно указывайте имя альтернативного потока.
Подобную защиту наверняка каждый сможет прикрутить сам...

Ниже прикреплю архив с моим эксперементальных проектом...  smile 

Автор: Тутанхамец 11.10.2006, 18:38
Спасибо. Это может быть полезным. smile Даже показываемый в Проводнике размер файлов при дописывании альтернативного потока не меняется. 

P.S. Хотя вообще-то придумка неоднозначная. Я бы предпочел, чтобы чужие проги не могли так прятать данные на моем компе. Ладно еще, если шароварщики свои интересы отстаивают... 

P.P.S. А вообще, по большому счету, зачем это надо? 

Автор: mihanik 12.10.2006, 06:50
Цитата(Тутанхамец @  11.10.2006,  18:38 Найти цитируемый пост)
А вообще, по большому счету, зачем это надо?  


Касаперский, например, в альтернативных потоках  прячет какой-то свой признак проверки файла. (чтобы избежать повторной проверки и уменьшить время проверки всего компа)

Система что-то туда ишет...

Оказывается про эти потоки идёт разговор в сети уже давно.

Попробуй использовать поисковик, как я.  smile 
Столько ссылок вывалится!!!  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)