Создаем рекурсивные ярлыки в Windows

в 18:07, , рубрики: ненормальное программирование, папки, рекурсия, ярлыки, метки: , ,

Все мы знаем что такое ярлык.
А что будет если сделать ссылку ярлыка самого на себя?
Создание ярлыка на ярлык приводит к его копированию.
Но что будет если принудительно создать по байтово такой ярлык?

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

Зайти в такую папку обычными файловыми менеджерами будет невозможно.
Создаем рекурсивные ярлыки в Windows
Но тут не обошлось без ярлыка и я расскажу как это сделать и для чего можно использовать.

Предыстория

Когда я учился в университете то было полно времени и я изучал Windows всеми возможными способами.
Перерыл все папки системы, весь реестр, искал глюки и находил их.
Это было давно, но я вспомнил про один интересный «глюк» о котором расскажу в этом посте.

Однажды я заметил что если перетащить любую папку в Пуск=>Все программы, то там создается не ярлык а папка.
Ее можно перетащить оттуда на рабочий стол, она будет выглядеть как папка но вести себя как ярлык.
Это меня озадачило и я начал копать глубже.
Обнаружил что такие папки сами создаются в «Сетевом окружении» и ведут себя так же.

Понял что увидеть «настоящие» внутренности папки с помощью проводника невозможно.
Запустив консоль я смог добраться к файлам внутри.

Там были два файла: desktop.ini и target.lnk
Создаем рекурсивные ярлыки в Windows
Если переименовать или удалить один из файлов то проводник начнет показывает настоящую внутренность.

В файле desktop.ini обнаружил следующий текст:

[.ShellClassInfo]
CLSID2={0AFACED1-E828-11D1-9187-B532F1E9575D}
Flags=2

А ярлык ссылался на ту папку которую я создал в начале.

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

И я понял что мои файлы в такой папке никто не увидит, а получить доступ к своей папки я могу по прямому адресу внутри папки-ярлыка.
Но это не давало защиты персональным файлам, папку все-равно могли удалить и мои данные потеряются.

Я возился дальше с интересной папкой и пробовал заменять файл target.lnk на свой и смотреть что получится.
Можно менять иконку ярлыка и иконка папки тоже менялась.

И тут я создал ярлык на тот же файл desktop.ini и переименовал его на target.lnk
Создаем рекурсивные ярлыки в Windows
Такому эффекту я сразу не поверил, и не понял в чем же дело.
После переименования проводник сразу же выдал ошибку и перезапустился.
Я полез обратно в созданную папку и как только увидел ее то проводник опять вылетел.

Я начал исследовать странный эффект и понял что проводник пытался получить свойства папки-ярлыка и они перенаправлялись на саму папку еще раз в итоге получается зацикливание.
Пробовал заходить в папку разными программами, и даже Total Commander пусть чуть позже, но вылетал при попытке зайти в нее.
Зайти в нее удавалось только с помощью консоли.

И я понял что эта папка будет хорошо хранить мои данные и никто из студентов не сможет даже щелкнуть мышкой на нее чтобы удалить.

Последовательность действий

Дальше я расскажу как сделать такую папку, отвязать привязку к пути, и как создать на флешке такую «защищенную» папку которая бы «работала» как положено на всех компьютерах.

Для того чтобы папка-убийца ярлык работала как положено должно быть следующее:

  • у папки должен быть атрибут System
  • в папке должен быть файл desktop.ini с правильным контентом
  • в папке должен быть ярлык target.lnk который ссылается на файл desktop.ini в этой же папке

При создании такой папки используя проводник есть подводные камни

  • атрибут System для папки должен быть задан до создания внутренних файлов
  • надо сначала записать данные в desktop.ini и только после этого ставить его в папку

Создаем «защищенную» папку которая работает на всех файловых системах Windows

  1. создать пустую папку, желательно не на рабочем столе
  2. создать подпапку и положить туда ваши данные и запомнить путь
  3. задать первоначальной папке атрибут System
  4. создать текстовый файл desktop.txt и записать в него данные как написано выше
  5. переименовать desktop.txt на desktop.ini
  6. создать ярлык на desktop.ini под названием target.lnk и проводник перезапустится

