PDA

Просмотр полной версии : Antivirus Detector v0.1 [Beta] (Delphi Module)


Fliplab
17.02.2010, 16:19
unit antivir_detect;
{
Antivirus Detector v0.1 [Beta]
Author: FlipLab Software© 2006-2009
E-mail: fliplab@gmail.com, fliplab@ya.ru
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)

Написал на досуге, думаю кому-нибудь пригодится. С удовольствием приму помощь в работе над данным модулем.

Gar|k
17.02.2010, 22:04
Как бы не люблю delphi... тут у тебя не оправданный вызов функции GetSys. Объяви ее как глобальную переменную и перед использованием твоего кода инициализируй. FileExists - очень странная функция...

Fliplab
18.02.2010, 11:27
Ок,а fileexists Просто вырезал из sysutils

rankor777
18.02.2010, 13:12
Спасибо, полезный сорец. Надо будет на С переписать.
P.S. Для таких вещей лучше все функции самому импортировать из длл, благо, их немного ;)

Fliplab
18.02.2010, 13:16
Не спорю. Если есть желание перепишите на асм. Сорец пофиксю в ближайшее время и добавлю новые авири. Если не влом,киньте ссылки на авири которые знаете

sn0w
18.02.2010, 13:18
добавь лучше не проверку сервисов а если найден процесс то хеш его ехе, вдруг так, фейк крутится

а вот список с вирустотала

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

Fliplab
18.02.2010, 13:21
Ок.

rankor777
18.02.2010, 13:39
Хэш будет различен в разных версиях антивируса.

Fliplab
18.02.2010, 13:45
Вот я как раз тоже зашел об этом написать:)хотя в принципе таким образом можно детектировать становленную версию,но тогда нужен помощник,который бы за меня собирал хеши:)

Fliplab
18.02.2010, 13:51
Да и фейк процесса также можно впринципе запустить при особом желании:)

Fliplab
18.02.2010, 18:03
Подскажите как переписать кернеливские функции под нтдлл

rankor777
18.02.2010, 20:30
Открой делфийский файл с объявлением этих функций да посмотри ;)

Только есть 2 пункта.

1. Вы часто встречаете фейковые процессы антивирусов? Я - ни разу не видел
2. Все эти действия могут палиться проактивкой ;)

BaalHaddat
19.02.2010, 02:52
Не в первый раз замечаю что малварь частенько правит подобные файлы.
По-моему неплохая мысль для антивирусных компаний набросать фейков и следить за их изменениями...

BaalHaddat
19.02.2010, 02:55
Подскажите как переписать кернеливские функции под нтдлл
Всмысле переписать ?
Там часто можно встретить "заглушки" для sysenter, соответственно можно вполне использовать их вызов в обход ntdll.

Fliplab
19.02.2010, 11:49
Там часто можно встретить "заглушки" для sysenter, соответственно можно вполне использовать их вызов в обход ntdll.
Ты прежде чем советы давать,сам про перехват прочти.

Fliplab
19.02.2010, 11:52
Кернелевская библиотека написана на функциях нтдлл.так вот мне просто надо их описание и т.п

RedFern.89
19.02.2010, 12:04
Хорошая весчь) спасибо)

slesh
19.02.2010, 12:07
лови. Windows System Call Table (NT/2000/XP/2003/Vista) с Metasploit

Очень хорошая таблица, потому что есть прототипы функций. Практически все SDT функции для ntoskrnl.exe и их номера. Для Win Vista могут номера чуть отличаться от оригинала, там уже совсем путаница пошла

Fliplab
19.02.2010, 12:12
BaalHaddat
На счет фейков,в них нет смысла в антивирях:)а темболее наблюдать за ними

Fliplab
19.02.2010, 12:14
slesh Огромное вам человеческое спасибо:)

Fliplab
21.02.2010, 19:59
Вообщем какаято хрень.не могу редактировать свой пост и отвечать на сообщения,точнее могу,но они отображаются пустыми

mailbrush
21.02.2010, 20:11
Вообщем какаято хрень.не могу редактировать свой пост и отвечать на сообщения,точнее могу,но они отображаются пустыми
Слишком много текста. Раздели на два поста.

Fliplab
24.02.2010, 02:55
Ок,попробую.

Fliplab
24.02.2010, 14:36
unit antivir_detect;
{
Antivirus Detector v0.2 [Beta]
Author: FlipLab Software© 2006-2009
E-mail: fliplab@gmail.com, fliplab@ya.ru
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! Антивирус
+ Advanced SystemCare
+ Антивирус Stop!
+ USBGuard
+ AnVir Task Manager
+ Lavasoft Ad-Aware
+ Microsoft Security Essentials
+ McAfee
+ McAfee Personal Firewall
+ SpyHunter
}

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;
function IsAdvancedSysCare: Boolean;
function IsAvirStop: Boolean;
function IsUSBGuard: Boolean;
function IsAnvitTaskMgr: Boolean;
function IsAdAware: Boolean;
function IsMSecEssentials: Boolean;
function IsMcAfee: Boolean;
function IsMcAfeeeFire: Boolean;
function IsSpyHunter: Boolean;

implementation

function ImportKernelFunc(const Name: String): Pointer;
var
KernelModule: THandle;
begin
KernelModule := GetModuleHandle('kernel32.dll');
Result := GetProcAddress(KernelModule, PChar(Name));
end;

function UpperCase(const S: string): string;
asm
push ebx
push esi
push edi
mov esi, eax // s
mov eax, edx
test esi, esi
jz @Nil
mov edx, [esi-4] // Length(s)
mov edi, eax // @Result
test edx, edx
jle @Nil
mov ecx, [eax]
mov ebx, edx
test ecx, ecx
jz @Realloc // Jump if Result not allocated
test edx, 3
jnz @Length3
xor edx, [ecx-4]
cmp edx, 3
jbe @TestRef
jmp @Realloc
@Length3:
or edx, 2
xor edx, [ecx-4]
cmp edx, 1
ja @Realloc
@TestRef:
cmp [ecx-8], 1
je @LengthOK // Jump if Result RefCt=1
@Realloc:
mov edx, ebx
or edx, 3
call System.@LStrSetLength
@LengthOK:
mov edi, [edi] // Result
mov [edi-4], ebx // Correct Result length
mov byte ptr [ebx+edi], 0
add ebx, -1
and ebx, -4
mov eax, [ebx+esi]

@Loop: mov ecx, eax
or eax, $80808080 // $E1..$FA
mov edx, eax
sub eax, $7B7B7B7B // $66..$7F
xor edx, ecx // $80
or eax, $80808080 // $E6..$FF
sub eax, $66666666 // $80..$99
and eax, edx // $80
shr eax, 2 // $20
xor eax, ecx // Upper
mov [ebx+edi], eax
mov eax, [ebx+esi-4]
sub ebx, 4
jge @Loop

