delphi4arab منتديات دلفي للعرب
[تمرين] حماية ذاتية : البرنامج معطوب، مصاب بفيروس او تم العبث به - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : تمارين دلفي وحلول (https://delphi4arab.net/forum/forumdisplay.php?fid=16)
+--- الموضوع : [تمرين] حماية ذاتية : البرنامج معطوب، مصاب بفيروس او تم العبث به (/showthread.php?tid=425)

الصفحات: 1 2 3


RE: [تمرين] حماية ذاتية : البرنامج معطوب، مصاب بفيروس او تم العبث به - Delphi4Us - 28-06-2022

السلام عليكم ورحمة الله

العبد لله ليس لدي اي فكرة عن الكسر ولا التشفير ولا الحماية
وعند التجربة يظهر خطاء في ملف احد المكتبات بالمكان هذا تحديدا دون رسالة واضحة للمشكلة


[صورة: attachment.php?aid=4647]


.jpg   Untitled444.jpg (الحجم : 80.33 ك ب / التحميلات : 97)


بخصوص [تمرين] حماية ذاتية - I3CT - 28-06-2022

السلام عليكم و رحمة الله
بخصوص: https://delphi4arab.net/forum/showthread.php?tid=425&pid=55271#pid55271

لم استطع الرد في الموضوع مباشرة  لان الموضوع قديم و مغلق...

[صورة: M70DjPy.gif]


RE: بخصوص [تمرين] حماية ذاتية - Delphi4Us - 28-06-2022

بارك الله فيك هل ممكن تتفضل وتوضح لماذا حدث هذا ولماذا عمل عند البعض اما نحن على دلفي 11 لم يعمل الا بتغيير النوع
وهذا فقط لفهم المشكلة وحلها اذا صادفت مرة اخرى مشكلة مشابهة
وشكرا

اما بعد التجربة وفهم مايجري هما كلمتان فقط (رائع ومذهل)


RE: بخصوص [تمرين] حماية ذاتية - محمد عبد العزيز - 02-07-2022

(28-06-2022, 01:10 PM)Delphi4Us كتب : لماذا حدث هذا ولماذا عمل عند البعض اما نحن على دلفي 11 لم يعمل الا بتغيير النوع
إصدارات دلفي الحديثة بها تغييرات تكسر backward compatibility التوافق مع الاصدارا القديمة


RE: [تمرين] حماية ذاتية : البرنامج معطوب، مصاب بفيروس او تم العبث به - Delphi4Us - 07-07-2022

بنفس الطريقة جربت الكتابة بدل القراءة ولم تفلح 
هل هذه الطريقة الصحيحة

كود :
var   MyStream: TMemoryStream;   StoredChecksum,StorMachine, CalculateChecksum: dword; begin   MyStream := TMemoryStream.Create;   MyStream.LoadFromFile(Application.ExeName);   StoredChecksum:=12114367;   MyStream.Seek(-4, soFromEnd);   MyStream.Write (StoredChecksum, 4);   MyStream.Seek(0, soFromBeginning);   MyStream.SetSize(MyStream.Size - 4);   MyStream.Free; end;


وجربت على مشروع اخر غير الذي نتمرن عليه فلم اجد البلوك او لا اعرف ما تسمونه بنهاية الملف والذي يحوي اصفار 
وانما ارقام ورموز حتى نهايته


RE: [تمرين] حماية ذاتية : البرنامج معطوب، مصاب بفيروس او تم العبث به - Ndagor - 08-12-2022

العملية تتم على مرحلتين الاولى اضافة CRC الى نهاية البرنامج و هذا يتم بواسطة برنامج خارجي...

كود :
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 تقوم بستخراج نسخة و تنفيذها في كل مرة ..


RE: [تمرين] حماية ذاتية : البرنامج معطوب، مصاب بفيروس او تم العبث به - S.FATEH - 08-12-2022

السلام عليكم

بارك الله فيك اخ Ndagor الحماية ناجحة ...

من فضلك ممكن شرح الكود من طرفك او من طرف احد الأعظاء


RE: [تمرين] حماية ذاتية : البرنامج معطوب، مصاب بفيروس او تم العبث به - Ndagor - 09-12-2022

الكود الاول يوضع في برنامج بسيط مستقل يستعمل لاضافة crc  الى الملفات التنفذية ... اما الكود الثاني يوضع في الرنامج المراد حمايته .. 

في المثال الاصلي نقوم باضافة CRC الى نهاية الملف التنفيذي و عند اطلاق البرنامج يقوم بحساب CRC  و مقارنته مع المخزن في الملف و في حال وجد انه عير متطابق يتوقف البرنامج...

في النسخة التي عدلتها اضفت مجال جديد -الذي باللون الازرق- يحتوي على الجحم الملف فقط للتاكد ان الملف التنفيذي يحتوي على المساحة الاضافية لتفادي تكرار عملية مجددا..

CRC مسجل بشكل عكسي لان TIdHashCRC32 تقوم بحساب CRC للملف كامل  بما في ذلك هذا المجال فتكون النتيجة ‎-1 في حال نجاح عملية المقارنة

[صورة: Sk.png]


في الحقيقة هذا مجرد تمرين من 2008 زمن xp عندما كانت الفيروسات تصول و تجول بكل حرية .

حاليا يمكن لاي مضاد فيروسات ان يغير في برنامجك و هذا يفشل حساب crc .

دالفي يتيح التوقيع الإلكتروني للبرنامج بعد انشائه اظن هذه افظل طريقة للحماية.


RE: [تمرين] حماية ذاتية : البرنامج معطوب، مصاب بفيروس او تم العبث به - S.FATEH - 09-12-2022

السلام عليكم

فقط كإضافة جعل كود الحماية في برنامج خارجي متعب كل مرة تقوم بكومبايل للكود تقوم بتكرار نفس الامر اضافة الـ CRC32 الى البرنامج
او تقوم بالعملية مرة واحدة عند الإنتهاء من البرنامج...
قمت بتغيير بسيط لكود إظافة CRC بحيث يأخذ مسار البرنامج المراد إضافة الـ CRC له كبرامتر و إستدعائه بإستخدام Build Events

PHP كود :
procedure AddCrc;
const 
Rec_SIZE  = SizeOf(UInt32);
var
  FS:TStream;
  idCrc:TIdHashCRC32;
  C:UInt32;
  ExeFile:string;
begin
  ExeFile 
:= ParamStr(1);// تغيير بسيط

  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; 

يتم وضع البرنامج المسئول عن اضافة crc الى جانب البرنامج المراد حمايته ثم يتم استدعائه باستخدام Build Events مع تمرير مسار البرنامج 

[صورة: attachment.php?aid=4714]

بهذه الطريقة الحماية تكون اوتوماتيكية ..


RE: [تمرين] حماية ذاتية : البرنامج معطوب، مصاب بفيروس او تم العبث به - Ndagor - 10-12-2022

شكرا على الفكرة.