Вверх ↑
Этот топик читают: Гость
Ответов: 9
Рейтинг: 1
#1: 2012-01-09 23:49:13 ЛС | профиль | цитата
Описание простое - что-то вроде сканера ищущего вирусы. (Наверное надо было назвать Antivirus Scaner)
Моя первая, более или менее, нормальная схема.

Add(MainForm,2953706,21,105)
{
Width=622
Height=317
Color=16777215
Caption="Virus Scaner"
BorderStyle=3
Icon=[ZIPBE25000078DAED994148146114C7BF6D8D55222C8CDD55D7DD92352BB224090ACA2D41E8D2AD4E76D843D72EEAA108D225A14B0AE221D0442922E9200A1D4490B64C23C82E51EA25D643051A219820116EEF3733810CB3B6ABCDBA0BF3647CCB38F3BEFFFBBEF7FEEFBD552997FCD4D62AF97D500D5529E5554A1D914B6EA9A8D2EF6B724939E288238E38E2C85665576969E981B2B2B2C315151565757575BBF3093B985B5B5B6FAEAEAEAE0D0E0E3E123FAAF3C4070D7B7373F3ED9595955F4943FAFAFA9EE6810F96D8F3C4874DB1E7B80F6961CF551FE01972351DECB9E8031C09CF2433945CF181D88123935B107C080402C743A1903F180C56F2B9BCBCFC24977CAE115DE5F3F9BCE170D863177EF68F7D04CB567CE8E9E979DED9D9D93F3131F1767E7EFECBECECEC37AEB9B9B9AFD3D3D31F0606061E3734345C618D929292BDDAA895633EA423F8128D46AF4BBE05ED88B96CF80047F4F7F73F21B624E60AF3D1074462ED0D3EE4D2392C2E2EAE4E4E4E7E1A1D1D7D29D78BE1E1E1D78944E2C766B92FB97D88FAB3933E1013BDBDBD43C23517FD7EFF5130890EC9FE86C5C6D9582C763F951FD41DE1ADFD3BC54BE08A4422D7047B20452CB8A98FF8363535F5D1FC3E7C257F3FC57376F900A7C39156FB0E76C9C37DFFB223368A04E77938D56CA7A3A3E39E5D6780509BE077F3BA46CC04D2B553595959DCD4D474C38A57A97376E1A7AE529BCCB92A6B5EC8903F5C9C2539BED1D6D2D2D24FB97FDA2EFCAC499C6E5C736C6CEC3DB991A92DAFD7EBEBEAEA7A683E0362CB2EFCF432F4031BD71B1919890BCF1CCCD4163144BC9BF1CB1E45B2891F7E872333B545FFD3D2D2722B9BF8A99366DEA036C1EF5BE8D54BDADBDB3B2DF0D7DBB8FF55708499F7A94D99F236B3C6F8F8F83B330FCB1A67ECC24FFF4E0F6CDE33EA2AB52983732C923EFAAA79CE9B9999F92CB178CC2EFCCC1EF4EF56B597BA0AAE74EBA0E4FD2BB31D6627F6C8E619B3DA1C43083D01DC07AFA49A4BF00FEC52EF9E99DF87FBE5FD7376CFA0F006B387D58C4F6E5357C108BFE30BCF93ABC43B3163B5EF487777F703DEC9C298EC626E62F648D5CB5157A94DF03B1C09CF90ABA9BED730FA861362BB201B73BE11C335CC1EDB9D5F161616BE3736365E96B8DF93CDEF2A98F9F0613BF319FB0EF674FA56BBCE811985D9C3DC176D26E42AF14ECC647BDFADBE73A46767F620DED953F059CD08F03B1C09CF18B95AA07247DCF8418DA607864BE9658CAB9EBA4A6D82DFF3EC7F208E38E288239AE86CFC1FF46F43AFB5E97A39A2EB4448D7F1625DB77B74ADDC867619F7B1C5734A45B4F7942AD6EC28E5D1EC0A216BEBA83B9A5E772563DAFAEE64DCD0094D7B52EA65CBFB7FDFBB6BD8891976E34997AE0BB5F5049086430069B8044848D3EBAA6D1BFBF607888E9E59]
Position=1
link(onCreate,6401369:doLoad,[(167,125)(167,34)])
}
Add(MultiElementEx,6401369,280,28)
{
@Hint=#17:Virus base loader|
@Color=16755285
link(onLoad,1304213:doAdd,[])
link(onFileAccessError,13039462:In,[])
}
BEGIN_SDK
Add(EditMultiEx,3635503,21,21)
{
WorkCount=#6:doLoad|
EventCount=#6:onLoad|41:onFileAccessError=Файл hash.vdb не найден|
Width=160
Height=102
link(doLoad,5548349:doFileExists,[(42,27)(42,48)])
}
Add(FileStream,4140657,35,77)
{
FileName="hash.vdb"
link(onLoad,4317369:doDeCompress,[(75,83)(75,90)])
}
Add(StreamConvertor,12585852,133,77)
{
Mode=6
link(onResult,3635503:onLoad,[(173,83)(173,27)])
}
Add(LZH,4317369,84,77)
{
link(onStream,12585852:doConvert,[])
}
Add(InfoTip,8670772,28,63)
{
Info=#20:Загрузка листа хешей|
Width=148
Height=53
}
Add(FileTools,5548349,63,21)
{
FileName="hash.vdb"
link(onEnd,3016481:doEvent,[])
}
Add(IndexToChanel,3016481,105,21)
{
link(onEvent1,3635503:onFileAccessError,[(159,27)(159,34)])
link(onEvent2,4140657:doOpen,[(149,34)(149,58)(23,58)(23,83)])
}
END_SDK
Add(LineBreak,16446509,-21,126)
{
Caption="exit"
link(Out,2953706:doClose,[])
Primary=[13039462,343,-91]
}
Add(StrList,1304213,371,28)
{
@Hint=#30:загруженная база хешей вирусов|
@Color=16755285
}
Add(ButtonRush,1691435,273,140)
{
@Color=65535
Left=5
Top=5
Width=175
Height=20
Font=[Tahoma,8,0,0,204]
Hint="Какую папку?"
HintManager="hm1"
ColorText=16711680
GradientStyle=0
BorderWidth=0
ColorTextOver=7566195
BorderColorOver=15780518
ShadowOffsetOver=0
GradientStyleOver=0
ColorFromDown=16777215
ColorToDown=0
ColorTextDown=5789784
BorderColorDown=16711680
ShadowOffsetDown=0
GradientStyleDown=0
ColorTextDis=12632256
ShadowOffsetDis=0
GradientStyleDis=0
BorderWidthDis=0
Caption="Выбрать место сканирования"
Glyphs=[]
Point(doEnabled)
link(onClick,4989731:doBrowse,[])
}
Add(ChildPanelRush,7904715,21,154)
{
@Hint=#23:Святая святых программы|
@Color=5635925
}
BEGIN_SDK
Add(EditMultiEx,9831823,21,21)
{
Width=146
Height=53
}
Add(PanelRush,13624531,49,28)
{
Left=450
Top=260
Width=164
Height=20
Color=16777215
Font=[Tahoma,8,0,0,204]
Hint="Нажми сюда!"
HintManager="parent.hm1"
ColorTo=0
BorderColor=15780518
GradientStyle=0
Caption="Программа создана в HiAsm"
HAlign=2
Glyphs=[]
link(onClick,5085656:doShellExec,[(93,34)(93,41)])
}
Add(WinExec,5085656,105,28)
{
FileName="http://www.HiAsm.com/"
}
END_SDK
Add(StyleXP,14430748,21,189)
{
}
Add(InfoTip,7575430,259,14)
{
Info=#27:Загрузка базы хешей вирусов|
Width=162
Height=74
}
Add(Edit,8716298,385,140)
{
Left=185
Top=5
Width=425
Color=16777215
Font=[Tahoma,8,0,8421504,204]
Hint="Путь к папке"
HintManager="hm1"
Text=""
Point(doEnabled)
}
Add(Browse,4989731,329,140)
{
Title="Выбор места сканирования"
Edit=1
NewDirButton=1
link(onBrowse,8716298:doText,[])
}
Add(InfoTip,9975523,266,119)
{
Info=#29:Выбор параметров сканирования|
Width=176
Height=109
}
Add(Edit,10604717,329,189)
{
Left=520
Top=30
Width=40
Color=16777215
Font=[Tahoma,8,0,8421504,204]
Hint="Не знаешь - не меняй"
HintManager="hm1"
Text="*"
Alignment=2
Point(doEnabled)
}
Add(GLabel,12754671,271,189)
{
Left=5
Top=30
Width=510
Color=16777215
Font=[Tahoma,8,0,0,204]
Caption="Какой формат файлов сканировать? Например: exe, jpg, rar, zip и т.д. (*) без скобок - все файлы."
AutoSize=1
Alignment=2
VAlignment=0
Antialiased=0
}
Add(FormatStr,3742957,329,273)
{
DataCount=1
Mask="*.%1"
Point(FString)
link(Str1,10604717:Text,[])
}
Add(InfoTip,14704997,266,259)
{
Info=#36:Собственно, сам процесс сканирования|
Width=344
Height=102
}
Add(ButtonRush,12167223,182,273)
{
@Hint=#19:Начать сканирование|
@Color=65535
Left=225
Top=260
Width=175
Height=20
Font=[Tahoma,8,0,0,204]
Hint="Поехали"
HintManager="hm1"
ColorText=16711680
GradientStyle=0
BorderWidth=0
ColorTextOver=7566195
BorderColorOver=15780518
ShadowOffsetOver=0
GradientStyleOver=0
ColorFromDown=16777215
ColorToDown=0
ColorTextDown=5789784
BorderColorDown=16711680
ShadowOffsetDown=0
GradientStyleDown=0
ColorTextDis=12632256
ShadowOffsetDis=0
GradientStyleDis=0
BorderWidthDis=0
Caption="Приступить к сканированию"
Glyphs=[]
Point(doVisible)
link(onClick,10558155:doEvent1,[])
}
Add(Hub,15865795,154,175)
{
OutCount=4
link(onEvent1,1691435:doEnabled,[(220,181)(220,146)])
link(onEvent2,8716298:doEnabled,[(276,188)(276,160)])
link(onEvent3,10604717:doEnabled,[(248,195)(248,209)])
link(onEvent4,12167223:doVisible,[(175,202)(175,279)])
}
Add(ChanelToIndex,8280263,112,175)
{
link(onIndex,15865795:doEvent1,[])
}
Add(InfoTip,8719916,56,147)
{
Info=#56:Блокирование того, что при сканировании не пригодится :)|
Width=169
Height=67
}
Add(Hub,10558155,224,273)
{
OutCount=5
PColor(onEvent4,21930)
link(onEvent1,8280263:doWork1,[(250,279)(250,230)(100,230)(100,181)])
link(onEvent2,3742957:doString,[(284,286)(284,279)])
link(onEvent3,4078340:In,[])
link(onEvent4,9302323:doClear,[(476,300)(476,328)])
link(onEvent5,13882503:doStart,[(262,307)(262,321)])
}
Add(FileSearch,684567,329,315)
{
Ext=""
link(onSearch,14777655:doEvent1,[])
link(onEndSearch,8280263:doWork2,[(373,328)(373,258)(100,258)(100,188)])
link(Ext,3742957:FString,[])
link(Dir,8716298:Text,[(342,243)(391,243)])
}
Add(PointHint,8744855,448,189)
{
Info=#84:Мне кажется, что при маске расширения *.* файлы без расширения не ищутся. Проверить.|
Width=491
Height=25
}
Add(PointHint,13623343,448,140)
{
Info=#41:Нужно добавить проверки на пустоту полей.|
Width=246
Height=25
}
Add(Thread,13882503,287,315)
{
Delay=0
FastStop=0
link(onExec,684567:doSearch,[])
}
Add(ListBox,9302323,714,315)
{
Left=5
Top=70
Width=605
Height=180
Font=[Tahoma,8,0,8421504,204]
Visible=1
DataType=1
ItemHeight=15
BoxDrawManager="bdm1"
Point(doVisible)
Point(doEnsureVisible)
Point(onMouseUp)
Point(String)
link(onChange,3886392:doCalc,[])
link(onMouseUp,7163521:doEvent,[])
}
Add(DoData,15074134,658,357)
{
Data=Integer(1)
link(onEventData,9302323:doVisible,[])
}
Add(FastMathParse,3886392,763,315)
{
DataCount=1
MathStr="%1-1"
ResultType=0
link(onResult,9302323:doEnsureVisible,[(807,321)(807,345)(702,345)(702,370)])
link(X1,9302323:Count,[(769,303)(748,303)(748,393)(727,393)])
}
Add(Hashsum,10620622,427,315)
{
link(onResult,1582898:doFind,[])
}
Add(LineBreak,11101021,616,357)
{
@Hint=#70:Делаем видимым ListBox, куда и будут выводиться найденные файлы-вирусы|
Caption=">>>"
link(Out,15074134:doData,[])
Primary=[4078340,-364,-70]
}
Add(ArrayFind,1582898,476,315)
{
link(onFind,15066127:doCompare,[])
link(Array,1304213:Array,[(482,194)(391,194)])
}
Add(If_else,15066127,525,315)
{
Op2=Integer(-1)
link(onFalse,8287601:doData,[(565,328)(565,321)])
link(Op1,1582898:ItemIdx,[(531,303)(507,303)(507,359)(482,359)])
}
Add(Hub,14777655,371,315)
{
link(onEvent1,4937507:doValue,[(408,321)(408,272)])
link(onEvent2,10620622:doFileHashsum,[])
}
Add(Memory,4937507,574,266)
{
@Hint=#57:На всякий случай храним здесь путь к тому самому файлу...|
@Color=43775
}
Add(DoData,8287601,574,315)
{
link(onEventData,9302323:doAdd,[])
link(Data,4937507:Value,[])
}
Add(InfoTip,13593913,616,245)
{
Info=#78:Вывод файлов-вирусов и их казнь, выбрав файл и вызвав меню правой кнопкой мыши|
Width=323
Height=158
}
Add(IndexToChanel,7163521,812,329)
{
link(onEvent2,3829072:doPopupHere,[])
}
Add(HintManager,724986,21,224)
{
Name="hm1"
Font=[Tahoma,8,0,8421504,1]
HintStyle=0
HintTrack=0
HintBackColor=16777215
}
Add(PointHint,5365162,266,357)
{
Info=#56:Как бы для всего этого дела организовать прогресс бар...|
Width=344
Height=25
}
Add(BoxDrawManager,11239863,21,259)
{
Name="bdm1"
Gradient=1
Gutter=1
SelComboEdit=1
}
Add(PopupMenuEx,3829072,854,336)
{
Menu=#19:Удалить файл вируса|
GutterLineOn=1
Font=[Tahoma,8,0,8421504,204]
Bitmaps=[]
AutoBackClrImg=1
link(MenuItemIdx,9231000:doDelete,[(891,342)(891,356)])
}
Add(FileTools,9231000,896,336)
{
DelToRecycle=1
link(FileName,9302323:String,[(902,324)(822,324)(822,386)(741,386)])
}
Для работы необходимо скачать hash.vdb (1,73мб), который я собрал сам за три часа скачивания интернет страниц и поиска в них блоков.
В файле хеш суммы сжатые по алгоритму Lzh. Количество хеш сумм файлов-вирусов - примерно 98тыс. По идее, количество распознаваемых вирусов ограничено лишь объемом жесткого диска, так что можно легко сделать программу добавляющую в файл hash.vdb новые хеш суммы.

