منتدى Borland Delphi

 اسم العضو:Hadyabady  الأربعاء,30/جمادى الأولى/1426 هـ,08:40 صباحاً
[ALIGN=center][IMG]http://www.arabmoheet.net/forum/pics/bsmla.gif[/IMG][/ALIGN] ميزات البرنامج : كلمة المرور مكونة فقط من أرقام لتسهيل التعامل كلمة المرور قصيرة كل هارد له كلمة مرور ---> منع النسخ والتداول غير الرسمي تقنية هذا البرنامج: برنامج الحماية من النسخ والتداول يقوم هذا البرنامج عند تشغيله باستيراد الرقم التسلسلي للهارد وانتقاء المحارف الرقمية منه وإظهارها للزبون على شكل رقم واحد سميته برمز التشفير ز مثلا : إذا كان رقم الهارد هو :45d5g6h يظهر للزبون رمز التشفير كالتالي 456 ثم يطلب البرنامج الرمز الخاص والمقصود به شيفرة الناتجة عن إجراء عدة عمليات على رمز التشفير فيقوم الزبون بالاتصال بأحد مراكز الخدمة للحصول على الرمز الخاص وتكون الاستفادة من هذه الفكرة بجعل هذا الفورم فورما رئيسيا في الـApplication ويمكن أيضا تعديل البرنامج ليقوم بحفظ الرمز الخاص في ملف نصي لكي لا يتكرر طلب الرمز الخاص عند كل تشغيلة للبرنامج (أطلب المساعدة إن احتاج الأمر وسأكون بالخدمة) برنامج توليد الرمز الخاص يبقى هذا البرنامج محفوظا عند مراكز الخدمة ويحرص على عدم سرقته يقوم هذا البرنامج بتشفير الرقم المعطي من قبل الزبون إلى الرمز الخاص  

 اسم العضو:مصطفي البارودي  الجمعة,16/جمادى الثانية/1426 هـ,01:59 مساءً
هل يمكن استخدامه مع اي برنامج اخر معمول باي لغة برمجه اخري ولا برامج دلفي فقط 

 اسم العضو:DeltaAziz  الأربعاء,25/شعبان/1426 هـ,02:08 مساءً
[QUOTE]<br>كلمة المرور مكونة فقط من أرقام لتسهيل التعامل<br>كلمة المرور قصيرة[/QUOTE] السلام عليكم ورحمة الله و بركاته إستخدام الأرقام فقط و قصر كلمة المرور يسهل عملية تخمين كلمة المرور وبالتالي مفعول الحماية يضمحل....  

 اسم العضو:Hadyabady  الأحد,29/شعبان/1426 هـ,03:45 مساءً
أولا: شكرا على هذه الملاحظة ثانيا: الأصل في هذه المشاركة هي الفكرة ومادامت الفكرة صحيحة لن يكون إجراء التعديلات وإتمام الكماليات بالشيء الصعب ,, حيث يمكن تغيير الشيفرة المتبعة إلى شيفرة معقدة جدا يتخللها الأحرف والأرقام على حد سواء - وقد كانت ملاحظة السيد مهند عبادي -التي قالها لي شفويا- جديرة جدا بالإهتمام حيث انه يمكن بطريقة ما تغيير الرقم التسلسلي للهارد, فما العمل حينها ؟؟؟  

 اسم العضو:DeltaAziz  الاثنين,01/رمضان/1426 هـ,11:15 صباحاً
رقم سريال يتغير مع عمل Format للقرص لكن يوجد السريال الحقيقي و المسمي manufacturer و هذا الأخير لا يتغير سواء عملت Format أو Fdisk أو غيره حلول أخري هي إستخدام رقم المعالج processor ID أو رقم اللوحة الأم Motherboard ID أو الثلاث معا في خواريزمية رياضية 

 اسم العضو:mo_zamzam  الأربعاء,17/رمضان/1426 هـ,08:55 مساءً