Теперь надо заходить в вашу подпапку только по адресу и желательно не в проводнике (из-за сохранения предидущих путей).
Например в консоли написать explorer.exe <адрес папки> и история не будет сохранена чтобы никто не вычислил путь.

Для автоматизации создания такой папки я написал скрипт:

Dim arg, WSHShell, fsobj, file, link

Set arg = WScript.Arguments
Set WSHShell = WScript.CreateObject("WScript.Shell")
Set fsobj = WScript.CreateObject("Scripting.FileSystemObject")

If arg.Length = 0 Then
WSHShell.Popup "Перетащите папку на этот файл"
End If

If arg.Length > 0 Then

'Задаем атрибут папки Системный
fsobj.GetFolder(arg(0)).Attributes = 1

'Пишем файл desktop.ini
Set file = fsobj.OpenTextFile(arg(0) + "desktop.ini", 2, True)
file.Write "[.ShellClassInfo]" + vbCrLf
file.Write "CLSID2={0AFACED1-E828-11D1-9187-B532F1E9575D}" + vbCrLf
file.Write "Flags=2" + vbCrLf
file.Close

'Создаем ярлык target.lnk который ссылается на desktop.ini
Set link = WSHShell.CreateShortcut(arg(0) + "target.lnk")
link.TargetPath = arg(0) + "desktop.ini"
link.Save
WSHShell.Popup "Папка-убийца создана"
End If

Его надо сохранить в файл под названием mkFolderKiller.vbs и папку перетаскивать на него.

Привязка пути к защищенной папке

Созданная папка будет строго зависеть от ее первоначального адреса.
Если ее переименовать тогда можно будет в нее зайти.
И я нашел решение, хоть и не идеальное, но позволяет менять адрес папки.

Нам надо создать пустую папку в таком месте в которое пользователь не сможет залезть.
Например глубоко в файлах системы (если есть доступ).
Задаем ей атрибут System и пишем туда файл desktop.ini но не спешим делать ярлык.

Теперь на другом диске там где должна быть папка с данными делаем то же, например на D:.
И берем ярлык файла desktop.ini с диска С: и кладем в папку что на диске D:
Только после этого делаем ярлык в папке диска C:

В результате папка что на диске D: будет исполнять свою «функцию» которая нам нужна даже если менять ее адрес.

Защита папки на флешке

Тут особо говорить нечего.
Думаю многие догадались что можно создать папку, в которой будут «защищенные» папки для всех букв алфавита.
А доступ к вашей защищенной папке можете получить только вы, зная полный адрес.

Выводы

Каждый может создать себе эту папку, ради забавы, ради тестов или ради примитивной защиты.

Является ли это надежной защитой?

Конечно же нет, есть много других способов надежнее.
Для опытного пользователя не составит труда разобраться и попасть в такую «защищенную» папку.
Но это озадачит на некоторое время. А простые пользователи и вовсе не смогут попасть туда.

На каких версиях Windows эта папка будет «работать»?

Лично я проводил все эксперименты в университете на Windows XP и 2000.
И со временем на Windows Vista, 7 и Windows 8.
В не зависимости от разрядности системы оно работает на всех версиях.

Приносит ли вред эта папка компьютеру?

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

Если не терпится попробовать

Можете скачать файл по ссылке ShortcutKiller.rar
распаковать его в папку C:TEMP1234 и перезайти в нее.
В архиве есть папка 1 с двумя файлами desktop.ini и target.lnk привязанными только к этому пути.

Надеюсь статься была вам интересна и что у меня получилось хорошо все объяснить.
Я находил еще много разных глюков про которые нигде не написано, может расскажу в другой раз :)

Буду благодарен за замечания об ошибках текста в личку.

Автор: IGHOR


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js