Схему делал не для замены антивирусных сканеров, до коих моему очень далеко, а просто так, попробовать свои силы.

Версия HiAsm на которой рисовалась схема - 4.04 сборка 185 (альтернативная) + полное обновление с SVN, но использованы только компоненты, доступные в простой версии + полное обновление с SVN.

Надеюсь, я нормально описал схему и она не будет удалена из-за несоответствия с правилами размещения. Вроде я читал
карма: 0

1
Голосовали:user_asm
Ответов: 1731
Рейтинг: 68
#2: 2012-01-09 23:50:59 ЛС | профиль | цитата
User, схему в виде файла пожалуйста.
карма: 1

0
Ответов: 9
Рейтинг: 1
#3: 2012-01-09 23:56:05 ЛС | профиль | цитата
Вот http://forum.hiasm.com/forum_serv.php?q=56&id=2856
------------ Дoбавленo в 23.56:
Уже понял, что не через тот тег вставил код, извиняюсь.
карма: 0

0
Ответов: 131
Рейтинг: 15
#4: 2012-01-10 05:38:46 ЛС | профиль | цитата
User, схема - сплошная ошибка, даже на поле не ложится, поправьте плз
карма: 0

0
Ответов: 9
Рейтинг: 1
#5: 2012-01-10 09:36:35 ЛС | профиль | цитата
pardon писал(а):
схема - сплошная ошибка, даже на поле не ложится