إستخدام رقم المعالج processor ID أو رقم اللوحة الأم Motherboard ID هذه الارقام ممكتن ان تكون ثابته فى بعض الاجهزه و خصوصا إستخدام رقم المعالج processor ID اذا كان من نفس النوع و الموديل 

 اسم العضو:Hadyabady  السبت,20/رمضان/1426 هـ,05:48 صباحاً
مشكوركم جزيل الشكر بس بتمنى أنو تكون المشاركات عملي مو بس نظري لحتى نفيد ونستفيد 

 اسم العضو:mo_zamzam  السبت,20/رمضان/1426 هـ,12:22 مساءً
فى المرفقات برنامج صغير (فجوال بيسك) يشرح المقصود و يعمل على xp فقط 

 اسم العضو:mo_zamzam  السبت,20/رمضان/1426 هـ,12:30 مساءً
البرنامج يعمل على ايجاد رقم الهارد و نوعه و يقوم بتحويله الاحرف الى ارقام و يجرى بعض العمليات الحسابيه بحيث ان الزبون يقوم بإعطاء رقم الهارد الى صاحب البرنامج بحيث يأخذ الرقم المقابل و فلى هذه الحاله اذا الزبون عمل فورمات او حتى قام بإعدة تقسيم الهارد ان الرقم لا يتغير اما processor ID يبقى ثابت فى بعض الاجزه عن تجربه 

 اسم العضو:Almo  الخميس,12/جمادى الأولى/1427 هـ,11:11 صباحاً
مشكور يا خوي 

 اسم العضو:libyana  الخميس,27/رمضان/1427 هـ,08:06 صباحاً
[QUOTE]البرنامج يعمل على ايجاد رقم الهارد و نوعه و يقوم بتحويله الاحرف الى ارقام و يجرى بعض العمليات الحسابيه بحيث ان الزبون يقوم بإعطاء رقم الهارد الى صاحب البرنامج بحيث يأخذ الرقم المقابل و فلى هذه الحاله اذا الزبون عمل فورمات او حتى قام بإعدة تقسيم الهارد<br>ان الرقم لا يتغير<br>اما processor ID يبقى ثابت فى بعض الاجزه عن تجربه[/QUOTE] [ALIGN=center][IMG]http://www.arabmoheet.net/forum/pics/bsmla.gif[/IMG][/ALIGN] السلام عليكم ورحمة الله وبركاته أخي لقد انزلت البرنامج وشغلته ولم استطع التعامل معه الرجاء ان تضع شرح كيفية استخدامه بالخطة واكون لك شاكرا فضلك 

 اسم العضو:libyana  الخميس,27/رمضان/1427 هـ,08:30 صباحاً
[ALIGN=center][IMG]http://www.arabmoheet.net/forum/pics/bsmla.gif[/IMG][/ALIGN] السلام عليكم ورحمة الله وبركاته كل عام والجميع بخير بمناسبة قرب حلول عيد الفطر المبارك اعاده على اعضاء المنتدى الأعزاء و على الأمى الإسلامية بالخير والرقي والنماء عزيزي HADYABADY لقد انزلت البرنامج عدة مرات وبعد التنزيل احاول فك الضغط فيظهر لي خطأ ولا يستطيع فك ضغطه فما هو السبب الرجاء معالجة المشكلة واكون لك شاكرا لك المعروف. 

 اسم العضو:Hadyabady  الأحد,30/رمضان/1427 هـ,03:44 صباحاً
السلام عليكم ورحمة الله تم تعديل المشاركة وإصلاح الخلل ولكم مباركتي بعيد الفطر السعيد  

 اسم العضو:First Star  الجمعة,06/رجب/1428 هـ,04:34 مساءً
ممتاز أخي ماهذا ياقلبي 

 اسم العضو:syria-man  السبت,18/رمضان/1428 هـ,07:15 صباحاً
مشكور أخي الكريم على البرنامج الحلو وجاري التحميل والتجريب 

 اسم العضو:madaalaa  السبت,23/شوال/1428 هـ,07:15 صباحاً
