Code: unit antivir_detect; { Antivirus Detector v0.1 [Beta] Author: FlipLab Software© 2006-2009 E-mail: [email protected], [email protected] URL: http://www.fls.com/ About: Вспомогательный модуль для обнаружения установленных антивирусных программ, а также фаерволов. В текщей версии поддерживаются: + ESET SysInspector + ESET Nod32 Antivirus + ESET Personal Firewall + Trend Micro Internet Security + Kaspersky Internet Security 2008 & WorkStation + Agnitum Outpost Firewall + Agnitum Anti-Spyware + Agnitum Host Protection + Malwarebytes' Anti-Malware + Zillya! Антивирус } interface uses Windows; function IsEsetAntivir: Boolean; function IsEsetSysInsp: Boolean; function IsEsetFire: Boolean; function IsTrendMicro: Boolean; function IsKIS2008: Boolean; function IsOutpostFire: Boolean; function IsOutpostAntiSpy: Boolean; function IsOutpostHostProt: Boolean; function IsAntiMalware: Boolean; function IsZillya: Boolean; implementation function GetSys: String; var Gsys: array[0..MAX_PATH] of Char; begin GetSystemDirectory(Gsys, MAX_PATH); Result := Gsys; if Length(Result) > 0 then if Result[Length(Result)] <> '\' then Result := Result + '\'; end; function IsRing0(Device: String): Boolean; var hFile: THandle; begin Result := False; hFile := CreateFileA(PChar(Device), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if (hFile <> INVALID_HANDLE_VALUE) then begin CloseHandle(hFile); Result := True; end; end; function FileExists(const FileName: String): Boolean; var Code: Integer; begin Code := GetFileAttributes(PChar(FileName)); Result := (Code <> -1) and (FILE_ATTRIBUTE_DIRECTORY and Code = 0); end; // ESET SysInspector function IsEsetSysInsp: Boolean; begin if IsRing0('\\.\ESIASDRV') then Result := True else Result := False; end; // ESET Nod32 Antivirus function IsEsetAntivir: Boolean; begin if (FileExists(GetSys + 'drivers\ehdrv.sys')) or (FileExists(GetSys + 'drivers\eamon.sys')) then Result := True else Result := False; end; // ESET Personal Firewall function IsEsetFire: Boolean; begin if (IsRing0('\\.\EPFWNDIS')) or (IsRing0('\\.\EPFW')) or (FileExists(GetSys + 'drivers\epfwtdi.sys')) then Result := True else Result := False; end; // Trend Micro Internet Security function IsTrendMicro: Boolean; begin if IsRing0('\\.\TMACTMON') then Result := True else Result := False; end; // Kaspersky Internet Security 2008 & WorkStation function IsKIS2008: Boolean; begin if IsRing0('\\.\KLIM5') then Result := True else Result := False; end; // Agnitum Outpost Firewall function IsOutpostFire: Boolean; begin if (FileExists(GetSys + 'drivers\afwcore.sys')) or (FileExists(GetSys + 'drivers\afw.sys')) then Result := True else Result := False; end; // Agnitum Anti-Spyware function IsOutpostAntiSpy: Boolean; begin if FileExists(GetSys + 'filt\aswfilt.dll') then Result := True else Result := False; end; // Agnitum Host Protection function IsOutpostHostProt: Boolean; begin if FileExists(GetSys + 'drivers\sandbox.sys') then Result := True else Result := False; end; // Malwarebytes' Anti-Malware function IsAntiMalware: Boolean; begin if (FileExists(GetSys + 'drivers\mbam.sys')) or (FileExists(GetSys + 'drivers\mbamswissarmy.sys')) then Result := True else Result := False; end; //Zillya! Антивирус function IsZillya: Boolean; begin if FileExists(GetSys + 'drivers\ZFMSYS.sys') then Result := True else Result := False; end; end. http://slil.ru/28697335 - Скачать Antivirus Detector v0.1 [Beta] (Delphi Module) Написал на досуге, думаю кому-нибудь пригодится. С удовольствием приму помощь в работе над данным модулем.
Как бы не люблю delphi... тут у тебя не оправданный вызов функции GetSys. Объяви ее как глобальную переменную и перед использованием твоего кода инициализируй. FileExists - очень странная функция...
Спасибо, полезный сорец. Надо будет на С переписать. P.S. Для таких вещей лучше все функции самому импортировать из длл, благо, их немного
Не спорю. Если есть желание перепишите на асм. Сорец пофиксю в ближайшее время и добавлю новые авири. Если не влом,киньте ссылки на авири которые знаете
добавь лучше не проверку сервисов а если найден процесс то хеш его ехе, вдруг так, фейк крутится а вот список с вирустотала a-squared AhnLab-V3 AntiVir Antiy-AVL Authentium Avast AVG BitDefender CAT-QuickHeal DNAScan ClamAV Comodo DrWeb eSafe eTrust-Vet F-Prot F-Secure Fortinet GData Ikarus Jiangmin K7AntiVirus Kaspersky McAfee McAfee+Artemis McAfee-GW-Edition Microsoft NOD32 Norman nProtect Panda PCTools Prevx Rising Sophos Sunbelt Symantec TheHacker TrendMicro VBA32 ViRobot VirusBuster
Вот я как раз тоже зашел об этом написатьхотя в принципе таким образом можно детектировать становленную версию,но тогда нужен помощник,который бы за меня собирал хеши
Открой делфийский файл с объявлением этих функций да посмотри Только есть 2 пункта. 1. Вы часто встречаете фейковые процессы антивирусов? Я - ни разу не видел 2. Все эти действия могут палиться проактивкой
Не в первый раз замечаю что малварь частенько правит подобные файлы. По-моему неплохая мысль для антивирусных компаний набросать фейков и следить за их изменениями...
Всмысле переписать ? Там часто можно встретить "заглушки" для sysenter, соответственно можно вполне использовать их вызов в обход ntdll.
лови. Windows System Call Table (NT/2000/XP/2003/Vista) с Metasploit Очень хорошая таблица, потому что есть прототипы функций. Практически все SDT функции для ntoskrnl.exe и их номера. Для Win Vista могут номера чуть отличаться от оригинала, там уже совсем путаница пошла