Выше уже выкладывал схему в архиве. Исправил схему в первом сообщении.
карма: 0

0
Ответов: 952
Рейтинг: 4
#6: 2012-01-10 20:07:12 ЛС | профиль | цитата
Пожалуй плюсану. Молодец.
Еще бы утилитку для работы с хэшами/файлом хэшей.
карма: 0

0
Ответов: 273
Рейтинг: 29
#7: 2012-01-11 02:51:02 ЛС | профиль | цитата
User писал(а):
По идее, количество распознаваемых вирусов ограничено лишь объемом жесткого диска, так что можно легко сделать программу добавляющую в файл hash.vdb новые хеш суммы.
Оперативкой - файл распаковывается в память. Был 10мб на диске, стал 100мб в памяти. Уже не так весело.
Главный тормоз - вычисление хэша. Это очень медленно. И бессмысленно.
Где ты видел, чтобы вирусы искали по хэшам?
По хэшам можно найти разве что разные винлокеры, трояны и скрипты - то, что входит на твой комп как партизан, прячется, но файлы не трогает.
Они имеют свои exe файлы, потому легко вычисляются. Что ты и ищешь. Но также легко они могут противодействовать такому поиску.
Есть еще вирусы, которые изменяют чужие файлы, прописываясь в них. Их по хэшу нельзя найти, т.к. он меняется при каждом заражении.
Есть еще полиморфы - настоящие призраки во плоти.

