قل: اللهم فاطِرَ السماوات والأرض عالم الغيبِ والشهادة، ربَّ كُلِّ شَيءٍ ومَلِيكَه، أَشْهد أن لا إله إلا أنت، أعوذ بك من شرِّ نفسي وشرِّ الشيطان وشِرْكِهِ وأن أقترف على نفسي سوءًا أو أجرُّه إلى مسلم
28-06-2022, 01:10 PM (آخر تعديل لهذه المشاركة: 28-06-2022, 02:21 PM بواسطة Delphi4Us.)
بارك الله فيك هل ممكن تتفضل وتوضح لماذا حدث هذا ولماذا عمل عند البعض اما نحن على دلفي 11 لم يعمل الا بتغيير النوع
وهذا فقط لفهم المشكلة وحلها اذا صادفت مرة اخرى مشكلة مشابهة
وشكرا
اما بعد التجربة وفهم مايجري هما كلمتان فقط (رائع ومذهل)
قل: اللهم فاطِرَ السماوات والأرض عالم الغيبِ والشهادة، ربَّ كُلِّ شَيءٍ ومَلِيكَه، أَشْهد أن لا إله إلا أنت، أعوذ بك من شرِّ نفسي وشرِّ الشيطان وشِرْكِهِ وأن أقترف على نفسي سوءًا أو أجرُّه إلى مسلم
وجربت على مشروع اخر غير الذي نتمرن عليه فلم اجد البلوك او لا اعرف ما تسمونه بنهاية الملف والذي يحوي اصفار
وانما ارقام ورموز حتى نهايته
قل: اللهم فاطِرَ السماوات والأرض عالم الغيبِ والشهادة، ربَّ كُلِّ شَيءٍ ومَلِيكَه، أَشْهد أن لا إله إلا أنت، أعوذ بك من شرِّ نفسي وشرِّ الشيطان وشِرْكِهِ وأن أقترف على نفسي سوءًا أو أجرُّه إلى مسلم
08-12-2022, 02:28 PM (آخر تعديل لهذه المشاركة: 08-12-2022, 02:30 PM بواسطة Ndagor.)
العملية تتم على مرحلتين الاولى اضافة 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 تقوم بستخراج نسخة و تنفيذها في كل مرة ..
كل من 1 user says قال شكرا ل Ndagor على المشاركة المفيدة1 user says Thank You to Ndagor for this post • S.FATEH
09-12-2022, 06:45 PM (آخر تعديل لهذه المشاركة: 09-12-2022, 06:49 PM بواسطة Ndagor.)
الكود الاول يوضع في برنامج بسيط مستقل يستعمل لاضافة crc الى الملفات التنفذية ... اما الكود الثاني يوضع في الرنامج المراد حمايته ..
في المثال الاصلي نقوم باضافة CRC الى نهاية الملف التنفيذي و عند اطلاق البرنامج يقوم بحساب CRC و مقارنته مع المخزن في الملف و في حال وجد انه عير متطابق يتوقف البرنامج...
في النسخة التي عدلتها اضفت مجال جديد -الذي باللون الازرق- يحتوي على الجحم الملف فقط للتاكد ان الملف التنفيذي يحتوي على المساحة الاضافية لتفادي تكرار عملية مجددا..
CRC مسجل بشكل عكسي لان TIdHashCRC32 تقوم بحساب CRC للملف كامل بما في ذلك هذا المجال فتكون النتيجة -1 في حال نجاح عملية المقارنة
في الحقيقة هذا مجرد تمرين من 2008 زمن xp عندما كانت الفيروسات تصول و تجول بكل حرية .
حاليا يمكن لاي مضاد فيروسات ان يغير في برنامجك و هذا يفشل حساب crc .
دالفي يتيح التوقيع الإلكتروني للبرنامج بعد انشائه اظن هذه افظل طريقة للحماية.
كل من 1 user says قال شكرا ل Ndagor على المشاركة المفيدة1 user says Thank You to Ndagor for this post • S.FATEH
09-12-2022, 09:03 PM (آخر تعديل لهذه المشاركة: 09-12-2022, 09:08 PM بواسطة S.FATEH.)
السلام عليكم
فقط كإضافة جعل كود الحماية في برنامج خارجي متعب كل مرة تقوم بكومبايل للكود تقوم بتكرار نفس الامر اضافة الـ 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 مع تمرير مسار البرنامج
بهذه الطريقة الحماية تكون اوتوماتيكية ..
و لرب نازلة يضيق لها الفتى ذرعا و عند الله منها المخرج ضاقت فلما استحكمت حلقاتها فرجت و كنت اضنها لا تفرج
كل من 1 user says قال شكرا ل S.FATEH على المشاركة المفيدة1 user says Thank You to S.FATEH for this post • Ndagor