Что нового

Простой Антивирус

Ilyialat

Новичок
Сообщения
54
Репутация
2
Всё началось с того, что я искал в инете малопопулярную прогу. В итоге, открыв очередной файл, открылась фотка "неприятного" содержания. Я уже догадывался, что будут хлопоты...
Вирус имел название SSVCHOST. Комп я редко перезагружаю, и за это время успел хватануть с флэшки ещё 1 вирус, написанный на АвтоИт. настал тот час, когда пришлось перезагрузить комп... И настало время бороться с вирусами. Со 2-ым проблем не было, но с 1-ым... Вырубить его не составляло особого труда, но он блокировал и диспетчер задач, и реестр. Вроде бы удалил его из автозагрузки, но всё равно он загружался... И пришла идея мне сделать прогу, которая будет сама бороться с последствиями вирусов... В ходе её написания(чтения разных статей) я узнал, что вирус прописался в запись реестра Shell... Вот так вот.... Ниже приведу пример функций, которые написал... Они избавляют от всякой возни... Кому не лень, подскажите ещё идем для развития... Пока что прога - тупой набор функция, но планирую написать ГУИ....
Буду благодарен за советы!

Код:
#include <array.au3>

Func _Regedit_ctfmon()
	Dim $array[999][3]
	_Regedit_AutorunList($array)
	For $i = 0 To UBound($array) - 1
		If $array[$i][1] == "CTFMON.EXE" Then
			If $array[$i][2] == "C:\WINDOWS\system32\ctfmon.exe" Then
				return 0
			EndIf
		EndIf
	Next
	RegWrite("C:\WINDOWS\system32\ctfmon.exe", "CTFMON.EXE", 'REG_SZ', 'C:\WINDOWS\system32\ctfmon.exe')
	MsgBox(0,'', 'Создали запись ctfmon.exe, перезагрузите комп!')
EndFunc

Func _Regedit_AutorunOfIni()
	Local $tmp_dir = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer"
	If RegRead($tmp_dir, "NoDriveTypeAutoRun") <> "0xFF" Then
		MsgBox(0,"", "Создаю отключение автозапуска")
		RegWrite($tmp_dir, "NoDriveTypeAutoRun", "REG_DWORD", "0xFF")
	EndIf
EndFunc
	
Func _Regedit_Shell()
	Local $tmp_dir = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
	If RegRead($tmp_dir, "Shell") <> "Explorer.exe" Then
		MsgBox(0,"", "Обнаружена изменения в записи Shell, отвечающей за загрузку оболочки Windows!")
		RegWrite($tmp_dir, "Shell", "REG_SZ", "Explorer.exe")
	EndIf
EndFunc

Func _Regedit_TascMgr()
	Local $tmp_dir = "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System"
	If RegRead($tmp_dir, "DisableTaskMgr") == 1 Then
		RegWrite($tmp_dir, "DisableTaskMgr", "REG_DWORD", 0)
		return 1
	EndIf
EndFunc

Func _Regedit_AutorunList(ByRef $array)
	Local $i = 1, $i_array = 0, $tmp_dir
	
	$tmp_dir = "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run"
	While True
		$val = RegEnumVal($tmp_dir, $i)
		If @error <> 0 Then ExitLoop
		$array[$i_array][0] = $tmp_dir
		$array[$i_array][1] = $val
		$array[$i_array][2] = RegRead($tmp_dir, $val)
		$i_array = $i_array + 1
		$i = $i + 1
	WEnd
	
	$tmp_dir = "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run"
	$i = 1
	While True
		$val = RegEnumVal($tmp_dir, $i)
		If @error <> 0 Then ExitLoop
		$array[$i_array][0] = $tmp_dir
		$array[$i_array][1] = $val
		$array[$i_array][2] = RegRead($tmp_dir, $val)
		$i_array = $i_array + 1
		$i = $i + 1
	WEnd
;_ArrayDisplay($array)
	;RegEnumKey()
EndFunc