Второй потенциальный тормоз: В огромных массивах никто не ищет данные. К ним обращаются по индексам.
Почему?
Сравни: Один и тот же процессор за одну секунду может либо перебрать и сравнить около 150 000 элементов массива (при поиске), либо выдать около 150 000 элементов по индексам (при обращении по индексам).
Число вроде одно и тоже, но разница вот в чем:
В первом случае он перебирает, а во втором выдает результат!
Т.е. в первом случае он переберет один массив в 150000 элементов в секунду и выдаст один найденный элемент, или же переберет 15 массивов по 10000 элементов, и выдаст 15 найденных элементов.
А во втором случае он за то же время выдаст 150000 найденных элементов, причем из массива любого размера: и 10000, и 150000, и 100000000000000 - все равно будет 150 000 успешных поисков в секунду!
Сравни разницу:
Массив 10 000, перебор выдаст 1 результат за 0.07 секунды работы, а индексы 10 000 результатов за те же 0.07 секунд.
Массив 150 000, перебор выдаст 1 результат за 1 секунду работы, а индексы 150 000 результатов за ту же 1 секунду.
Массив 1 500 000, перебор выдаст 1 результат за 10 секунд работы, а индексы 1 500 000 за те же 10 секунд.
Т.е. это офисный антивирус, т.к. он ищет типичных офисных киллеров - скрипты на флешках, винлокеры, exe, маскирующиеся под папки.

