مشاهدة النسخة كاملة : حماية البرامج في دلفي
wewewe
16-01-2009, 01:50 AM
السلام عليكم
كيف استطيع حماية برنامجي من ناحية:ان لايعمل على جهاز أخر غير جهاز واحد يتم تحديده
أو بالتفصيل : لا يعمل الا على مجموعة معينة من الأجهزة
كيف الطريق الى ذلك لأن برنامجي ليس مرتبط بالوب
sandokhane
18-01-2009, 10:56 AM
يمكن لبرنامجك أخي التأكد من أمور مثل الرقم التسلسلي للقرص الصلب أو البيوس أو عنوان 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,@VolSe rial,
FileMaxLen, FileFlags,FileSysName,Max_Path);
Ser:=intToStr(VolSerial);
Edit1.Text:=ser;
end;
end.
غير أن الحل الأمثل برأيي هو عمل مولد مفاتيح (ولو بسيط) لبرنامجك.
خالد على22
19-01-2011, 02:11 AM
أخى العزيز sandokhane
تلك الطريقة تقوم بإرجاع رقم الليبل
و هو يتغير من بارتيشن لآخر
كما يتغير لنفس البارتيشن لو حدث له فورمات
هناك طريقة لإرجاع الرقم الثابت
و هو الرقم التسلسلى للهارد ديسك الثابت
و هو نفس الرقم الموجود بملصق الهارد
و لا أذكرها الآن
kachwahed
19-01-2011, 05:22 AM
وعليكم السلام
كيف يتم إستخراج Hard disk Serial number لحماية برامجي ؟ (http://www.delphi4arab.com/forum/showthread.php?t=4240)
خالد على22
19-01-2011, 01:58 PM
وعليكم السلام
كيف يتم إستخراج hard disk serial number لحماية برامجي ؟ (http://www.delphi4arab.com/forum/showthread.php?t=4240)
لو لم يكن ممنوعا لأرفقت برنامجا بسيطا يالفجوال يقوم بتصدير السيريال إلى تكست او حتى قيمة ريجسترى
تستعمله بعد ذلك فى الدلفى
و عموما لغة الدلفى على حد علمى لا تنفذ الى هذا العمق
و غير مؤهلة لإستخراج هذا الرقم
بينما على سبيل المثال سيكون إستخراج هذا الرقم بالفجوال بمثابة نزهه قصيرة
و على كافة نظم التشغيل
حتى فى وندوز سفن و بدون صلاحيات مدير النظام للوندوز
و بمجهود بسيط فى موقع بلانت سورس كود ستجد ضالتك فى دقائق
" يقوم بتصدير السيريال إلى تكست او حتى قيمة ريجسترى
تستعمله بعد ذلك فى الدلفى" , أظن هذا كافي لكسر الحماية .
"و عموما لغة الدلفى على حد علمى لا تنفذ الى هذا العمق
و غير مؤهلة لإستخراج هذا الرقم" , عليك بالمطالعة أكثر !!
{************************************************* *********}
{ 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.بالتوفيق,,
خالد على22
19-01-2011, 02:40 PM
مشكور أخى
و فعلا يجب الإكثار من الإطلاع
و بالنسبة لكسر الحماية فطبعا سيمر الرقم المسلسل بتشفير
و طبعا لن يكون رقم الهارد هو نفسه الباسوورد بل بإدخال عدد من الأحرف منه فقط
طبعا من الناحية اليمنى فى معادلة لا يعرفها سوى المبرمج
سلام لك
"و بالنسبة لكسر الحماية فطبعا سيمر الرقم المسلسل بتشفير
و طبعا لن يكون رقم الهارد هو نفسه الباسوورد بل بإدخال عدد من الأحرف منه فقط
طبعا من الناحية اليمنى فى معادلة لا يعرفها سوى المبرمج" , راجع ردود الصفحة الأولى : هنا (http://www.delphi4arab.com/forum/showthread.php?t=305)
Moha711
19-01-2011, 03:25 PM
كيف استطيع حماية برنامجي من ناحية لايعمل على جهاز أخر...
اظن انه لا يمكنك دلك
يمكن تغيير بايتات من برنامج و يصبح يعمل عى كل الاجهزة
خالد على22
20-01-2011, 02:32 PM
و طبعا لن يكون رقم الهارد هو نفسه...
أخى العزيز
هل ممكن أن توضح لى أى رقم يخزن فى هذه الطريقة
يعنى رقم الميديا ؟؟
أم رقم الأسطوانة الفارغة ؟؟
و إذا كان رقم الميديا فلابد أنك تعلم أن هذا الرقم يتم نسخه أثناء عمليات النسخ العادية
و أما لو كان رقم القرص فتلك حماية رائعة
ولكنى عندما فحصت الرقم الناتج وجدت به تشابه بين أسطوانات نفس الشركة
مما يدعو للتفكير بأنه من أرقام تعريف سعة و سرعة الأسطوانة
leadin and leadout
و لو كان الرقم هو الرقم السابق ذكره فهو له عيبان أساسيان
الأول أنه رقم ثابت على الأقراص ذات السعة و السرعة الواحدة و المنتجة من نفس الشركة الصانعة للأقراص
الثانى أن هذا الرقم لا يقرأه سوى النواسخ فقط بينما تعجز عن قرائته السيديرومز
صححنى لو كنت مخطئ فنحن نتعلم من تبادل الخبرات
راجع رابط هذا البرنامج CDR Identifier لتعرف قصدى
http://www.pcworld.com/downloads/file/fid,22912-order,1-page,1-c,alldownloads/description.html
وراقب مخرجات هذا البرنامج عند البند ATIP
يمكن تغيير بايتات من برنامج و يصبح يعمل عى كل الاجهزة
أخى العزيز
و ممكن ذلك ببايت واحد فقط فما النتيجة ؟؟ الإستسلام ؟
أخى العزيز
على المبرمج محاولة حماية برنامجه بقدر إستطاعته
و لكل مقام مقال بمعنى أنه عندما تفكر فى طرح برنامجك على الإنترنت
حيث ستلتقى بأعتى الكراكر فمن البديهى أنه سيكسر بعد فترة
ستحاول أن تجعلها كافية لبيع عدد مناسب من برنامجك
أما لو كان المبرمج ينوى النشر محليا
فستصمد حمايته لفترة أطول
و سيستلزم رفعها على الإنترنت لتقابل الكراكرز الكبار عناء كبيرا
عندها سيفضل المستخدم البسيط شراء النسخة
و إذا تم رفع نسخة برنامجك للنت و كسرها الكراكرز
فهذا يعنى نجاح و نصر كبير لبرنامجك لذلك
فقم بعمل إصدار محدث من برنامجك به عدد من الخواص أو التحديثات الجديدة
و صدقنى أفضل شيئ عند هذه الحالة أن توكل موضوع حماية إسطواناتك إلى شركات الحماية المشهورة
و لن أذكر مثالا حتى لا يعتبر إعلان
و لكن لا داعى للروح الإنهزامية فلا فائدة منها
vBulletin® , Copyright ©2008-2012