Func _Regedit_Regedit()
Local $tmp_dir = "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System"
If RegRead($tmp_dir, "DisableRegistryTools") == 1 Then
	RegWrite($tmp_dir, "DisableRegistryTools", "REG_DWORD", 0)
	return 1
EndIf
EndFunc

Func _Windows_Autorun()
	Local $tmp = @HomeDrive & "\autoexec.bat"
	If FileExists($tmp) Then
		MsgBox(0, "", "Удаляю файл " & $tmp)
		FileDelete($tmp)
	EndIf
	
	Local $tmp = @HomeDrive & "\autorun.inf"
	If FileExists($tmp) Then
		MsgBox(0, "", "Удаляю файл " & $tmp)
		FileDelete($tmp)
	EndIf
	
EndFunc
	
Func _Windows_Explorer()
	If ProcessExists("explorer.exe") == 0 Then Run("C:\WINDOWS\explorer.exe")
EndFunc
	
Func _Windows_Ctfmon()
	If ProcessExists("ctfmon.exe") == 0 Then Run("C:\WINDOWS\ctfmon.exe")
EndFunc
	
_Windows_Explorer() ;запускает explorer.exe
_Windows_Ctfmon() ;запускает ctfmon.exe
_Windows_Autorun() ;проверяет наличие файлов автозагрузки и удаляет их
_Regedit_Shell() ;провярет запись shell там могут быть вирусы или отключен explorer.exe
_Regedit_AutorunOfIni() ;Вырубает запуск autorun.ini на всех дисках
_Regedit_Ctfmon() ;Проверяет наличие записи ctfmon.exe
_Regedit_TascMgr() ;Убирает диспетчер задач отключен администратором
_Regedit_Regedit() ;Убирает реестр отключен администратором


Добавлено:
Сообщение автоматически объединено:

Кстати статьи:
http://www.windxp.com.ru/confreg.htm
http://www.windxp.com.ru/autop.htm
http://bezopasnik.org/info/13.htm
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
Re: "Антивирус"

Кому не лень, подскажите ещё идем для развития...
1. Включил ПК, зашел под пользователем
2. Запустилась программа
2.1. просмотр старых записей о системе
2.2. сравнение старых записей о системе с актуальной системой
3. Нашли изменения в системе
3.1. Вывод сообщения + временная блокировка изменений
3.2.1. Если разрешили - все впорядке - разрешаем
3.2.2. Если не разрешили - грохаем, но не трогаем что было.
4. Выкл пк - сохранение актуальных настроек в запись.

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

ЗЫ: прежде чем делать можно еще поинтересоваться есть ли у пользователя админ права.
 
Автор
I

Ilyialat

Новичок
Сообщения
54
Репутация
2
Re: \"Антивирус\"

Ага, да, я думал об этом,
Автозагрузка, проверка на
_Windows_Explorer() ;запускает explorer.exe
_Windows_Ctfmon() ;запускает ctfmon.exe автозагрузка
Вдруг вирус, лень самому запускать)
Да-да, объединение в прогу, лог, настройки(можно через ини, меня реестр бесит =))
Интересуют ещё функции) Например, не только в "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" Shell
Возможны угрозы. Там ещё я 2 видел где-то =) Просто вирусу пользовался шелом, вот я и сделал функцию) Скорее всего завтра буду дальше писать =)
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
Re: "Антивирус"

Ilyialat
Интересное начало...
1. При удалении autorun.inf (FileDelete) желательно проверить его атрибуты или сразу сбросить атрибуты, к тому же желательно неуспешное выполнение функции записывать в лог, потому что неудаление может быть по разным причинам.
2. Удаление/изменение в реестре тоже проверять на успех.
3. Почему проверяется только раздел \Run в реестре? А как же \RunOnce? В нём можно записать один раз, после перезагрузки при выполнении запись удаляется, но ни кто не мешает её восстанавливать.
4. Можно ещё проверять/выводить данные в C:\WINDOWS\system32\drivers\etc\hosts, стандартный формат - одна строка "127.0.0.1 localhost" и закомментированные описания, если что-то иное появляется обязательно предупредить.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Re: \"Антивирус\"