Схему можно переквалифицировать в менеджер хэшей - проверять хеши файлол на hdd и dvd и сравнивать их со списком хэшей оттуда же, чтобы найти поврежденные (диски имеют свойство повреждать инфу, даже hdd - не по времени, так по сбоям системы).

Или еще интереснее - более надежный антивирус:
просканировать все exe и dll, добавить их в базу.
При проверке сравнивать хеши.
Если они изменились - это либо обновление, либо вирус, либо сбой.
Спросить у пользователя - если он не менял эти файлы и не обновлял, тогда это почти наверняка сделал вирус или же они повреждены сбоем системы или диска. В любом случае эти файлы уже не годятся - их либо восстанавливать, либо удалять.

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

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

При этом никто не запрещает одновременно с проверкой совпадения хэшей вести и проверку хэшей на вирусы - если есть такое совпадение, почти наверняка это означает, что файл заменил собой один из вирусов.
Базу вирусов пользователи могут пополнять самостоятельно. И в ней тоже, желательно, хранить побольше информации - хэш, оригинальное имя файла вируса, расширение, размер, тип вируса, имя вируса, подробности о работе, дата обнаружения сообществом, количество заражений в сообществе, инфа для восстановления (инструкции для удаления), и т.п.
Некоторые вирусы при таком раскладе можно даже автоматически удалять, т.е. лечить комп! Прогой, сделанной на коленке!
Обязательно следить за реестром и блокировать попытки винлокеров там прописаться. В случае обнаружения - сразу же восстанавливать оригинальные ветки. Тогда после перезагрузки винлокер не сможет вылезти. Также автоматически восстанавливать критичные системные файлы - если вдруг винлокер не станет трогать реестр, а попытается подменить системный файл.

