win32: autorun.inf viruses

Submitted by olecom
on February 17, 2010 - 12:51pm

If you still have whose "autorun.inf puppies", which are being run by office rats, after all install && update && upgrade of the so called "anti-virus" software. Please, welcome!

Достали автораны и жирные ненасытные обновлениями антивирусы, которые до сих пор не могут с ними ничего поделать? Добро пожаловать!

for visible process open with "cscript" более удобен для видимой работы

p.s. Where are flash drives WITH write-disable switch, dear anti-virus agenda ?! Maybe this is problem of my backward country side?

Moving of the read-only folders doesn't work. Thus only notices are echoed.

png showing working window: http://174.142.248.143:8008/ftp/kill-autorun.png
http://174.142.248.143:8008/ftp/_kill-autorun%2bshow_hidden_.wsf :

<package><job id="anti-autorun"><script language="JScript">
   WScript.Echo("Начинаем следить за autorun вирусами на флэшках. \
Рекомдации по пользованию флэшками: хранить программы и папки с большим \
количеством файлов по возможности в архивах (ZIP, RAR). Корневая директория \
должна содержать только поддиректории. Следить за спонтанно появляющимися \
файлами и немедленно их удалять в менеджере файлов (Total Commander, \
FAR)."+String.fromCharCode(10,13));
	var fso = new ActiveXObject("Scripting.FileSystemObject"), c = 0, status;
	do {
		if (fso.Drives.Count == c) {
			WScript.Sleep(500);
			continue;
		}
		var e = new Enumerator(fso.Drives), s="", i, fo, fe;
		c = fso.Drives.Count, status = 0;
		WScript.Echo("Число дисков изменилось. Проверяем...");
		for (; !e.atEnd(); e.moveNext()) {
			if ("A" == e.item().DriveLetter) e.moveNext();
			i = e.item();
			s = i.DriveLetter;
			if (!(1 == i.DriveType && i.IsReady)) continue;
			if (fso.FileExists(s+":\\autorun.inf")) {
				try { 
					fo=fso.GetFile(s+":\\autorun.inf");
					if (fo.Attributes & 1) fo.Attributes -= 1;
					delete(fo);
					fso.DeleteFile(s+":\\autorun.inf");
					WScript.Echo("Обезврежен: "+s+":\\autorun.inf");
				} catch (j) {
					WScript.Echo("ВНИМАНИЕ! "+s+":\\autorun.inf НЕ ОБЕЗВРЕЖЕН!");
				}
				status = 1;
				try {
					fso.CreateFolder(s+":\\!!!_ВИРУСЫ-удалять\\")
				} catch (j) {}
				try {fso.MoveFile(s+":\\*.exe", s+":\\!!!_ВИРУСЫ-удалять\\");
					WScript.Echo("подозрительные EXE файлы");
				} catch (j) {}
				try {fso.MoveFile(s+":\\*.pif", s+":\\!!!_ВИРУСЫ-удалять\\");
					WScript.Echo("Подозрительные PIF файлы");
				} catch (j) {}
				try {fso.MoveFile(s+":\\*.inf", s+":\\!!!_ВИРУСЫ-удалять\\");
					WScript.Echo("Подозрительные INf файлы");
				} catch (j) {}
				try {fso.MoveFile(s+":\\*.dll", s+":\\!!!_ВИРУСЫ-удалять\\");
					WScript.Echo("Подозрительные DLL файлы");
				} catch (j) {}
				try {fso.MoveFile(s+":\\*.cmd", s+":\\!!!_ВИРУСЫ-удалять\\");
					WScript.Echo("Подозрительные CMD файлы");
				} catch (j) {}
				try {fso.MoveFile(s+":\\*.bat", s+":\\!!!_ВИРУСЫ-удалять\\");
					WScript.Echo("Подозрительные BAT файлы");
				} catch (j) {}
				try {fso.MoveFile(s+":\\*.ini", s+":\\!!!_ВИРУСЫ-удалять\\");
					WScript.Echo("Подозрительные INI файлы");
				} catch (j) {}
				try {fso.MoveFile(s+":\\*.wsf", s+":\\!!!_ВИРУСЫ-удалять\\");
					WScript.Echo("Подозрительные WSF файлы");
				} catch (j) {}
				try {fso.MoveFile(s+":\\*.vbs", s+":\\!!!_ВИРУСЫ-удалять\\");
					WScript.Echo("Подозрительные VBS файлы");
				} catch (j) {}
				fo = fso.GetFolder(s+":\\!!!_ВИРУСЫ-удалять\\");
				fe = new Enumerator(fo.files);
				if ( fo.files.Count > 0) {
					status++;
					for (; !fe.atEnd(); fe.moveNext()) {
						i = String(fe.item());
						if(!("!" == i.substring(i.length-1,i.length))) {
							try {
								if (fe.item().Attributes & 1) fe.item().Attributes -= 1;
								WScript.Echo("Перемещаем "+fe.item().ShortName+" -> !!!_ВИРУСЫ-удалять\\"+fe.item().ShortName.substr(0,fe.item().ShortName.length - 1)+"!");						
								fso.MoveFile(i, i.substr(0,i.length - 1)+"!");
							} catch (j) {
								WScript.Echo("Не вышло, пробуем удалить...");
								try { fso.DeleteFile(i); } catch (j) {
									WScript.Echo("Тоже косяк. Удалять Тоталом!");
								}
							}
						}
					}
				} else fo.Delete();
				} /* autorun */
				fo = fso.GetFolder(s+":\\");
				fe = new Enumerator(fo.SubFolders);
				for (; !fe.atEnd(); fe.moveNext()) {
					var n = String.fromCharCode(10,13), d;
					i = fe.item();
					d = String(i);
					if (i.Attributes & 2) {
						i.Attributes -= 2;
						status |= 8;
					}
					if (i.Attributes & 4) {
						i.Attributes -= 4;
						status |= 16;
					}
					if (8 < status) {
						status &= 3;
						WScript.Echo("!! Найдена невидимая (системная) директория: " + n + "=================================================" + n + i + " ! Если это KALBA, RECYCL*, SETUP -- удалять, это вирусы!" + n + "=================================================");
						try { 
							fso.MoveFile(i, i+"_возмжно_скрываются_ВИРУСЫ");
						} catch (j) {
							WScript.Echo("Переименовать не получилось.");
						}
					}
				} /* hidden + system attributes */
		} /* drives -> flash */
		if (!status) WScript.Echo("Проверка ничего не выявила, пока...");
	} while(1);
</script></job></package>