кстати , я тоже задумался над такой прогой. есть размышления по этому поводу
помимо реестра есть папки startup, из которых будет производиться загрузка. помимо этого в самом реестре возможно создание параметра load по адресу
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows
который позволяет запускать тот же банер или любую программу до входа пользователя в систему.(сам баловался на своем компе , вешаю в этот параметр самописный банер :smile:). параметр работает и на ХР и на семерке. а также параметр run , который запускает прогу после входа пользователя.
возможно так же создание параметра shell по адресу
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Winlogon
который так же будет запускать программу. (мой бесплатный антивирь блокирует создание этого параметра)
и это еще не все места. возможен запуск вируса через контекстное меню. тоже нужно учесть.
к чему я пришел: придется создать прогу, которая составит список автозагрузки. учитывая параметры реестра, которые я упомянул и другие. так же учитывая папки startup (их две). после этого запретить любую автозагрузку системой.
делается это через реестр .
Код:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer]
"DisableLocalMachineRun"=dword:00000001
"DisableCurrentUserRun"=dword:00000001
"DisableCurrentUserRunOnce"=dword:00000001
"DisableLocalMachineRunOnce"=dword:00000001
автозагрузка будет осуществляться нашей программой. при каждой установке новой программы, которая прописывается в автозагрузку , наша программа сканирует ветки автозагрузки и папки startup и при входе в систему выдает запрос на запуск новой программы. если есть добро, то вносит его в свой список автозагрузки.
наша программа может загружаться все тем же параметром load
и опять же надо следить чтобы не были перезаписаны этот параметр и параметр shell и userinit по адресу
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
к тому же следует учесть что могут быть подменены файлы userinit и taskmgr, а значит нужно будет следить и за этим.
можно сделать так, что наша программа будет как служба загружаться. это исключит возможность перезаписи ее автозагрузки из параметра load
 
Автор
I

Ilyialat

Новичок
Сообщения
54
Репутация
2
Спасибо за идеи) Кстати, а как узнать, какая именно программа изменяет запись реестра?
Это, наверное, уже в тему фаерволов лезть надо) Перехват событий и т.п =)
AnVir не показал мне, что в Shell находится SSVCHOST)Так что в некоторых местах у AnVir-a изъяны)


Добавлено:
Сообщение автоматически объединено:

Joiner,
для сисадминов самое то прога =) Кстати, сейчас просто вирусам трудно очень на комп попасть.... Автозапуск на флэхах и дисках у большинства отключен, но не у всех) Антивирус стоит, но тоже не у всех) Ну вот и все пути попадания вира вроде) Ещё заражённый объект, но таких вирусов уже мало, наверное)
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
чаще бывает так. пользователь качает файл, запускает (или эта дрянь запускается через браузер) и после перезагрузки получает "привет" на экране
то есть до перезагрузки произошла запись в реестр и копирование файла банера в скрытую папку(ну или куда-нить еще). если автозагрузка напрочь отключена, то уже из веток типа run запуска не будет, но остается shell и userinit в Winlogon и папки startup. прога может в при выключении перезаписывать значения и очищать папки автозагрузки, проверять на "правильность" файлы userinit,taskmgr. при загрузке системы если прога будет грузиться до входа пользователя, то и проверка файла explorer.exe. если есть факт подмены, то делать замену на настоящие из нашего бэкапа.
в последнее время банеры грузятся на комп жертвы без баласта. то есть нет вирусов. просто банер-вымогатель. раньше был целый букет. поэтому задача предотвратить блокирование системы банером, а сканирование системы на вирусы это уже должно быть правилом..для этого есть бесплатные утилиты.

мысль такая пришла. можно прогой и explorer.exe запускать и userinit.exe. если уж делать "свою" автозагрузку, то по полной :smile:
 

ynbIpb

Скриптер
Сообщения
399
Репутация
110
Не используйте абсолютные пути, не у всех винда на диске C:\
Есть же макросы...
 
Автор
I

Ilyialat