Базы ни в коем случае не грузить в память - память достаточно драгоценный ресурс, да и нет смысла ее использовать для ускорения перебора: подсчет хэша все-равно тормозит собой весь перебор.
Лучше маппить файлы баз в память и парсить налету. А еще лучше - использовать sql3: более универсальна, многократно оптимизирована, легко редактируется, стандартна.
Лучше понизить приоритет процессу до минимального и пустить сканирование в фоне - хэши будут перебираться почти тек-же медленно, зато никому не мешая.
Сканирование не прерывать при обнаружении конфликтов или заражений - просто добавлять их в список, и помечать файлы в базе. Этот список пользователь может редактировать во время сканирования, либо же просмотреть один раз после сканирования, если занят.
Причем не обязательно сразу после сканирования. Пользователь может посмотреть все конфликты и заражения через день, или через неделю.
Просто при наличии конфликтов помаргивать иконкой и все - пользователь сам займется ими, когда найдет время.

Также добавить небольшой планировщик - когда производить сканирование, формировать ли логи, отчеты и т.п.
Прикрутить тесты, настройки скорости, распределения по ядрам и многопоточности - если скорость винта и юзер позволит, можно пустить несколько потоков, забив винт на определенный % потоками чтения.
Если нет - даже одного потока будет много. Рассчет хэша 600мб/с, скорость винта 60мб/с.
В этом случае можно расчет хэша прерывать несколько раз в секунду (алгоритм блочный - реализуется элементарно), чтобы поток чтения не превышал определенной юзером скорости. Точнее не прерывать, а считать несколько блоков, и после отдавать управление, вместо потокового чтения (блок за блоком, пока файл не закончится).

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

Также следует предусмотреть склейку файлов. Многие угонщики паролей приклеиваются в начало жертвы, и при запуске удаляют себя, восстанавливая оригинал жертвы, или же не удаляют себя, а копируют жертву во временную папку и запускают оттуда.
Для них имеет смысл перед сканированием упорядочить базу вирусов по размерам файлов и хэшировать файлы несколько раз - сначала кусок с наименьшим размером в базе, потом кусок с размером побольше, и т.д. пока не будут перебраны все вирусы с размерами меньше размера сканируемого файла.
Это значительно увеличит время сканирования, но позволит поймать таких пиявок.
Уйдут только более сложные - которые редактируют PE-заголовок файла-жертвы, прописываясь в новых секциях, или же те, кто шифрует себя после склейки (даже простейшим upx)/ Их можно было бы перехватить при распаковке. Но не стоит - это уже внедрение антивируса в систему, так недалеко и до настоящего антивируса.

Также в базы внести поле исключений, где будет помечаться (с символами подстановки *,?,[|] и т.п.), что файл исключен - т.е. даже если он заражен или имеет конфликт, в список конфликтов не попадет и иконку мигать не заставит.
Также завести отдельную базу исключений, куда заносить пути исключения, имена файлов для исключения, расширения. Т.е. Если путь проверяемого файла совпадает с путем в базе исключений - пропустить файл. Также и имя, или расширение.

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

