delphi4arab منتديات دلفي للعرب

نسخة كاملة : تحويل رقم القرص الصلب الى رقم
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم ورحمة الله وبركاته
كيف أحول الحروف الى ارقام
بمعنى احسن رقم القرص الصلب حروف مثل wd whrsf2433535
كيف احوله الى ارقام مثلا324565466543
تتم علية عملية حسابية
وعليكم السلام ورحمة الله وبركاته
إقتباس :كيف أحول الحروف الى ارقام
IntToStr لكل Ord كحل سريع... لكن على أي أساس يتم التحويل
+ ممكن توضح ما الذي تحاول القيام به، ربما نجد طريقة أحسن!
بدلا ان يكون مكتوب هكذا asd
تحول ضسي الى ارقام دون ان يكرر نفس الرقم لنفس الحرف
الفكرة حماية جيدة لبرنامجى
باستخدام رقم القرص الصلب الذي يظهر عندى wd-ajj3434
إقتباس :يحول ان اية واس الدى دول ارقام بس برش مش كل ما اكتب الحرف معين يعمل نفس الرقم
ما هذا! لم أفهم شيئا. أكتب بفصيح اللغة Smile
+وضح أكثر ما تريد أن تفعل (مثال)؟

كاقتراح هناك خواريزميات تشفير وHash
ملاحظة: لا علاقة لهذا بحماية "كويسة"!
السلام عليكم ورحم الله وبركاته

اخي العزيز لديا محاولة

الشرح
تستطيع بعد الحصول على رقم الهارديسك في سلسلة نصية

أن تدخله في حلقة بنفس طول السلسلة

مع وجود تعليمة الشرط CASE
تستطيع تغير الارقام في الكود كما تشاء

كود :
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Déclarations privées } public { Déclarations publiques } end; var Form1: TForm1; implementation {$R *.dfm} 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 //???? EU?? PhysicalDrive0 C?? PhysicalDrive1 C? 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; procedure TForm1.Button1Click(Sender: TObject); var N,I : integer; B: char; S,R:string; begin s:=trim(AnsiUpperCase(GetIdeSerialNumber0)); N:=length(s); R:=''; for I:= 1 to N do begin b:=S[i]; case b of 'A'..'D': R:=r+'2'; 'E'..'H': R:=r+'7'; 'I'..'L': R:=r+'3'; 'M'..'P': R:=r+'4'; 'Q'..'S': R:=r+'5'; 'T'..'V': R:=r+'6'; 'W'..'Z': R:=r+'1'; '-' : R:=r+'3' else R:=R+S[i]; end; end; ShowMessage('رقم الهارديسك بعد التحويل : '+R); end; procedure TForm1.FormCreate(Sender: TObject); var s:string; begin s:=(GetIdeSerialNumber0); Edit1.Text:=s; end; end.


المثال المرفق :
[attachment=1414]
السلام عليكم ورحمه الله وبركاته

شرح كافي ووافي مراد 23

هل يوجد أمكانيه التعديل علي رقم القرص الصلب متل أداه PBDownForce
التي تقوم بعمل spoof لرقم القرص الحقيقي
السام عليكم
أظن أنك تريد من برنامجك أن لا يعمل إلا إدا تطابقت معلومات القرص الصلب
تلك حماية شخصية - لكن من له معرفة قليلة بالعندسة العكسية يتغلب على الأمر بسهولة ويجعله يقفز أوامر الحماية تلك ويشتغل في أي جهاز
شكرا جدا جدا فكرة جميلة
php3man كتب :هل يوجد أمكانيه التعديل علي رقم القرص الصلب متل أداه PBDownForce
التي تقوم بعمل spoof لرقم القرص الحقيقي

يمكن تغيير ال volum number وهو ليس الرقم التابت و يتغير بالفورمات

أما الرقم الثابت فلا مجال اتغييره (برمجيا)
فهو يتموضع على rom فى دائرة الهارد ديسك

و لو كان بالإمكان تغييره
لما إعتمدته جميع الشركات فى تمييز القطع المباعه منها عند طلب العميل لحقه فى الضمان