Новичок
Сообщения
54
Репутация
2
@HomeDrive & У меня так =) Пришёл домой, буду кодить =)
Хм... Кстати думал, нужна ли она или нет(прога моя)... Ну, пускай будет, не помешает)


Добавлено:
Сообщение автоматически объединено:

Прочитал все советы... Ухх, работы хватит до конца дня =) Кстати, пока что решил создать ГУИ через
Gui_Ini() а после функции вроде _Regedit_Ctfmon редактируют гуи. Лучше решения не нашёл)


Добавлено:
Сообщение автоматически объединено:

Нужна помощь с ГУИ... Ничего не могу придумать! Вот вариант:
85a3bab791c08fe631df96a1d51f5015.jpg


Добавлено:
Сообщение автоматически объединено:

Мне кажется, топик уже надо переводить в раздел разработок =)
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
Ilyialat
а как узнать, какая именно программа изменяет запись реестра?
Очень просто, также как и в AnVir, делается кэш текущих записей, потом делается сравнение и если имеет место разница, то выдать диалог разрешить эту запись или нет. Хотя я бы не стал изобретать велосипед, лучше найти недостатки в AnVir и попытаться их покрыть дополнительным скриптом. Почему так: потому что у AnVir слишком сильный функционал, предлагает убить процесс и ещё запретить добавлять указанную запись. И кроме этого составной датчик в трее позволяет следить за своими же скриптами в случае если неправильно написанный цикл начинает нагружать процессор.

На счёт примеров, посмотри ещё это TweakerXP
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
я бы вообще без окна обошелся. зачем? если наша программа активно следит за реестром, то в нем ничего лишнего (в автозагрузке) не будет. Ilyialat, лучше время потратить на разработку основных функций.

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

---Zak---

Скриптер
Сообщения
455
Репутация
120
2 joiner - узко как-то реестр.
А как же:
  • C:\Documents and Settings\All Users\Главное меню\Программы\Автозагрузка
  • C:\Documents and Settings\<имя пользователя>\Главное меню\Программы\Автозагрузка
  • "Планировщик задач"
  • Можно еще следить за "host", "надстройки IE" или там еще какие модули браузеров.

GUI можно взять как сделали в Ccleaner: - лично мне там вполне понятно - где какая строка находится.

 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
joiner [?]
помимо реестра есть папки startup, из которых будет производиться загрузка.
наша программа сканирует ветки автозагрузки и папки startup
---Zak--- [?]
узко как-то реестр.
:smile:

"надстройки IE" или там еще какие модули браузеров.
в случае подгрузки зараженного модуля банер всплывает в IE.

насчет назначенных заданий, то папка C:\WINDOWS\Tasks. в принципе можно(нужно) ее включить в сканирование. но я лично не видел и не слышал что банер грузится через назначенные задания. я вижу в программе "охотника за банерами"..насчет вирусов есть более серьезные средства.
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
joiner [?]
но я лично не видел и не слышал что банер грузится через назначенные задания.
Эээээх... не найти мне свой скрипт по этому поводу, но суть была такая (цитата из моего письма в выше стоящие инстанции):

Как выяснилось позже работали пользователи (домен из 40 ПК) в таком режиме на протяжении полугода и никто ничего не жаловался. А режим был серьезный - зоопарк был хороший и с чего начинать аж глаза разбегались. Спасибо AutoIt, который быстренько справился со своей работой в виде запуска скрипта. Хотя что было - это уже совсем другая история.

PS: скрина с "планировщиком задач" к сожалеению найти не могу...
PSS: а вы хотите сделать антивирь исключительно для баннеров ???
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
---Zak--- [?]
а вы хотите сделать антивирь исключительно для баннеров
лично я не хочу писать антивирь http://autoit-script.ru/index.php/topic,5000.msg74631.html#msg74631 :smile:
хотелось бы антиблокировщик.
Ilyialat [?]
В итоге, открыв очередной файл, открылась фотка "неприятного" содержания.
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
2 joiner
Я не настаиваю - просто предлагаю... раз делать, то учитывая все моменты, которые могут попасть под загрузку в системе.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
ну так и я про то же. но это не антивирь
 
Верх