Для централизованного обновления базы, нужен сайт или форум, где пользователи смогут выкладывать новые хэши вирусов, прикладывая зараженные файлы.
Эту функцию даже можно встроить в программу: Отправить зараженный файл для проверки в лабораторию?
При проверке тупо скриптом отсылать на virustotal и смотреть результат (также скриптом). Если вирус - добавляем хэш в базу обновления, если не вирус - помечаем хэш как безопасный и добавляем в базу обновления.
С этого же сайта раздавать обновления базы вирусов.

При обновлении локальную базу не заменять целиком, а дополнять из базы обновления. Если в локальной базе есть хэши, которые в базе обновлений помечены как безопасные - спрашивать: Данный хэш был отнесен к безопасной категории, это не вирус, а системная программа (чит/патчер). Хотите его пометить как безопасный, пропустить или удалить из базы вирусов?

Это тянет даже на коммерческую реализацию. Интересная получилась штука.
Простая как кирпич - никаких тебе сервисов, драйверов, анализов сигнатур, распаковщиков, слежки за процессами, анализа трафика.
И надежная - наблюдаем только за потенциальными жертвами большинства вирусов, exe/dll-файлами. Заодно защищаем их от повреждений.
И portable - настройки можно хранить в ini, в систему никак не внедрялись, ни драйверов, ни сервисов.

Можно позиционировать как легкий защитник exe/dll с функциями восстановления и простейшим антивирусом.
От серьезных вирусов не спасает, зато предупредит о повреждении или заражении файла, и даже может их восстановить.
карма: 0

0
Ответов: 9
Рейтинг: 1
#8: 2012-01-12 11:32:39 ЛС | профиль | цитата
tomas, в интернете я видел пример такой, только консольной, программы написанной на Паскале, так и пришла в голову идея попробовать сделать нечто подобное на HiAsm. Насчет сайта или сервера для получения от пользователей новых хешей и других предложенных тобой идей это верная мысль, но я не собирался делать полноценный антивирус с поддержкой обновлений, это уже из области бизнеса. Необходимо оплачивать хостинг, рекламу продукта... Зато получилась неплохая схема, из которой можно смастерить что-нибудь свое.
Меня заинтересовало это
tomas писал(а):
просканировать все exe и dll, добавить их в базу.
При проверке сравнивать хеши.
Если они изменились - это либо обновление, либо вирус, либо сбой.

в свободное время постараюсь сделать такое.

Кстати, хеши я брал с сайта http://vxheavens.com/ с помощью открытия веб страницы со списком вирусов и поиска текста между блоками <tt> и </tt>. Всего на том сайте 271094 вируса (45 гб.), которые можно скачать по торренту.
карма: 0

0
Ответов: 7
Рейтинг: 0
#9: 2012-02-24 12:17:27 ЛС | профиль | цитата
не плохо,только есть ошибки в программе(2 ошибки) из а этого сама программа не запускается.
карма: 0

0
Ответов: 42
Рейтинг: 1
#10: 2012-07-13 11:11:10 ЛС | профиль | цитата
Схема интересная однако вирусов не ищет через виртуалку поставил (там мелкие трояны и винлокиры) ничего скан не нашел. Хотя если довести дело до ума думаю получиться отличный проект.
карма: 0

0
Ответов: 313
Рейтинг: -9
#11: 2012-07-13 21:37:39 ЛС | профиль | цитата
tomas Тоесть если правельно понял, то чтобы ему ускореть поиск надо не хэш файла искать в масиве, а пустить цикл на масив чтобы тот все перечислил и сравнил, верно?
карма: 0

0
Ответов: 1731
Рейтинг: 68
#12: 2012-07-14 00:29:50 ЛС | профиль | цитата
Так ведь новые вирусяки появились, а базу хэшей не кто не обновлял.
карма: 1

0
Гость
Ответов: 17029
Рейтинг: 0
#13: 2012-07-14 04:52:59 правка | ЛС | профиль | цитата


Редактировалось 5 раз(а), последний 2021-06-22 13:18:00
карма: 0

0
Ответов: 313
Рейтинг: -9
#14: 2012-07-14 08:57:03 ЛС | профиль | цитата
г. Болик всё понял спасибо.
карма: 0

0
14
Сообщение
...
Прикрепленные файлы
(файлы не залиты)