حماية البرامج في دلفي
#1
السلام عليكم
كيف استطيع حماية برنامجي من ناحية:ان لايعمل على جهاز أخر غير جهاز واحد يتم تحديده
أو بالتفصيل : لا يعمل الا على مجموعة معينة من الأجهزة
كيف الطريق الى ذلك لأن برنامجي ليس مرتبط بالوب
الرد
#2
يمكن لبرنامجك أخي التأكد من أمور مثل الرقم التسلسلي للقرص الصلب أو البيوس أو عنوان MAC لكارت الشبكة ...وغيرها...أي أنك تقوم بتخزين هذه الأرقام في برنامجك أو في أي مكان آخر ، وعند فتح البرنامج يقوم بمطابقة الأرقام -رقم القرص لصلب مثلا- بالأرقام المخزنة....

وإليك أخي هذه الدالة التي تقوم بقراءة الرقم التسلسلي للقرص الصلب :


كود :
procedure TForm1.Button1Click(Sender: TObject); var VolName : Array[0..Max_Path]Of Char; FileSysName : Array[0..Max_Path]Of Char; VolSerial : DWord; FileMaxLen : DWord; FileFlags : DWord; Ser:string[30]; begin GetVolumeInformation('C:\',VolName,Max_Path,@VolSerial, FileMaxLen, FileFlags,FileSysName,Max_Path); Ser:=intToStr(VolSerial); Edit1.Text:=ser; end; end.

غير أن الحل الأمثل برأيي هو عمل مولد مفاتيح (ولو بسيط) لبرنامجك.
:: رب يسر ولا تعسر رب سهل وتمم بالخير ::
الرد
#3
أخى العزيز sandokhane

تلك الطريقة تقوم بإرجاع رقم الليبل
و هو يتغير من بارتيشن لآخر
كما يتغير لنفس البارتيشن لو حدث له فورمات
هناك طريقة لإرجاع الرقم الثابت
و هو الرقم التسلسلى للهارد ديسك الثابت
و هو نفس الرقم الموجود بملصق الهارد
و لا أذكرها الآن
الرد
#4
وعليكم السلام
كيف يتم إستخراج Hard disk Serial number لحماية برامجي ؟
الرد
#5
kachwahed كتب :وعليكم السلام
كيف يتم إستخراج hard disk serial number لحماية برامجي ؟

لو لم يكن ممنوعا لأرفقت برنامجا بسيطا يالفجوال يقوم بتصدير السيريال إلى تكست او حتى قيمة ريجسترى
تستعمله بعد ذلك فى الدلفى
و عموما لغة الدلفى على حد علمى لا تنفذ الى هذا العمق
و غير مؤهلة لإستخراج هذا الرقم
بينما على سبيل المثال سيكون إستخراج هذا الرقم بالفجوال بمثابة نزهه قصيرة
و على كافة نظم التشغيل
حتى فى وندوز سفن و بدون صلاحيات مدير النظام للوندوز
و بمجهود بسيط فى موقع بلانت سورس كود ستجد ضالتك فى دقائق
الرد
#6
" يقوم بتصدير السيريال إلى تكست او حتى قيمة ريجسترى
تستعمله بعد ذلك فى الدلفى" , أظن هذا كافي لكسر الحماية .

"و عموما لغة الدلفى على حد علمى لا تنفذ الى هذا العمق
و غير مؤهلة لإستخراج هذا الرقم" , عليك بالمطالعة أكثر !!
كود :
{**********************************************************} { Open source sample. } { Free to use. } { Coded By Dark666e | 19-12-2010 AORETEEM } {**********************************************************} library Real_Hard_Drive_ID; {$WARNINGS OFF}{$HINTS OFF} {$O ON}{$OVERFLOWCHECKS Off} uses Windows, Messages; const SMART_RCV_DRIVE_DATA = $7C088; type TIdeRegs = packed record bFeaturesReg, bSectorCountReg, bSectorNumberReg, bCylLowReg, bCylHighReg, bDriveHeadReg, bCommandReg, bReserved: Byte; end; TSMART_RCV_DRIVE_InDATA = packed record dwBufferSize: DWORD; irDriveRegs: TIdeRegs; bDriveNumber: Byte; bReserved: array[1..3] of Byte; dwReserved: array[1..4] of DWORD; bBuffer: Byte; end; TDriverStatus = packed record bDriverError: Byte; bIDEError: Byte; bReserved: array[1..2] of Byte; dwReserved: array[1..2] of DWORD; end; TSMART_RCV_DRIVE_OutDATA = packed record dwBufferSize: DWORD; dsDriverStatus: TDriverStatus; bBuffer: array[1..512] of Byte; end; function FixName(HardId: string): string; var _i: Byte; begin Result := ''; _i := 1; while _i <= Length(HardId) do begin if HardId[_i] <> ' ' then Result := Result + HardId[_i + 1] + HardId[_i]; _i := _i + 2; end; end; function GetRealHardId: string;stdcall; var Tmp: string; hDevice: Thandle; InBuffer: TSMART_RCV_DRIVE_InDATA; OutBuffer: TSMART_RCV_DRIVE_OutDATA; pBytesReturned: dword; begin Result := ''; hDevice := CreateFileA('\\.\PhysicalDrive0' , GENERIC_READ + GENERIC_WRITE , FILE_SHARE_READ + FILE_SHARE_WRITE , nil , OPEN_EXISTING , 0 , 0); if hDevice = Dword(-1) then Exit; FillChar(InBuffer, SizeOf(TSMART_RCV_DRIVE_InDATA), 0); FillChar(OutBuffer, $21, 0); with InBuffer do begin dwBufferSize := $200; bDriveNumber := 0; irDriveRegs.bSectorCountReg := 1; irDriveRegs.bSectorNumberReg := 1; irDriveRegs.bDriveHeadReg := $0A0; irDriveRegs.bCommandReg := $0EC; end; if DeviceIoControl(hDevice, SMART_RCV_DRIVE_DATA , @InBuffer, SizeOf(InBuffer) , @OutBuffer, SizeOf(OutBuffer) , pBytesReturned, nil) then if OutBuffer.dsDriverStatus.bDriverError = 0 then begin begin SetLength(Tmp, 20); Move(OutBuffer.bBuffer[21], Tmp[1], 20); Result := FixName(Tmp); end; CloseHandle(hDevice); end; end; exports GetRealHardId; end.
بالتوفيق,,
I'M Fly Like A G6

الرد
#7
مشكور أخى
و فعلا يجب الإكثار من الإطلاع

و بالنسبة لكسر الحماية فطبعا سيمر الرقم المسلسل بتشفير
و طبعا لن يكون رقم الهارد هو نفسه الباسوورد بل بإدخال عدد من الأحرف منه فقط
طبعا من الناحية اليمنى فى معادلة لا يعرفها سوى المبرمج
سلام لك
الرد
#8
"و بالنسبة لكسر الحماية فطبعا سيمر الرقم المسلسل بتشفير
و طبعا لن يكون رقم الهارد هو نفسه الباسوورد بل بإدخال عدد من الأحرف منه فقط
طبعا من الناحية اليمنى فى معادلة لا يعرفها سوى المبرمج" , راجع ردود الصفحة الأولى : هنا
I'M Fly Like A G6

الرد
#9
إقتباس :كيف استطيع حماية برنامجي من ناحية لايعمل على جهاز أخر...
اظن انه لا يمكنك دلك
يمكن تغيير بايتات من برنامج و يصبح يعمل عى كل الاجهزة
الرد
#10
TF6M كتب :و طبعا لن يكون رقم الهارد هو نفسه...
أخى العزيز
هل ممكن أن توضح لى أى رقم يخزن فى هذه الطريقة
يعنى رقم الميديا ؟؟
أم رقم الأسطوانة الفارغة ؟؟
و إذا كان رقم الميديا فلابد أنك تعلم أن هذا الرقم يتم نسخه أثناء عمليات النسخ العادية
و أما لو كان رقم القرص فتلك حماية رائعة
ولكنى عندما فحصت الرقم الناتج وجدت به تشابه بين أسطوانات نفس الشركة
مما يدعو للتفكير بأنه من أرقام تعريف سعة و سرعة الأسطوانة
leadin and leadout
و لو كان الرقم هو الرقم السابق ذكره فهو له عيبان أساسيان
الأول أنه رقم ثابت على الأقراص ذات السعة و السرعة الواحدة و المنتجة من نفس الشركة الصانعة للأقراص
الثانى أن هذا الرقم لا يقرأه سوى النواسخ فقط بينما تعجز عن قرائته السيديرومز
صححنى لو كنت مخطئ فنحن نتعلم من تبادل الخبرات

راجع رابط هذا البرنامج CDR Identifier لتعرف قصدى
كود :
http://www.pcworld.com/downloads/file/fid,22912-order,1-page,1-c,alldownloads/description.html

وراقب مخرجات هذا البرنامج عند البند ATIP

moha711 كتب :يمكن تغيير بايتات من برنامج و يصبح يعمل عى كل الاجهزة
أخى العزيز
و ممكن ذلك ببايت واحد فقط فما النتيجة ؟؟ الإستسلام ؟
أخى العزيز
على المبرمج محاولة حماية برنامجه بقدر إستطاعته
و لكل مقام مقال بمعنى أنه عندما تفكر فى طرح برنامجك على الإنترنت
حيث ستلتقى بأعتى الكراكر فمن البديهى أنه سيكسر بعد فترة
ستحاول أن تجعلها كافية لبيع عدد مناسب من برنامجك
أما لو كان المبرمج ينوى النشر محليا
فستصمد حمايته لفترة أطول
و سيستلزم رفعها على الإنترنت لتقابل الكراكرز الكبار عناء كبيرا
عندها سيفضل المستخدم البسيط شراء النسخة
و إذا تم رفع نسخة برنامجك للنت و كسرها الكراكرز
فهذا يعنى نجاح و نصر كبير لبرنامجك لذلك
فقم بعمل إصدار محدث من برنامجك به عدد من الخواص أو التحديثات الجديدة
و صدقنى أفضل شيئ عند هذه الحالة أن توكل موضوع حماية إسطواناتك إلى شركات الحماية المشهورة
و لن أذكر مثالا حتى لا يعتبر إعلان
و لكن لا داعى للروح الإنهزامية فلا فائدة منها
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم