العملية تتم على مرحلتين الاولى اضافة CRC الى نهاية البرنامج و هذا يتم بواسطة برنامج خارجي...
كود التحقق يتم تنفيذه من البرنامج عند بداية التشغيل للتحقق من سلامة الملف التنفيذي ...
هذه الطريقة ذات فعالية محدودة لان الفيروس اذا دخل البرنامج يقوم بتغيير عنوان كود الدخول ليتسنى له التنفيذ اولا معناه قبل ان يقوم البرنامج من التحقق يكون الفيروس قد اشتغل على حد علمي..
هناك بعض الطرق ربما أكثر فعالية كنت استخدمها ..
كنت عملت برنامج تقوم بفتح قائمة من الملفات التنفذية -البرامج التي اريد حمايتها-و تركها مفتوحة لمنع اي محاولة لعبث فيها هذا البرنامج يشغل اليا مع انطلاق الوندوز ...
هناك طريقة اخرى و هي وضع الملف التنفيذي في ملف مضغود zip. rar و باستعمال سكريبت او bat تقوم بستخراج نسخة و تنفيذها في كل مرة ..
كود :
uses idHashcrc;
procedure AddCrc();
const Rec_SIZE = SizeOf(UInt32);
var
FS:TStream;
idCrc:TIdHashCRC32;
C:UInt32;
ExeFile:string;
begin
if not PromptForFilename(ExeFile,'Applications |*.exe') then
Exit;
FS := TFileStream.Create(ExeFile, fmOpenReadWrite);
try
FS.Position := FS.Size - Rec_SIZE * 2;
if (FS.Read(C,Rec_SIZE) = Rec_SIZE) and (C = FS.Size) then // previously done
FS.Size := FS.Size - Rec_SIZE * 2; // trunc crc slot
FS.Position := FS.Size;
C := FS.Size + Rec_SIZE * 2;
FS.Writebuffer(C, Rec_SIZE);
FS.Position := 0;
idCrc:=TIdHashCRC32.Create;
C := StrToInt('$'+ idCrc.HashStreamAsHex(FS));
idCrc.Free;
C := C xor $FFFFFFFF;
FS.Writebuffer(C,Rec_SIZE);// add crc
Showmessage('Done');
finally
FS.Free;
end;
end;كود التحقق يتم تنفيذه من البرنامج عند بداية التشغيل للتحقق من سلامة الملف التنفيذي ...
كود :
uses idHashcrc;
procedure CheckItSelf;
const Rec_SIZE = SizeOf(UInt32);
var
FS:TStream;
idCrc:TIdHashCRC32;
C:UInt32;
begin
FS := TBufferedFileStream.Create(Application.ExeName, fmOpenRead or fmShareDenyWrite);
try
FS.Position := FS.Size - Rec_SIZE * 2;
if (FS.Read(C, Rec_SIZE) = Rec_SIZE) and (C = FS.Size) then
begin
FS.Position := 0;
idCrc:=TIdHashCRC32.Create;
C := StrToInt('$'+ idCrc.HashStreamAsHex(FS));
idCrc.Free;
if Int32(C) = -1 then // valid crc
Exit;
end;
raise Exception.Create('Crc check error');
finally
FS.Free;
end;
end;هذه الطريقة ذات فعالية محدودة لان الفيروس اذا دخل البرنامج يقوم بتغيير عنوان كود الدخول ليتسنى له التنفيذ اولا معناه قبل ان يقوم البرنامج من التحقق يكون الفيروس قد اشتغل على حد علمي..
هناك بعض الطرق ربما أكثر فعالية كنت استخدمها ..
كنت عملت برنامج تقوم بفتح قائمة من الملفات التنفذية -البرامج التي اريد حمايتها-و تركها مفتوحة لمنع اي محاولة لعبث فيها هذا البرنامج يشغل اليا مع انطلاق الوندوز ...
هناك طريقة اخرى و هي وضع الملف التنفيذي في ملف مضغود zip. rar و باستعمال سكريبت او bat تقوم بستخراج نسخة و تنفيذها في كل مرة ..


![[-]](https://delphi4arab.net/forum/D4A2020/collapse.png)