31-01-2010, 10:08 AM
هذه التقنية مستندة على التعامل مع مسجل النظام :
الVBScript هو عبارة عن ملف نصي يتم تفسيره من قبل برنامج WScript.exe و جميع ملفات VBS يتم فتحها بواسطة هذا البرنامج. يتم إنجاز هذا البرنامج بلإعتماد على القيمة الموجودة في مسجل النظام تحت المفتاح HKEY_CLASSES_ROOT\VBSFile\Shell\Open\Command
المفتاح هو الرابط لتنفيذ هذا الملف WScript.exe الذي سيتم تغييره ليصبح مسار البرنامج الخاص بنا والمسمى AntiVBS.exe.
الآن عندما يقوم ويندوز بمحاولة فتح ملف VBS فانه سيستدعي برنامجنا لفتحه وذلك بتمرير مسار الملف كبارمتر ، وعندها نفوم بفتح الملف للقراءة منه يقرأ البرنامج النص الموجود فيه في محاولة لتحديد علامة الفيروس (توقيع الفيروس)فإذا كانت علامة الفيروس موجودة نقوم بتحذير المستخدم بأن هذا الملف مصاب بفيروس وفيما عدا ذلك (إذا كان الملف غير مصاب) نقوم بتمرير البارمتر إلى البرنامج الأصلي في ويندوز بواسطة إستدعاء تابع ال API المسمى WinExec .
ملاحظة: لا يتم إستخدام التابع المشابه للتابع السابق والمسمى ShellExecute
البرنامج السابق يقوم بفحص الفيروسات ولكن إذا أردت أن تجعله فعال بشكل دائم فعليك أن تراعي بأن هنالك بشكل دائم فيروسات جديدة وبالتالي قم بإنشاء ملف ini وضع تواقيع الفيروسات ضمنه وسوف أضع لكم مثال عن ملف مشابه وهو يعمل بشكل رائع ولكن مع فيروس الحب فقط .
مع التمنيات للجيمع بالتوفيق.
الVBScript هو عبارة عن ملف نصي يتم تفسيره من قبل برنامج WScript.exe و جميع ملفات VBS يتم فتحها بواسطة هذا البرنامج. يتم إنجاز هذا البرنامج بلإعتماد على القيمة الموجودة في مسجل النظام تحت المفتاح HKEY_CLASSES_ROOT\VBSFile\Shell\Open\Command
المفتاح هو الرابط لتنفيذ هذا الملف WScript.exe الذي سيتم تغييره ليصبح مسار البرنامج الخاص بنا والمسمى AntiVBS.exe.
الآن عندما يقوم ويندوز بمحاولة فتح ملف VBS فانه سيستدعي برنامجنا لفتحه وذلك بتمرير مسار الملف كبارمتر ، وعندها نفوم بفتح الملف للقراءة منه يقرأ البرنامج النص الموجود فيه في محاولة لتحديد علامة الفيروس (توقيع الفيروس)فإذا كانت علامة الفيروس موجودة نقوم بتحذير المستخدم بأن هذا الملف مصاب بفيروس وفيما عدا ذلك (إذا كان الملف غير مصاب) نقوم بتمرير البارمتر إلى البرنامج الأصلي في ويندوز بواسطة إستدعاء تابع ال API المسمى WinExec .
ملاحظة: لا يتم إستخدام التابع المشابه للتابع السابق والمسمى ShellExecute
البرنامج السابق يقوم بفحص الفيروسات ولكن إذا أردت أن تجعله فعال بشكل دائم فعليك أن تراعي بأن هنالك بشكل دائم فيروسات جديدة وبالتالي قم بإنشاء ملف ini وضع تواقيع الفيروسات ضمنه وسوف أضع لكم مثال عن ملف مشابه وهو يعمل بشكل رائع ولكن مع فيروس الحب فقط .
مع التمنيات للجيمع بالتوفيق.
PHP كود :
unit AntiVBS;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,Registry,IniFiles;
const
AntiVBSName = 'Anti-VBScript';
ExecParameter = ' "%1" %*';
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function CheckViruses(Value: array of char): string;
var
i, j: integer;
VirDefs: TStringList;
VirIDs : TStringList;
begin
result := '';
VirDefs:= TStringList.Create;
VirIDs := TStringList.Create;
try
with TIniFile.Create(ChangeFileExt(ParamStr(0),'.ini')) do
try
ReadSectionValues('VIRUSDEFS',VirDefs);
for i:=0 to VirDefs.Count - 1 do
begin
ReadSectionValues(VirDefs.Values[VirDefs.Names[i]], VirIds);
for j:=0 to VirIds.Count - 1 do
begin
if Pos(AnsiUpperCase(VirIds.Values[VirIds.Names[j]]), AnsiUpperCase(Value)) > 0 then
begin
result := ReadString(VirDefs.Values[VirDefs.Names[i]],'NAME','VBScript - Virus');
exit;
end;
end;
end;
finally
free;
end;
finally
VirDefs.free;
VirIDs.free;
end;
end;
procedure RemoveAntiVBS;
var
OldValue: string;
begin
with TRegistry.Create do
try
RootKey:=HKEY_CLASSES_ROOT;
OpenKey('VBSFile\Shell\Open\Command',true);
OldValue:=ReadString('Old');
if OldValue <> '' then
WriteString('',OldValue);
DeleteValue('Old');
CloseKey;
OpenKey('VBSFile\Shell\Open2\Command',true);
OldValue:=ReadString('Old');
if OldValue <> '' then
WriteString('',OldValue);
DeleteValue('Old');
CloseKey;
MessageBox(0,PChar(Format('The %s was uninstalled from your system with success!'#13+
'In order to reintall it just run it again with no options.',[AntiVBSName])),
AntiVBSName, MB_OK or MB_ICONASTERISK);
finally
free;
end;
end;
procedure SetupRegistry;
var
OldValue: string;
Root, InstalledPath: string;
Reg: TRegistry;
procedure AddAntiVBS;
begin
with Reg do
begin
OpenKey('VBSFile\Shell\Open\Command',true);
OldValue:=ReadString('');
if not (Pos(Uppercase(ExtractFileName(ParamStr(0))),UpperCase(OldValue))>0) then
WriteString('Old',OldValue);
WriteString('',ParamStr(0) + ExecParameter);
CloseKey;
OpenKey('VBSFile\Shell\Open2\Command',true);
OldValue:=ReadString('');
if not (Pos(Uppercase(ExtractFileName(ParamStr(0))),UpperCase(OldValue))>0) then
WriteString('Old',OldValue);
WriteString('',ParamStr(0) + ExecParameter);
CloseKey;
end;
MessageBox(0,PChar('The Anti-VBScript was installed in your system with success!'#13+
'In order to uninstall it just run it with the /REMOVE option.'),
AntiVBSName, MB_OK or MB_ICONINFORMATION);
end;
begin
Root:=ParamStr(0) + ExecParameter;
Reg:=TRegistry.Create;
with Reg do
try
Access:=KEY_ALL_ACCESS;
RootKey:=HKEY_CLASSES_ROOT;
if not OpenKey('VBSFile\Shell\Open\Command',true) then
abort;
InstalledPath:=ReadString('');
Delete(InstalledPath, Pos(ExecParameter,InstalledPath),length(InstalledPath));
CloseKey;
if Pos(AnsiUpperCase(ExtractFileName(ParamStr(0))),AnsiUppercase(InstalledPath)) > 0 then
begin
if (AnsiUpperCase(ParamStr(0)) <> AnsiUppercase(InstalledPath)) then
begin
if MessageBox(0, PChar(Format('The %s is already installed in you system at'#13+
'%s'#13#13+
'Do you want to reinstall it from '#13'%s ?',
[AntiVBSName, InstalledPath, ParamStr(0)])),
AntiVBSName, MB_YESNO or MB_ICONINFORMATION or MB_SYSTEMMODAL) = IDYES then
AddAntiVBS;
end
else
MessageBox(0,PChar(Format('The %s is already installed in you system at'#13#13'%s',[AntiVBSName,ParamStr(0)])),
AntiVBSName, MB_OK or MB_ICONINFORMATION or MB_SYSTEMMODAL);
end
else
AddAntiVBS;
finally
free;
end;
end;
var
F: file;
R: integer;
Value: array[1..16384] of char;
result: string;
begin
if ParamCount = 0 then
SetupRegistry
else
if AnsiUpperCase(ParamStr(1)) = '/REMOVE' then
RemoveAntiVBS
else
if FileExists(ParamStr(1)) then
begin
FillChar(Value,SizeOf(Value),0);
AssignFile(F, ParamStr(1));
FileMode:=0; {ReadOnly}
Reset(F,1);
BlockRead(F,Value[1],SizeOf(Value)-1,R);
while (not EOF(F)) or (R > 0) do
begin
result := CheckViruses(Value);
if result <> '' then
begin
MessageBox(0,PChar(Format('The file %s is possibly infected by a virus:'#13#13' %s'#13#13'Its execution is denied.',
[ParamStr(1), '"'+result+'"'])),
AntiVBSName, MB_ICONHAND or MB_SYSTEMMODAL);
exit;
end;
BlockRead(F,Value[1],SizeOf(Value)-1,R);
end;
WinExec(PChar(ParamStr(1)+ParamStr(2)),SW_SHOW);
end;
end.
// ini مثال على ملف ال
{[VIRUSDEFS]
COMMENT= ضع هنا جيمع المعرفات الخاصة بالفيروسات أوتواقيعها.
LOVELETTER=LOVELETTER_IDS
[LOVELETTER_IDS]
COMMENT= ضع هنا أسماء الفيروسات أو المعرفات (كلمات من ملف الفيروس).
NAME=Love Letter Virus (vbs macro)
1=loveletter
2=spreadtoemail()
3=MSKernel32.vbs
4=Win32DLL.vbs
5=LOVE-LETTER-FOR-YOU.TXT.vbs }