شكرا لكم جميعاً اخواني على المعلومات الرائعة ولكن هل يمكن استخدام كل ذالك مع processor ID , motherbourd ID وشكرا.... 

 اسم العضو:CLEANLYCLOTH  الأحد,24/شوال/1428 هـ,09:30 مساءً
الحمدلله والصلاة والسلام على رسول الله وعلى آله وصحبه أجمعين [URL=http://www.ksu.edu.sa]ان الله ولي التوفيق جزاك الله كل خير . [/URL] 

 اسم العضو:format82  الخميس,23/محرم/1429 هـ,05:21 صباحاً
هذا الكود يعطي رقم الهارديسك الحقيقي [CODE]function GetIdeSerialNumber0():string; const IDENTIFY_BUFFER_SIZE = 512; type TIDERegs = packed record bFeaturesReg : BYTE; // Used for specifying SMART "commands". bSectorCountReg : BYTE; // IDE sector count register bSectorNumberReg : BYTE; // IDE sector number register bCylLowReg : BYTE; // IDE low order cylinder value bCylHighReg : BYTE; // IDE high order cylinder value bDriveHeadReg : BYTE; // IDE drive/head register bCommandReg : BYTE; // Actual IDE command. bReserved : BYTE; // reserved for future use. Must be zero. end; TSendCmdInParams = packed record cBufferSize : DWORD; irDriveRegs : TIDERegs; bDriveNumber : BYTE; bReserved : Array[0..2] of Byte; dwReserved : Array[0..3] of DWORD; bBuffer : Array[0..0] of Byte; // Input buffer. end; TIdSector = packed record wGenConfig : Word; wNumCyls : Word; wReserved : Word; wNumHeads : Word; wBytesPerTrack : Word; wBytesPerSector : Word; wSectorsPerTrack : Word; wVendorUnique : Array[0..2] of Word; sSerialNumber : Array[0..19] of CHAR; wBufferType : Word; wBufferSize : Word; wECCSize : Word; sFirmwareRev : Array[0..7] of Char; sModelNumber : Array[0..39] of Char; wMoreVendorUnique : Word; wDoubleWordIO : Word; wCapabilities : Word; wReserved1 : Word; wPIOTiming : Word; wDMATiming : Word; wBS : Word; wNumCurrentCyls : Word; wNumCurrentHeads : Word; wNumCurrentSectorsPerTrack : Word; ulCurrentSectorCapacity : DWORD; wMultSectorStuff : Word; ulTotalAddressableSectors : DWORD; wSingleWordDMA : Word; wMultiWordDMA : Word; bReserved : Array[0..127] of BYTE; end; PIdSector = ^TIdSector; TDriverStatus = packed record bDriverError : Byte; bIDEStatus : Byte; bReserved : Array[0..1] of Byte; dwReserved : Array[0..1] of DWORD; end; TSendCmdOutParams = packed record cBufferSize : DWORD; DriverStatus : TDriverStatus; bBuffer : Array[0..0] of BYTE; end; var hDevice : THandle; cbBytesReturned : DWORD; ptr : PChar; SCIP : TSendCmdInParams; aIdOutCmd : Array [0..(SizeOf(TSendCmdOutParams)+IDENTIFY_BUFFER_SIZE-1)-1] of Byte; IdOutCmd : TSendCmdOutParams absolute aIdOutCmd; procedure ChangeByteOrder( var Data; Size : Integer ); var ptr : PChar; i : Integer; c : Char; begin ptr := @Data; for i := 0 to (Size shr 1)-1 do begin c := ptr^; ptr^ := (ptr+1)^; (ptr+1)^ := c; Inc(ptr,2); end; end; begin Result := ''; // return empty string on error if SysUtils.Win32Platform=VER_PLATFORM_WIN32_NT then // Windows NT, Windows 2000 begin //íãßä ÊÛíÑ PhysicalDrive0 Çáì PhysicalDrive1 Çæ PhysicalDrive2 hDevice := CreateFile( '\\.\PhysicalDrive0', GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0 ); end else // Version Windows 95 OSR2, Windows 98 hDevice := CreateFile( '\\.\SMARTVSD', 0, 0, nil, CREATE_NEW, 0, 0 ); if hDevice=INVALID_HANDLE_VALUE then Exit; try FillChar(SCIP,SizeOf(TSendCmdInParams)-1,#0); FillChar(aIdOutCmd,SizeOf(aIdOutCmd),#0); cbBytesReturned := 0; with SCIP do begin cBufferSize := IDENTIFY_BUFFER_SIZE; bDriveNumber := 0; with irDriveRegs do begin bSectorCountReg := 1; bSectorNumberReg := 1; bDriveHeadReg := $A0; bCommandReg := $EC; end; end; if not DeviceIoControl(hDevice, $0007c088, @SCIP, SizeOf(TSendCmdInParams)-1, @aIdOutCmd, SizeOf(aIdOutCmd), cbBytesReturned, nil ) then Exit; finally CloseHandle(hDevice); end; with PIdSector(@IdOutCmd.bBuffer)^ do begin ChangeByteOrder(sSerialNumber, SizeOf(sSerialNumber) ); (PChar(@sSerialNumber)+SizeOf(sSerialNumber))^ := #0; Result := PChar(@sSerialNumber); end; end;[/CODE] ولاظهار رقم الهارديسك في edit اقوم بكتابة هذا الكود في Button [CODE]Edit1.Text:=GetIdeSerialNumber0;[/CODE] 

 اسم العضو:عبدالمجيد الحجي  الثلاثاء,02/ربيع الثاني/1429 هـ,07:37 مساءً
تسلم اخوي الله يبارك فيك 

 اسم العضو:ابومهند  الأحد,29/شعبان/1429 هـ,12:41 صباحاً
مشكووووووووووووور وبارك الله فيك 

 اسم العضو:خالد القدس  الخميس,01/ذو القعدة/1429 هـ,11:50 صباحاً
الله يعطيكم العافية منذ ما يقارب الثلاثة شهور وأنا ابحث وأجرب عن مثل هذا العمل أي عمل رقم تسجيل للمشروع يتغير بتغير رقم متسلسل يظهر للمستخدم مثل برنامج السبورة الذكية وبرنامج الوجيز في الرياضيات اللذان صممهما الدكتور المصرى محمد الحافظ من مصر والبرنامجان موجودان في النت بامكان من لم يطلع عليهما البحث في قوقل وتنزلهما والجميل أن حجمهما صغير جدا اقل من خمسة ميقا ولكن عملهما رهيب ورائع في تعليم الصغار الحساب والهندسة الشاهد في الموضوع ان هذين البرنامجين لا يستطيع أحد ان يشغلهما بعد تنزيلهما في جهازه الا بعد أخذ رقم تسجيل بواسطة الهاتف من الدكتور محمد الحافظ شخصياً والدكتور عنده وكلاء في معظم المدن الرئيسية في البلاد العربية يستلمون نيابة عنه سعر البرنامج - وهو طبعا مبلغ زهيد بالمقارنة مع فائدة البرنامج - من المستخدمين ويطلبون منهم ابلاغهم بالرقم المتسلسل الذى ظهر لهم بعد تنزيل البرنامج ثم يتصلون بالدكتور هاتفيا ويبلغونه بالارقام المتسلسلة لمجموعة من المستخدمين الجدد للبرنامج وهو بدوره يعطيهم رقم التسجيل الصحيح لكل رقم متسلسل ، وبذلك يضمن عدم استخدام برنامجه الذى تعب فيه وسهر الليالي إلا بإذنه وموافقته وانا كنت ولا زلت أحاول للقيام بالنفس المهمة ولكن باستخدام برنامج AutoPlay Media Studio 7 لتصميم الاسطوانات والمشاريع التجميعية وهو برنامج رهيب في هذا المجال وانشاء الله عندما أصل لنتيجة مرضية سأرفع لكم ملف مفتوح مع الشرح والبرنامج بإذن الله أما الآن ارجو اعطائي شرح وافي وكافي ومفصل عن كيفية عمل ذلك بواسطة لغة Borland Delphi مع العلم بأنني جديد على هذه اللغة ولكن لدي خبرة لا جيدة في الفيجوال بيسك 6 مع فائق الشكر والتقدير  

 اسم العضو:medreg  الأحد,16/جمادى الأولى/1430 هـ,02:40 صباحاً
[QUOTE]هذا الكود يعطي رقم الهارديسك الحقيقي<br><DIV class=codetop> كود</DIV><DIV dir="ltr" class=quotemain><p align="left">function GetIdeSerialNumber0():string;<br>const IDENTIFY_BUFFER_SIZE = 512;<br>type<br> TIDERegs = packed record<br>    bFeaturesReg     : BYTE; // Used for specifying SMART "commands".<br>    bSectorCountReg : BYTE; // IDE sector count register<br>    bSectorNumberReg : BYTE; // IDE sector number register<br>    bCylLowReg       : BYTE; // IDE low order cylinder value<br>    bCylHighReg      : BYTE; // IDE high order cylinder value<br>    bDriveHeadReg    : BYTE; // IDE drive/head register<br>    bCommandReg      : BYTE; // Actual IDE command.<br>    bReserved        : BYTE; // reserved for future use. Must be zero.<br> end;<br> TSendCmdInParams = packed record<br>    cBufferSize : DWORD;<br>    irDriveRegs : TIDERegs;<br>    bDriveNumber : BYTE;<br>    bReserved    : Array[0..2] of Byte;<br>    dwReserved   : Array[0..3] of DWORD; <br>    bBuffer      : Array[0..0] of Byte; // Input buffer.<br> end; <br> TIdSector = packed record<br>    wGenConfig                 : Word; <br>    wNumCyls                   : Word;<br>    wReserved                  : Word; <br>    wNumHeads                  : Word;<br>    wBytesPerTrack             : Word; <br>    wBytesPerSector            : Word;<br>    wSectorsPerTrack           : Word;<br>    wVendorUnique              : Array[0..2] of Word;<br>    sSerialNumber              : Array[0..19] of CHAR; <br>    wBufferType               : Word;<br>    wBufferSize               : Word; <br>    wECCSize                   : Word;<br>    sFirmwareRev               : Array[0..7] of Char;<br>    sModelNumber               : Array[0..39] of Char;<br>    wMoreVendorUnique          : Word;<br>    wDoubleWordIO              : Word;<br>    wCapabilities              : Word;<br>    wReserved1                 : Word;<br>    wPIOTiming                 : Word;<br>    wDMATiming                 : Word;<br>    wBS                        : Word; <br>    wNumCurrentCyls            : Word;<br>    wNumCurrentHeads           : Word; <br>    wNumCurrentSectorsPerTrack : Word;<br>    ulCurrentSectorCapacity    : DWORD;<br>    wMultSectorStuff           : Word;<br>    ulTotalAddressableSectors : DWORD; <br>    wSingleWordDMA             : Word;<br>    wMultiWordDMA              : Word; <br>    bReserved                  : Array[0..127] of BYTE;<br> end;<br> PIdSector = ^TIdSector;<br> TDriverStatus = packed record<br>    bDriverError : Byte;<br>    bIDEStatus   : Byte;<br>    bReserved    : Array[0..1] of Byte;<br>    dwReserved   : Array[0..1] of DWORD;<br> end;<br> TSendCmdOutParams = packed record<br>    cBufferSize : DWORD;<br>    DriverStatus : TDriverStatus;<br>    bBuffer      : Array[0..0] of BYTE;<br> end;<br> var<br>    hDevice : THandle;<br>    cbBytesReturned : DWORD;<br>    ptr : PChar;<br>    SCIP : TSendCmdInParams;<br>    aIdOutCmd : Array [0..(SizeOf(TSendCmdOutParams)+IDENTIFY_BUFFER_SIZE-1)-1] of Byte;<br>    IdOutCmd : TSendCmdOutParams absolute aIdOutCmd;<br><br> procedure ChangeByteOrder( var Data; Size : Integer );<br> var ptr : PChar;<br>      i : Integer;<br>      c : Char;<br>   begin<br>    ptr := @Data;<br>    for i := 0 to (Size shr 1)-1 do<br>    begin<br>      c := ptr^;<br>      ptr^ := (ptr+1)^;<br>      (ptr+1)^ := c;<br>      Inc(ptr,2);<br>    end;<br> end;<br>begin<br> Result := ''; // return empty string on error<br> if SysUtils.Win32Platform=VER_PLATFORM_WIN32_NT then // Windows NT, Windows 2000<br>    <br><br>begin<br>//íãßä ÊÛíÑ PhysicalDrive0 Çáì PhysicalDrive1 Çæ PhysicalDrive2<br>   hDevice := CreateFile( '\\.\PhysicalDrive0', GENERIC_READ or GENERIC_WRITE,<br> FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0 );<br> end<br> else // Version Windows 95 OSR2, Windows 98<br> hDevice := CreateFile( '\\.\SMARTVSD', 0, 0, nil, CREATE_NEW, 0, 0 );<br> if hDevice=INVALID_HANDLE_VALUE then Exit;<br> try<br>    FillChar(SCIP,SizeOf(TSendCmdInParams)-1,#0);<br>    FillChar(aIdOutCmd,SizeOf(aIdOutCmd),#0);<br>    cbBytesReturned := 0;<br>    with SCIP do<br>    begin<br>    cBufferSize := IDENTIFY_BUFFER_SIZE;<br> bDriveNumber := 0;<br>   with irDriveRegs do<br>   begin<br>   bSectorCountReg := 1;<br>   bSectorNumberReg := 1;<br>   bDriveHeadReg    := $A0;<br>   bCommandReg      := $EC;<br>    end;<br>    end;<br>    if not DeviceIoControl(hDevice, $0007c088, @SCIP, SizeOf(TSendCmdInParams)-1,<br>      @aIdOutCmd, SizeOf(aIdOutCmd), cbBytesReturned, nil ) then Exit;<br> finally<br>    CloseHandle(hDevice);<br> end;<br> with PIdSector(@IdOutCmd.bBuffer)^ do<br> begin<br>    ChangeByteOrder(sSerialNumber, SizeOf(sSerialNumber) );<br>    (PChar(@sSerialNumber)+SizeOf(sSerialNumber))^ := #0;<br>    Result := PChar(@sSerialNumber);<br> end;<br>end;</p></DIV><br><br>ولاظهار رقم الهارديسك في edit اقوم بكتابة هذا الكود في Button<br><DIV class=codetop> كود</DIV><DIV dir="ltr" class=quotemain><p align="left">Edit1.Text:=GetIdeSerialNumber0;</p></DIV>[/QUOTE] شكرًا جزيلاً أخي على هذه المبادرة القيمة والتي نتمنى لك من خلالها الرقي والإزدهار والمضي الى الأمام ووفقكم الله لدي اخي طلب أخر وهو يا ريت لو وضعت لنا كود أخر لتوليد الرقم التسلسلي من هذا الرقم الحقيقيي وجزاكم الله عنا كل خير 

 اسم العضو:عادل39  الأربعاء,19/جمادى الأولى/1430 هـ,05:25 مساءً
مشكور يا خوي 

 اسم العضو:HamidSoft  الثلاثاء,19/ذو الحجة/1432 هـ,03:27 صباحاً
لقد قام احد الاخوة و هو mohfa من انتاج منظومة للحماية وهي رائعة جدا , بحيث تعتمد على الرقم الحقيقي للهارد ديسك + خصائص اخرى . الرابط : [URL=http://www.delphi4arab.com/forum/showthread.php?p=31122]http://www.delphi4arab.com/forum/showthread.php?p=31122[/URL] 

 اسم العضو:abueldahb740  السبت,01/شعبان/1440 هـ,07:19 مساءً
قمد هه 

جميع الحقوق محفوظة لـمنتديات المحيط العربي 2004 - 2021