pop edi
pop esi
pop ebx
ret

@Nil: pop edi
pop esi
pop ebx
jmp System.@LStrClr // Result:=''
end;

function IsUninstall(const ProgramName: String): Boolean;
var
Str, MBuf, DisplayName: String;
function RegEnum(RootKey: HKEY; Name: String; var ResultList: String; const DoKeys: Boolean): Boolean;
var
I, iRes: Integer;
S: String;
hTemp: HKEY;
Buf: Pointer;
BufSize: Cardinal;
begin
Result := False;
ResultList := '';
if RegOpenKeyEx(RootKey, PChar(Name), 0, KEY_READ, hTemp) = ERROR_SUCCESS then
begin
Result := True;
BufSize := 1024;
GetMem(buf, BufSize);
I := 0;
iRes := ERROR_SUCCESS;
while iRes = ERROR_SUCCESS do
begin
BufSize := 1024;
if DoKeys then
iRes := RegEnumKeyEx(hTemp, I, buf, BufSize, nil, nil, nil, nil)
else
iRes := RegEnumValue(hTemp, I, buf, BufSize, nil, nil, nil, nil);
if iRes = ERROR_SUCCESS then
begin
SetLength(S, BufSize);
Move(buf^, S[1], BufSize);
ResultList := Concat(S, #13#10, ResultList);
Inc(i);
end;
end;
FreeMem(Buf);
RegCloseKey(hTemp);
end;
end;
function RegEnumKeys(RootKey: HKEY; Name: String; var KeyList: String): Boolean;
begin
Result := RegEnum(RootKey, Name, KeyList, True);
end;
function LastPos(Needle: Char; Haystack: String): Integer;
begin
for Result := Length(Haystack) downto 1 do
if Haystack[Result] = Needle then
Break;
end;
function RegValueExists(RootKey: HKEY; Name: String): Boolean;
var
SubKey: String;
n: Integer;
hTemp: HKEY;
begin
Result := False;
n := LastPos('\', Name);
if n > 0 then
begin
SubKey := Copy(Name, 1, n - 1);
if RegOpenKeyEx(RootKey, PChar(SubKey), 0, KEY_READ, hTemp) = ERROR_SUCCESS then
begin
SubKey := Copy(Name, n + 1, Length(Name) - n);
Result := (RegQueryValueEx(hTemp, PChar(SubKey), nil, nil, nil, nil) = ERROR_SUCCESS);
RegCloseKey(hTemp);
end;
end;
end;
function RegGetValue(RootKey: HKEY; Name: String; ValType: Cardinal; var PVal: Pointer; var ValSize: Cardinal): Boolean;
var
SubKey: String;
n: Integer;
MyValType: DWORD;
hTemp: HKEY;
Buf: Pointer;
BufSize: Cardinal;
PKey: PChar;
begin
Result := False;
n := LastPos('\', Name);
if n > 0 then
begin
SubKey := Copy(Name, 1, n - 1);
if RegOpenKeyEx(RootKey, PChar(SubKey), 0, KEY_READ, hTemp) = ERROR_SUCCESS then
begin
SubKey := Copy(Name, n + 1, Length(Name) - n);
if SubKey = '' then
PKey := nil
else
PKey := PChar(SubKey);
if RegQueryValueEx(hTemp, PKey, nil, @MyValType, nil, @BufSize) = ERROR_SUCCESS then
begin
GetMem(Buf, BufSize);
if RegQueryValueEx(hTemp, PKey, nil, @MyValType, Buf, @BufSize) = ERROR_SUCCESS then
begin
if ValType = MyValType then
begin
PVal := Buf;
ValSize := BufSize;
Result := True;
end
else
FreeMem(Buf)
end
else
FreeMem(Buf);
end;
RegCloseKey(hTemp);
end;
end;
end;
function RegGetString(RootKey: HKEY; Name: String; Var Value: String): Boolean;
var
Buf: Pointer;
BufSize: Cardinal;
begin
Result := False;
Value := '';
if RegGetValue(RootKey, Name, REG_SZ, Buf, BufSize) then
begin
Dec(BufSize);
SetLength(Value, BufSize);
if BufSize > 0 then
Move(Buf^, Value[1], BufSize);
FreeMem(Buf);
Result := True;
end;
end;
begin
Result := False;
if RegEnumKeys(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninsta ll', Str) then
while Length(Str) > 0 do
begin
MBuf := Copy(Str, 1, Pos(#13#10, Str) - 1);
Delete(Str, 1, Pos(#13#10, Str) + 1);
if RegValueExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninsta ll\' + MBuf + '\DisplayName') then
begin
RegGetString(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninsta ll\' + MBuf + '\DisplayName', DisplayName);
DisplayName := UpperCase(DisplayName);
if Pos(UpperCase(ProgramName), DisplayName) > 0 then
begin
Result := True;
Exit;
end;
end;
end;
end;

Fliplab
24.02.2010, 14:41
function IsRing0(const 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 DriveExist(const DrivePath: String): Boolean;
var
GetSystemDirectory: function(lpBuffer: PChar; uSize: LongWord): LongWord; cdecl;
GetFileAttributes: function(lpFileName: PChar): LongWord; cdecl;
GSys: array[0..MAX_PATH] of Char;
SysPath: String;
Code: Integer;
begin
@GetSystemDirectory := ImportKernelFunc('GetSystemDirectoryA');
@GetFileAttributes := ImportKernelFunc('GetFileAttributesA');
GetSystemDirectory(GSys, MAX_PATH);
SysPath := String(GSys);
if Length(SysPath) > 0 then
if SysPath[Length(SysPath)] <> '\' then
SysPath := SysPath + '\';
SysPath := SysPath + DrivePath;
Code := GetFileAttributes(PChar(SysPath));
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 (DriveExist('drivers\ehdrv.sys')) or (DriveExist('drivers\eamon.sys')) or (IsUninstall('ESET')) then
Result := True
else
Result := False;
end;

// ESET Personal Firewall
function IsEsetFire: Boolean;
begin
if (IsRing0('\\.\EPFWNDIS')) or (IsRing0('\\.\EPFW')) or (DriveExist('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 (DriveExist('drivers\afwcore.sys')) or (DriveExist('drivers\afw.sys')) or (IsUninstall('Outpost')) then
Result := True
else
Result := False;
end;

// Agnitum Anti-Spyware
function IsOutpostAntiSpy: Boolean;
begin
if DriveExist('filt\aswfilt.dll') then
Result := True
else
Result := False;
end;

// Agnitum Host Protection
function IsOutpostHostProt: Boolean;
begin
if DriveExist('drivers\sandbox.sys') then
Result := True
else
Result := False;
end;

// Malwarebytes' Anti-Malware
function IsAntiMalware: Boolean;
begin
if (DriveExist('drivers\mbam.sys')) or (DriveExist('drivers\mbamswissarmy.sys')) then
Result := True
else
Result := False;
end;

// Zillya! Антивирус
function IsZillya: Boolean;
begin
if DriveExist( 'drivers\ZFMSYS.sys') then
Result := True
else
Result := False;
end;

// Advanced SystemCare
function IsAdvancedSysCare: Boolean;
begin
if IsUninstall('Advanced SystemCare') then
Result := True
else
Result := False;
end;

// Антивирус Stop!
function IsAvirStop: Boolean;
begin
if IsUninstall('Антивирус Stop!') then
Result := True
else
Result := False;
end;

// USBGuard
function IsUSBGuard: Boolean;
begin
if IsUninstall('USBGuard') then
Result := True
else
Result := False;
end;

// AnVir Task Manager
function IsAnvitTaskMgr: Boolean;
begin
if IsUninstall('AnVir Task Manager') then
Result := True
else
Result := False;
end;

// Lavasoft Ad-Aware
function IsAdAware: Boolean;
begin
if (IsUninstall('Ad-Aware')) or (DriveExist('drivers\lbd.sys')) or (IsRing0('\\.\LBD')) then
Result := True
else
Result := False;
end;

// Microsoft Security Essentials
function IsMSecEssentials: Boolean;
begin
if (DriveExist('drivers\mpfilter.sys')) or (IsUninstall('Microsoft Security Essentials')) then
Result := True
else
Result := False;
end;

// McAfee
function IsMcAfee: Boolean;
begin
if IsUninstall('McAfee') then
Result := True
else
Result := False;
end;

// McAfee Personal Firewall
function IsMcAfeeeFire: Boolean;
begin
if (IsRing0('\\.\MPFP')) or (DriveExist('drivers\mpfp.sys')) then
Result := True
else
Result := False;
end;

// SpyHunter
function IsSpyHunter: Boolean;
begin
if IsUninstall('SpyHunter') then
Result := True
else
Result := False;
end;

end.


http://slil.ru/28697354 - Скачать Antivirus Detector v0.2 [Beta] (Delphi Module)

Fliplab
24.02.2010, 14:44
unit AntiVir_Detect_0_3_beta;

{
Antivirus Detector v0.3 [Beta]
Author: FlipLab Software© 2006-2010
E-mail: fliplab@gmail.com, fliplab@ya.ru
URL: http://www.fls.com/
About: Вспомогательный модуль для обнаружения установленных
антивирусных программ, а также фаерволов. В текщей версии
поддерживаются:
+ ESET SysInspector
+ ESET NOD32 Integrity
+ ESET NOD32 On-Access
+ Kaspersky On-Access Scanner
+ Legacy Kaspersky Service
+ DrWeb
+ AVG Anti-Virus
+ Norton (Symantec) AntiVirus
+ Symantec AntiVirus AutoProtect
+ Symantec AntiVirus Content Filtration
+ Avast!
+ McAfee VirusScan
+ Avira AntiVir
+ BitDefender AntiVirus & 2008
+ Spy Sweeper
+ CA Anti-Virus
+ GDATA AntiVirusKit
+ Aston
+ Sophos Antivirus
+ McAffee Framework Self Protection
+ McAffee Enterprise Self Protection
+ McAffee Online Scan Self Protection
+ Antivirus Stop!
+ Zillya! Antivirus
+ Spy Hunter
+ Lavasoft Firewall
+ Quick Heal Firewall
+ PC Firewall
+ Sophos Client Firewall
+ AGAVA Firewall
+ F-Secure Firewall
+ Jetico Firewall
+ ZoneAlarm Firewall
+ CheckPoint Firewall
+ Online Armor Personal Firewall
+ VirusBuster
+ Comodo FireWall
+ Agnitum Outpost Firewall
+ Malwarebytes' Anti-Malware
+ Advanced SystemCare
+ USBGuard
+ AnVir Task Manager
+ Lavasoft Ad-Aware
+ Microsoft Security Essentials
+ Trend Micro Internet Security
}

interface

uses
Windows, WinSvc;

const
// AntiVirus
TREND_MICRO_INET_SEC_ISSUE = 'Trend Micro Internet Security Issue';
MICROSOFT_SEC_ESSENTIALS_ISSUE = 'Microsoft Security Essentials Issue';
LAVASOFT_ADADWARE_ISSUE = 'Lavasoft Ad-Aware Issue';
ANVIR_TASK_MGR_ISSUE = 'AnVir Task Manager Issue';
USBGUARD_ISSUE = 'USBGuard Issue';
SYSTEMCARE_ISSUE = 'Advanced SystemCare Issue';
MALWAREBYTES_ISSUE = 'Malwarebytes'' Anti-Malware Issue';
NOD32_SYSINSPECTOR_ISSUE = 'ESET SysInspector Issue';
NOD32_INTEGRITY_ISSUE = 'ESET NOD32 Integrity Issue';
NOD32_ON_ACCESS_ISSUE = 'ESET NOD32 On-Access Issue';
KLIF_ISSUE = 'Kaspersky On-Access Scanner Issue';
KAVAVP_ISSUE = 'Legacy Kaspersky Service Issue';
DRWEB_ISSUE = 'DrWeb Issue';
AVG_AV_ISSUE = 'AVG Anti-Virus Issue';
SYMANTEC_ISSUE = 'Norton (Symantec) AntiVirus Issue';
SYMANTEC_AUTOPROTECT_ISSUE = 'Symantec AntiVirus AutoProtect Issue';
SYMANTEC_FILTRATION_ISSUE = 'Symantec AntiVirus Content Filtration Issue';
AVAST_ISSUE = 'Avast! Issue';
MCAFEE_ISSUE = 'McAfee VirusScan Issue';
AVIRA_ISSUE = 'Avira AntiVir Issue';
BITDEFENDER_AV_ISSUE = 'BitDefender AntiVirus Issue';
BITDEFENDER_AV_2008_ISSUE = 'BitDefender Antivirus 2008 Issue';
SPYSWEEPER_ISSUE = 'Spy Sweeper Issue';
CA_ISSUE = 'CA Anti-Virus Issue';
GDATA_AVK_ISSUE = 'GDATA AntiVirusKit Issue';
ASTON_ISSUE = 'Aston Issue';
SOPHOS_ISSUE = 'Sophos Antivirus Issue';
MCAFEE_FRAMEWORK_ISSUE = 'McAffee Framework Self Protection Issue';
MCAFEE_ENTERPRISE_ISSUE = 'McAffee Enterprise Self Protection Issue';
MCAFEE_SCAN_ONLINE_ISSUE = 'McAffee Online Scan Self Protection Issue';
STOP_ISSUE = 'Antivirus Stop! Issue';
ZILLYA_ISSUE = 'Zillya! Antivirus Issue';
SPYHUNTER_ISSUE = 'Spy Hunter Issue';
// Firewalls
LAVASOFT_FIREWALL_ISSUE = 'Lavasoft Firewall Issue';
QUICKHEAL_FIREWALL_ISSUE = 'Quick Heal Firewall Issue';
BUHL_FIREWALL_ISSUE = 'PC Firewall Issue';
SOPHOS_FIREWALL_ISSUE = 'Sophos Client Firewall Issue';
AGAVA_FIREWALL_ISSUE = 'AGAVA Firewall Issue';
FSECURE_FIREWALL_ISSUE = 'F-Secure Firewall Issue';
JETICO_FIREWALL_ISSUE = 'Jetico Firewall Issue';
ZONEALARM_FIREWALL_ISSUE = 'ZoneAlarm Firewall Issue';
CHECKPOINT_FIREWALL_ISSUE = 'CheckPoint Firewall Issue';
ONLINEARMOR_FIREWALL_ISSUE = 'Online Armor Personal Firewall Issue';
VIRUSBUSTER_ISSUE = 'VirusBuster Issue';
COMODO_ISSUE = 'Comodo FireWall Issue';
AGNITUM_ISSUE = 'Agnitum Outpost Firewall Issue';

function IsPCProtect: Boolean;
function IsNod32Integrity: Boolean;
function IsNod32OnAccess: Boolean;
function IsEsetSysInspector: Boolean;
function IsKlif: Boolean;
function IsKavAVP: Boolean;
function IsTrendMicro: Boolean;
function IsAntiMalware: Boolean;
function IsZillya: Boolean;
function IsAdAware: Boolean;
function IsMSecEssentials: Boolean;
function IsAdvancedSysCare: Boolean;
function IsAvirStop: Boolean;
function IsUSBGuard: Boolean;
function IsAnvitTaskMgr: Boolean;
function IsSpyHunter: Boolean;
function IsDrWeb: Boolean;
function IsAvgAv: Boolean;
function IsOutpostFire: Boolean;
function IsSymantec: Boolean;
function IsSymantecAutoProtect: Boolean;
function IsSymantecFiltr: Boolean;
function IsAvast: Boolean;
function IsAvira: Boolean;
function IsBitDefender: Boolean;
function IsBitDefender2008: Boolean;
function IsCaAv: Boolean;
function IsGDATA: Boolean;
function IsSpyWeeper: Boolean;
function IsMcAfeeVirScan: Boolean;
function IsAston: Boolean;
function IsLavasoftFire: Boolean;
function IsQuickHealFire: Boolean;
function IsBuhlFire: Boolean;
function IsSophosFire: Boolean;
function IsAgavaFire: Boolean;
function IsFSecureFire: Boolean;
function IsJeticoFire: Boolean;
function IsZoneAlarmFire: Boolean;
function IsCheckPointFire: Boolean;
function IsOnlineArmorFire: Boolean;
function IsVirusBuster: Boolean;
function IsMcAfeeFramework: Boolean;
function IsMcAfeeEenterprise: Boolean;
function IsMcAfeeScanOnline: Boolean;
function IsSophos: Boolean;
function IsComodoFire: Boolean;
function GetProtectProgs: PChar;

implementation

function ImportKernelFunc(const Name: String): Pointer;
var
KernelModule: THandle;
begin
KernelModule := GetModuleHandle('kernel32.dll');
Result := GetProcAddress(KernelModule, PChar(Name));
end;

function DriveExist(const DrivePath: String): Boolean;
var
GetSystemDirectory: function(lpBuffer: PChar; uSize: LongWord): LongWord; cdecl;
GetFileAttributes: function(lpFileName: PChar): LongWord; cdecl;
GSys: array[0..MAX_PATH] of Char;
SysPath: String;
Code: Integer;
begin
@GetSystemDirectory := ImportKernelFunc('GetSystemDirectoryA');
@GetFileAttributes := ImportKernelFunc('GetFileAttributesA');
GetSystemDirectory(GSys, MAX_PATH);
SysPath := String(GSys);
if Length(SysPath) > 0 then
if SysPath[Length(SysPath)] <> '\' then
SysPath := SysPath + '\';
SysPath := SysPath + DrivePath;
Code := GetFileAttributes(PChar(SysPath));
Result := (Code <> -1) and (FILE_ATTRIBUTE_DIRECTORY and Code = 0);
end;

function IsRing0(const 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 RegValueExists(RootKey: HKEY; Name: String): Boolean;
var
SubKey: String;
n: Integer;
hTemp: HKEY;
function LastPos(Needle: Char; Haystack: String): Integer;
begin
for Result := Length(Haystack) downto 1 do
if Haystack[Result] = Needle then
Break;
end;
begin
Result := False;
n := LastPos('\', Name);
if n > 0 then
begin
SubKey := Copy(Name, 1, n - 1);
if RegOpenKeyEx(RootKey, PChar(SubKey), 0, KEY_READ, hTemp) = ERROR_SUCCESS then
begin
SubKey := Copy(Name, n + 1, Length(Name) - n);
Result := (RegQueryValueEx(hTemp, PChar(SubKey), nil, nil, nil, nil) = ERROR_SUCCESS);
RegCloseKey(hTemp);
end;
end;
end;

function RegKeyExists(RootKey: HKEY; Name: String): Boolean;
var
hTemp: HKEY;
begin
Result := False;
if RegOpenKeyEx(RootKey, PChar(Name), 0, KEY_READ, hTemp) = ERROR_SUCCESS then
begin
Result := True;
RegCloseKey(hTemp);
end;
end;

function UpperCase(const S: string): string;
asm
push ebx
push esi
push edi
mov esi, eax // s
mov eax, edx
test esi, esi
jz @Nil
mov edx, [esi-4] // Length(s)
mov edi, eax // @Result
test edx, edx
jle @Nil
mov ecx, [eax]
mov ebx, edx
test ecx, ecx
jz @Realloc // Jump if Result not allocated
test edx, 3
jnz @Length3
xor edx, [ecx-4]
cmp edx, 3
jbe @TestRef
jmp @Realloc
@Length3:
or edx, 2
xor edx, [ecx-4]
cmp edx, 1
ja @Realloc
@TestRef:
cmp [ecx-8], 1
je @LengthOK // Jump if Result RefCt=1
@Realloc:
mov edx, ebx
or edx, 3
call System.@LStrSetLength
@LengthOK:
mov edi, [edi] // Result
mov [edi-4], ebx // Correct Result length
mov byte ptr [ebx+edi], 0
add ebx, -1
and ebx, -4
mov eax, [ebx+esi]

@Loop: mov ecx, eax
or eax, $80808080 // $E1..$FA
mov edx, eax
sub eax, $7B7B7B7B // $66..$7F
xor edx, ecx // $80
or eax, $80808080 // $E6..$FF
sub eax, $66666666 // $80..$99
and eax, edx // $80
shr eax, 2 // $20
xor eax, ecx // Upper
mov [ebx+edi], eax
mov eax, [ebx+esi-4]
sub ebx, 4
jge @Loop

pop edi
pop esi
pop ebx
ret

@Nil: pop edi
pop esi
pop ebx
jmp System.@LStrClr // Result:=''
end;

Fliplab
24.02.2010, 14:47
function IsService(const ServiceName: String): Boolean;
type
_SERVICE_STATUS = record
dwServiceType: DWORD;
dwCurrentState: DWORD;
dwControlsAccepted: DWORD;
dwWin32ExitCode: DWORD;
dwServiceSpecificExitCode: DWORD;
dwCheckPoint: DWORD;
dwWaitHint: DWORD;
end;
SERVICE_STATUS = _SERVICE_STATUS;
PENUM_SERVICE_STATUS = ^ENUM_SERVICE_STATUS;
ENUM_SERVICE_STATUS = packed record
lpServiceName : PChar;
lpDisplayName : PChar;
ServiceStatus : SERVICE_STATUS;
end;
TcsEnumServicesStatus = function(
const hSCManager : DWord; // handle to SCM database
const dwServiceType : DWord; // service type
const dwServiceState : DWord; // service state
const lpServices : PENUM_SERVICE_STATUS; // status buffer
const cbBufSize : DWord; // size of status buffer
const pcbBytesNeeded : PDWORD; // buffer size needed
const lpServicesReturned : PDWord; // number of entries returned
const lpResumeHandle : PDWord // next entry
): Boolean; stdcall;
TcsOpenSCManager = function(
const lpMachineName : PChar;
const lpDatabaseName : PChar;
const dwDesiredAccess : DWord
): DWord; stdcall;
var
EnumServicesStatus: TcsEnumServicesStatus;
OpenSCManager: TcsOpenSCManager;
hSC, hLib: Cardinal;
pStatus: PENUM_SERVICE_STATUS;
pWork: PENUM_SERVICE_STATUS;
cbBufSize: DWord;
pcbBytesNeeded: DWord;
lpServicesReturned: DWord;
lpResumeHandle: DWord;
i: Integer;
s, s1: String;
begin
Result := False;
hLib := LoadLibrary('ADVAPI32.DLL');
if hLib <> 0 then
begin
@EnumServicesStatus := GetProcAddress(hLib, 'EnumServicesStatusA');
if @EnumServicesStatus = nil then
Exit;
@OpenSCManager := GetProcAddress(hLib, 'OpenSCManagerA');
if @OpenSCManager = nil then
Exit;
end;
hSC := OpenSCManager(nil, nil, $0004);
if hSC <> 0 then
try
cbBufSize := 0;
pStatus := nil;
lpResumeHandle := 0;
EnumServicesStatus(hSC, SERVICE_WIN32, SERVICE_STATE_ALL, pStatus,
cbBufSize, @pcbBytesNeeded, @lpServicesReturned, @lpResumeHandle);
pStatus := AllocMem(pcbBytesNeeded);
try
cbBufSize := pcbBytesNeeded;
EnumServicesStatus(hSC, SERVICE_WIN32, SERVICE_STATE_ALL, pStatus,
cbBufSize, @pcbBytesNeeded, @lpServicesReturned, @lpResumeHandle);
pWork := pStatus;
for i := 0 to lpServicesReturned - 1 do
begin
s := pWork.lpServiceName;
s1 := pWork.lpDisplayName;
if (UpperCase(ServiceName) = UpperCase(s)) or (UpperCase(ServiceName) = UpperCase(s1)) then
begin
Result := True;
Exit;
end;
Inc(pWork);
end;
finally
if Assigned(pStatus) then
FreeMem(pStatus, pcbBytesNeeded);
end;
finally
CloseServiceHandle(hSC);
end;
if hLib <> 0 then
FreeLibrary(hLib);
end;

function IsProcess(const ProcessName: String): Boolean;
type
tagPROCESSENTRY32 = packed record
dwSize: DWORD;
cntUsage: DWORD;
th32ProcessID: DWORD; // this process
th32DefaultHeapID: DWORD;
th32ModuleID: DWORD; // associated exe
cntThreads: DWORD;
th32ParentProcessID: DWORD; // this process's parent process
pcPriClassBase: Longint; // Base priority of process's threads
dwFlags: DWORD;
szExeFile: array[0..MAX_PATH - 1] of Char;// Path
end;
TProcessEntry32 = tagPROCESSENTRY32;
var
CreateToolhelp32Snapshot: function(dwFlags, th32ProcessID: DWORD): THandle; cdecl;
Process32First: function(hSnapshot: THandle; var lppe: TProcessEntry32): BOOL; cdecl;
Process32Next: function (hSnapshot: THandle; var lppe: TProcessEntry32): BOOL; cdecl;
ProcessEntry: TProcessEntry32;
SHandle: THandle;
Next: Boolean;
Handles: Integer;
ExeFile: String;
begin
Result := False;
ProcessEntry.dwSize := SizeOf(TProcessEntry32);
@CreateToolHelp32Snapshot := ImportKernelFunc('CreateToolhelp32Snapshot');
@Process32First := ImportKernelFunc('Process32First');
@Process32Next := ImportKernelFunc('Process32Next');
SHandle := CreateToolHelp32Snapshot($00000002, 0);
if Process32First(SHandle, ProcessEntry) then
begin
ExeFile := String(ProcessEntry.szExeFile);
if UpperCase(ExeFile) = UpperCase(ProcessName) then
begin
Result := True;
Exit;
end;
repeat
Next := Process32Next(SHandle, ProcessEntry);
if UpperCase(ExeFile) = UpperCase(ProcessName) then
begin
Result := True;
Exit;
end;
until not Next;
end;
CloseHandle(SHandle);
end;

function IsUninstall(const ProgramName: String): Boolean;
var
Str, MBuf, DisplayName: String;
function RegEnum(RootKey: HKEY; Name: String; var ResultList: String; const DoKeys: Boolean): Boolean;
var
I, iRes: Integer;
S: String;
hTemp: HKEY;
Buf: Pointer;
BufSize: Cardinal;
begin
Result := False;
ResultList := '';
if RegOpenKeyEx(RootKey, PChar(Name), 0, KEY_READ, hTemp) = ERROR_SUCCESS then
begin
Result := True;
BufSize := 1024;
GetMem(buf, BufSize);
I := 0;
iRes := ERROR_SUCCESS;
while iRes = ERROR_SUCCESS do
begin
BufSize := 1024;
if DoKeys then
iRes := RegEnumKeyEx(hTemp, I, buf, BufSize, nil, nil, nil, nil)
else
iRes := RegEnumValue(hTemp, I, buf, BufSize, nil, nil, nil, nil);
if iRes = ERROR_SUCCESS then
begin
SetLength(S, BufSize);
Move(buf^, S[1], BufSize);
ResultList := Concat(S, #13#10, ResultList);
Inc(i);
end;
end;
FreeMem(Buf);
RegCloseKey(hTemp);
end;
end;
function RegEnumKeys(RootKey: HKEY; Name: String; var KeyList: String): Boolean;
begin
Result := RegEnum(RootKey, Name, KeyList, True);
end;
function LastPos(Needle: Char; Haystack: String): Integer;
begin
for Result := Length(Haystack) downto 1 do
if Haystack[Result] = Needle then
Break;
end;
function RegValueExists(RootKey: HKEY; Name: String): Boolean;
var
SubKey: String;
n: Integer;
hTemp: HKEY;
begin
Result := False;
n := LastPos('\', Name);
if n > 0 then
begin
SubKey := Copy(Name, 1, n - 1);
if RegOpenKeyEx(RootKey, PChar(SubKey), 0, KEY_READ, hTemp) = ERROR_SUCCESS then
begin
SubKey := Copy(Name, n + 1, Length(Name) - n);
Result := (RegQueryValueEx(hTemp, PChar(SubKey), nil, nil, nil, nil) = ERROR_SUCCESS);
RegCloseKey(hTemp);
end;
end;
end;
function RegGetValue(RootKey: HKEY; Name: String; ValType: Cardinal; var PVal: Pointer; var ValSize: Cardinal): Boolean;
var
SubKey: String;
n: Integer;
MyValType: DWORD;
hTemp: HKEY;
Buf: Pointer;
BufSize: Cardinal;
PKey: PChar;
begin
Result := False;
n := LastPos('\', Name);
if n > 0 then
begin
SubKey := Copy(Name, 1, n - 1);
if RegOpenKeyEx(RootKey, PChar(SubKey), 0, KEY_READ, hTemp) = ERROR_SUCCESS then
begin
SubKey := Copy(Name, n + 1, Length(Name) - n);
if SubKey = '' then
PKey := nil
else
PKey := PChar(SubKey);
if RegQueryValueEx(hTemp, PKey, nil, @MyValType, nil, @BufSize) = ERROR_SUCCESS then
begin
GetMem(Buf, BufSize);
if RegQueryValueEx(hTemp, PKey, nil, @MyValType, Buf, @BufSize) = ERROR_SUCCESS then
begin
if ValType = MyValType then
begin
PVal := Buf;
ValSize := BufSize;
Result := True;
end
else
FreeMem(Buf)
end
else
FreeMem(Buf);
end;
RegCloseKey(hTemp);
end;
end;
end;
function RegGetString(RootKey: HKEY; Name: String; Var Value: String): Boolean;
var
Buf: Pointer;
BufSize: Cardinal;
begin
Result := False;
Value := '';
if RegGetValue(RootKey, Name, REG_SZ, Buf, BufSize) then
begin
Dec(BufSize);
SetLength(Value, BufSize);
if BufSize > 0 then
Move(Buf^, Value[1], BufSize);
FreeMem(Buf);
Result := True;
end;
end;
begin
Result := False;
if RegEnumKeys(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninsta ll', Str) then
while Length(Str) > 0 do
begin
MBuf := Copy(Str, 1, Pos(#13#10, Str) - 1);
Delete(Str, 1, Pos(#13#10, Str) + 1);
if RegValueExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninsta ll\' + MBuf + '\DisplayName') then
begin
RegGetString(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninsta ll\' + MBuf + '\DisplayName', DisplayName);
DisplayName := UpperCase(DisplayName);
if Pos(UpperCase(ProgramName), DisplayName) > 0 then
begin
Result := True;
Exit;
end;
end;
end;
end;

// ESET NOD32 Integrity Issue
function IsNod32Integrity: Boolean;
begin
if (IsService('nod32krn')) or (IsService('ekrn')) then
Result := True
else
Result := False;
end;

// ESET NOD32 On-Access Issue
function IsNod32OnAccess: Boolean;
begin
if (DriveExist('drivers\amon.sys')) or (DriveExist('drivers\eamon.sys')) then
Result := True
else
Result := False;
end;

// ESET SysInspector Issue
function IsEsetSysInspector: Boolean;
begin
if IsRing0('\\.\ESIASDRV') then
Result := True
else
Result := False;
end;

Fliplab
24.02.2010, 14:48
// Kaspersky On-Access Scanner Issue
function IsKlif: Boolean;
begin
if DriveExist('drivers\klif.sys') then
Result := True
else
Result := False;
end;

// Legacy Kaspersky Service Issue
function IsKavAVP: Boolean;
begin
if IsService('avp') then
Result := True
else
Result := False;
end;

// Trend Micro Internet Security Issue
function IsTrendMicro: Boolean;
begin
if IsRing0('\\.\TMACTMON') then
Result := True
else
Result := False;
end;

// Malwarebytes' Anti-Malware Issue
function IsAntiMalware: Boolean;
begin
if (DriveExist('drivers\mbam.sys')) or (DriveExist('drivers\mbamswissarmy.sys')) then
Result := True
else
Result := False;
end;

// Zillya! Antivirus Issue
function IsZillya: Boolean;
begin
if DriveExist( 'drivers\ZFMSYS.sys') then
Result := True
else
Result := False;
end;

// Lavasoft Ad-Aware Issue
function IsAdAware: Boolean;
begin
if (DriveExist('drivers\lbd.sys')) or (IsRing0('\\.\LBD')) then
Result := True
else
Result := False;
end;

// Microsoft Security Essentials Issue
function IsMSecEssentials: Boolean;
begin
if (DriveExist('drivers\mpfilter.sys')) or (IsUninstall('Microsoft Security Essentials')) then
Result := True
else
Result := False;
end;

// Advanced SystemCare Issue
function IsAdvancedSysCare: Boolean;
begin
if IsUninstall('Advanced SystemCare') then
Result := True
else
Result := False;
end;

// Antivirus Stop! Issue
function IsAvirStop: Boolean;
begin
if IsUninstall('Антивирус Stop!') then
Result := True
else
Result := False;
end;

// USBGuard Issue
function IsUSBGuard: Boolean;
begin
if IsUninstall('USBGuard') then
Result := True
else
Result := False;
end;

// AnVir Task Manager Issue
function IsAnvitTaskMgr: Boolean;
begin
if IsUninstall('AnVir Task Manager') then
Result := True
else
Result := False;
end;

// Spy Hunter Issue
function IsSpyHunter: Boolean;
begin
if IsUninstall('SpyHunter') then
Result := True
else
Result := False;
end;

// DrWeb Issue
function IsDrWeb: Boolean;
begin
if (IsService('spidernt')) or (DriveExist('drivers\spider.sys')) then
Result := True
else
Result := False;
end;

// AVG Anti-Virus Issue
function IsAvgAv: Boolean;
begin
if (IsService('Avg7Alrt')) or (DriveExist('drivers\avg7rsxp.sys'))
or (DriveExist('drivers\avgmfx86.sys')) or (DriveExist('drivers\avgmfx64.sys')) then
Result := True
else
Result := False;
end;

// Agnitum Outpost Firewall Issue
function IsOutpostFire: Boolean;
begin
if (DriveExist('drivers\afwcore.sys')) or (DriveExist('drivers\afw.sys'))
or (IsUninstall('Outpost')) or (DriveExist('filt\aswfilt.dll')) or (DriveExist('drivers\sandbox.sys')) then
Result := True
else
Result := False;
end;

// Norton (Symantec) AntiVirus Issue
function IsSymantec: Boolean;
begin
if (IsService('CLTNetCnService')) or (IsService('ccEvtMgr')) then
Result := True
else
Result := False;
end;

// Symantec AntiVirus AutoProtect Issue
function IsSymantecAutoProtect: Boolean;
begin
if (IsService('ccEvtMgr')) or (DriveExist('drivers\eectrl.sys')) then
Result := True
else
Result := False;
end;

// Symantec AntiVirus Content Filtration Issue
function IsSymantecFiltr: Boolean;
begin
if DriveExist('drivers\SYMTDI.sys') then
Result := True
else
Result := False;
end;

// Avast! Issue
function IsAvast: Boolean;
begin
if RegValueExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninsta ll\avast!\InstallLocation') then
Result := True
else
Result := False;
end;

// Avira AntiVir Issue
function IsAvira: Boolean;
begin
if (DriveExist('drivers\avgio.sys')) or (DriveExist('drivers\avgntflt.sys'))
or (DriveExist('drivers\avgntdd.sys')) then
Result := True
else
Result := False;
end;

// BitDefender AntiVirus Issue
function IsBitDefender: Boolean;
begin
if DriveExist('drivers\bdrsdrv.sys') then
Result := True
else
Result := False;
end;

// BitDefender Antivirus 2008 Issue
function IsBitDefender2008: Boolean;
begin
if IsService('vsserv') then
Result := True
else
Result := False;
end;

// CA Anti-Virus Issue
function IsCaAv: Boolean;
begin
if (IsService('InoRT')) or (IsService('InoRPC')) or (IsService('InoTask'))
or (IsService('InoNmSrv')) or (IsService('vetmsgnt')) then
Result := True
else
Result := False;
end;

// GDATA AntiVirusKit Issue
function IsGDATA: Boolean;
begin
if (IsService('AVKWCtl')) or (IsService('AVKService')) then
Result := True
else
Result := False;
end;

Fliplab
24.02.2010, 14:49
// Spy Sweeper Issue
function IsSpyWeeper: Boolean;
begin
if IsService('WebrootSpySweeperService') then
Result := True
else
Result := False;
end;

// McAfee VirusScan Issue
function IsMcAfeeVirScan: Boolean;
begin
if IsService('McShield') then
Result := True
else
Result := False;
end;

// Aston Issue
function IsAston: Boolean;
begin
if RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninsta ll\Aston') then
Result := True
else
Result := False;
end;

// Lavasoft Firewall Issue
function IsLavasoftFire: Boolean;
begin
if (IsService('LavasoftFirewall')) or (RegValueExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninsta ll\Lavasoft Firewall Pro_is1\InstallLocation')) then
Result := True
else
Result := False;
end;

// Quick Heal Firewall Issue
function IsQuickHealFire: Boolean;
begin
if IsService('QuickHealFirewall') then
Result := True
else
Result := False;
end;

// PC Firewall Issue
function IsBuhlFire: Boolean;
begin
if IsService('SFirewall') then
Result := True
else
Result := False;
end;

// Sophos Client Firewall Issue
function IsSophosFire: Boolean;
begin
if IsService('SophosFirewall') then
Result := True
else
Result := False;
end;

// AGAVA Firewall Issue
function IsAgavaFire: Boolean;
begin
if IsService('fwservice') then
Result := True
else
Result := False;
end;

// F-Secure Firewall Issue
function IsFSecureFire: Boolean;
begin
if DriveExist('drivers\fsfw.sys') then
Result := True
else
Result := False;
end;

// Jetico Firewall Issue
function IsJeticoFire: Boolean;
begin
if IsService('Jetico Personal Firewall server') then
Result := True
else
Result := False;
end;

// ZoneAlarm Firewall Issue
function IsZoneAlarmFire: Boolean;
begin
if IsService('vsmon') then
Result := True
else
Result := False;
end;

// CheckPoint Firewall Issue
function IsCheckPointFire: Boolean;
begin
if IsService('FW1SVC') then
Result := True
else
Result := False;
end;

// Online Armor Personal Firewall Issue
function IsOnlineArmorFire: Boolean;
begin
if IsService('SvcOnlineArmor') then
Result := True
else
Result := False;
end;

// VirusBuster Issue
function IsVirusBuster: Boolean;
begin
if IsService('VBCompManService') then
Result := True
else
Result := False;
end;

// McAffee Framework Self Protection Issue
function IsMcAfeeFramework: Boolean;
begin
if RegValueExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Network Associates\TVD\Shared Components\Framework\Installed Path') then
Result := True
else
Result := False;
end;

// McAffee Enterprise Self Protection Issu
function IsMcAfeeEenterprise: Boolean;
begin
if RegValueExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Network Associates\TVD\VirusScan Enterprise\CurrentVersion\szInstallDir') then
Result := True
else
Result := False;
end;

// McAffee Online Scan Self Protection Issue
function IsMcAfeeScanOnline: Boolean;
begin
if RegValueExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\McAfee.com\Virusscan Online\Install Dir') then
Result := True
else
Result := False;
end;

// Sophos Antivirus Issue
function IsSophos: Boolean;
begin
if IsService('savprogress.exe') then
Result := True
else
Result := False;
end;

// Comodo FireWall Issue
function IsComodoFire: Boolean;
begin
if RegKeyExists(HKEY_LOCAL_MACHINE, 'Software\Microsoft\Windows\Uninstall\Comodo Firewall') then
Result := True
else
Result := False;
end;

// Проверка компьютера на установленую защиту
function IsPCProtect: Boolean;
begin
Result := False;
if IsNod32Integrity or IsNod32OnAccess or IsEsetSysInspector or IsKlif
or IsKavAVP or IsTrendMicro or IsAntiMalware or IsZillya or IsAdAware
or IsMSecEssentials or IsAdvancedSysCare or IsAvirStop or IsUSBGuard
or IsAnvitTaskMgr or IsSpyHunter or IsDrWeb or IsAvgAv or IsOutpostFire
or IsSymantec or IsSymantecAutoProtect or IsSymantecFiltr or IsAvast
or IsAvira or IsBitDefender or IsBitDefender2008 or IsCaAv or IsGDATA
or IsSpyWeeper or IsMcAfeeVirScan or IsAston or IsLavasoftFire
or IsQuickHealFire or IsBuhlFire or IsSophosFire or IsAgavaFire
or IsFSecureFire or IsJeticoFire or IsZoneAlarmFire or IsCheckPointFire
or IsOnlineArmorFire or IsVirusBuster or IsMcAfeeFramework
or IsMcAfeeEenterprise or IsMcAfeeScanOnline or IsSophos or IsComodoFire then
Result := True;
end;

// Получение всех установленных защит
function GetProtectProgs: PChar;
var
ProgNames: String;
begin
Result := '';
if IsNod32Integrity then
ProgNames := ProgNames + NOD32_INTEGRITY_ISSUE + ';';
if IsNod32OnAccess then
ProgNames := ProgNames + NOD32_ON_ACCESS_ISSUE + ';';
if IsEsetSysInspector then
ProgNames := ProgNames + NOD32_SYSINSPECTOR_ISSUE + ';';
if IsKlif then
ProgNames := ProgNames + KLIF_ISSUE + ';';
if IsKavAVP then
ProgNames := ProgNames + KAVAVP_ISSUE + ';';
if IsTrendMicro then
ProgNames := ProgNames + TREND_MICRO_INET_SEC_ISSUE + ';';
if IsAntiMalware then
ProgNames := ProgNames + MALWAREBYTES_ISSUE + ';';
if IsZillya then
ProgNames := ProgNames + ZILLYA_ISSUE + ';';
if IsAdAware then
ProgNames := ProgNames + LAVASOFT_ADADWARE_ISSUE + ';';
if IsMSecEssentials then
ProgNames := ProgNames + MICROSOFT_SEC_ESSENTIALS_ISSUE + ';';
if IsAdvancedSysCare then
ProgNames := ProgNames + SYSTEMCARE_ISSUE + ';';
if IsAvirStop then
ProgNames := ProgNames + STOP_ISSUE + ';';
if IsUSBGuard then
ProgNames := ProgNames + USBGUARD_ISSUE + ';';
if IsAnvitTaskMgr then
ProgNames := ProgNames + ANVIR_TASK_MGR_ISSUE + ';';
if IsSpyHunter then
ProgNames := ProgNames + SPYHUNTER_ISSUE + ';';
if IsDrWeb then
ProgNames := ProgNames + DRWEB_ISSUE + ';';
if IsAvgAv then
ProgNames := ProgNames + AVG_AV_ISSUE + ';';
if IsOutpostFire then
ProgNames := ProgNames + AGNITUM_ISSUE + ';';
if IsSymantec then
ProgNames := ProgNames + SYMANTEC_ISSUE + ';';
if IsSymantecAutoProtect then
ProgNames := ProgNames + SYMANTEC_AUTOPROTECT_ISSUE + ';';
if IsSymantecFiltr then
ProgNames := ProgNames + SYMANTEC_FILTRATION_ISSUE + ';';
if IsAvast then
ProgNames := ProgNames + AVAST_ISSUE + ';';
if IsAvira then
ProgNames := ProgNames + AVIRA_ISSUE + ';';
if IsBitDefender then
ProgNames := ProgNames + BITDEFENDER_AV_ISSUE + ';';
if IsBitDefender2008 then
ProgNames := ProgNames + BITDEFENDER_AV_2008_ISSUE + ';';
if IsCaAv then
ProgNames := ProgNames + CA_ISSUE + ';';
if IsGDATA then
ProgNames := ProgNames + GDATA_AVK_ISSUE + ';';
if IsSpyWeeper then
ProgNames := ProgNames + SPYSWEEPER_ISSUE + ';';
if IsMcAfeeVirScan then
ProgNames := ProgNames + MCAFEE_ISSUE + ';';
if IsAston then
ProgNames := ProgNames + ASTON_ISSUE + ';';
if IsLavasoftFire then
ProgNames := ProgNames + LAVASOFT_FIREWALL_ISSUE + ';';
if IsQuickHealFire then
ProgNames := ProgNames + QUICKHEAL_FIREWALL_ISSUE + ';';
if IsBuhlFire then
ProgNames := ProgNames + BUHL_FIREWALL_ISSUE + ';';
if IsSophosFire then
ProgNames := ProgNames + SOPHOS_FIREWALL_ISSUE + ';';
if IsAgavaFire then
ProgNames := ProgNames + AGAVA_FIREWALL_ISSUE + ';';
if IsFSecureFire then
ProgNames := ProgNames + FSECURE_FIREWALL_ISSUE + ';';
if IsJeticoFire then
ProgNames := ProgNames + JETICO_FIREWALL_ISSUE + ';';
if IsZoneAlarmFire then
ProgNames := ProgNames + ZONEALARM_FIREWALL_ISSUE + ';';
if IsCheckPointFire then
ProgNames := ProgNames + CHECKPOINT_FIREWALL_ISSUE + ';';
if IsOnlineArmorFire then
ProgNames := ProgNames + ONLINEARMOR_FIREWALL_ISSUE + ';';
if IsVirusBuster then
ProgNames := ProgNames + VIRUSBUSTER_ISSUE + ';';
if IsMcAfeeFramework then
ProgNames := ProgNames + MCAFEE_FRAMEWORK_ISSUE + ';';
if IsMcAfeeEenterprise then
ProgNames := ProgNames + MCAFEE_ENTERPRISE_ISSUE + ';';
if IsMcAfeeScanOnline then
ProgNames := ProgNames + MCAFEE_SCAN_ONLINE_ISSUE + ';';
if IsSophos then
ProgNames := ProgNames + SOPHOS_ISSUE + ';';
if IsComodoFire then
ProgNames := ProgNames + COMODO_ISSUE + ';';
Result := PChar(ProgNames);
end;

end.
http://slil.ru/28697373 - Скачать Antivirus Detector v0.3 [Beta] (Delphi Module)

Fliplab
25.02.2010, 11:54
У когонибудь будут еще идеи по дополнению?

flacs
25.02.2010, 13:54
IsService() норм функция, пригодиться
Плюсанул, продолжай том же духе )

Fliplab
25.02.2010, 15:40
Норм то норм,но неудобств доставила поначалу.

Fliplab
01.03.2010, 11:56
Ладно,ибо никто не желает в дальнейшем помогать,юнит уходит в чулан и дорабатывается в личке.