PDA

View Full Version : پیدا کردن سریال فلش



Delphi7_love
شنبه 06 شهریور 1389, 15:24 عصر
میخوام ببیمنم چطور میتونم سریال یک فلش رو بدست بیارم ؟
اطلاعاتی که میشه از یک فلش بدست آورد چیه؟(قسمت خالی ، پر ، اندازه فلش ، سریال و ...)

Felony
شنبه 06 شهریور 1389, 16:39 عصر
تابع DiskSize برای به دست آوردن سایز درایو ، DiskFree مقدار فضای خالی ، با کم کردن حاصل این 2 تابع هم میتونید مقدار فضای اشغال شده رو به دست بیارید ، برای سریال هم :

function GetSerial(Volume: string): string;
var
VolumeName: array[0..255] of char;
FileSystemType: array[0..255] of char;
SerialNum: DWORD;
MaxFilenameLength: DWORD;
Flags: DWORD;
begin
Result := '';
if (GetVolumeInformation(PChar(Volume),
VolumeName,
256,
@SerialNum,
MaxFilenameLength,
Flags,
FileSystemType,
256)) then
Result := (IntToHex(SerialNum shr 16, 3) + '-' +
IntToHex((SerialNum shl 16) shr 16, 4));
end;

SAASTN
شنبه 06 شهریور 1389, 18:35 عصر
برای مثال آقای تاجیک باید اسم درایو رو بدونی. برای تشخیص نوع هر درایو میشه از GetDriveType استفاده کرد. اگه خروجی 2 یا DRIVE_REMOVABLE باشه اون درایو احتمالا فلشه.
کلا APIهای کار با درایو ها اینجا لیست شدن:
http://msdn.microsoft.com/en-us/library/aa365730(v=VS.85).aspx

Delphi7_love
شنبه 06 شهریور 1389, 23:56 عصر
با تشکر
ولی من میخوام سریال خود فلش رو بدست بیارم ، یه چیزی تو مایه های قفل درست کردن که سریال یکتا داشته باشه ، کدی که جناب تاجیک گذاشتن با فرمت کردن فلش عوض شه .

Felony
یک شنبه 07 شهریور 1389, 05:35 صبح
با تشکر
ولی من میخوام سریال خود فلش رو بدست بیارم ، یه چیزی تو مایه های قفل درست کردن که سریال یکتا داشته باشه ، کدی که جناب تاجیک گذاشتن با فرمت کردن فلش عوض شه .

من قبلا خیلی دنبال همچین چیزی بودم ولی چیز به درد بخوری پیدا نکردم .

Delphi7_love
یک شنبه 07 شهریور 1389, 11:15 صبح
با تشکر از شما آقای تاجیک
چه اطلاعاتی به نظر شما میتونم از فلش بگیرم که این کارو واسم انجام بده؟

Delphi7_love
یک شنبه 07 شهریور 1389, 20:41 عصر
کسی در این مورد اطلاعات نداره ؟

Felony
یک شنبه 07 شهریور 1389, 21:00 عصر
من خودم این میخواستم برای سیستم یه قفل بنویسم که وقتی فلش به سیستم وصل شد اگر ناشناس بود سیستم قفل بشه و اینطور عمل کردم :

یه الگوریتم رمزنگاری برای خودم نوشتم و همین سریال فلش که تابعش رو در اختیارتون گزاشتم رو با اون الگوریتم کد میکردم و در یک فایل در داخل فلش ذخیره میکردم ( مثلا Code.dll ) ، وقتی فلش به سیستم متصل میشد اون فایل رو میخوندم و اطلاعاتش رو تو برنامم دیکد میکردم ، حالا اگر کد دیکد شده = سریال فلش بود و این کد در دیتابیس هم موجود بود یعنی فلش مجوز ورود داره و اگر نبود سیستم رو قفل میکردم ، اینطوری اگر کسی هم فایل رو باز میکرد از اطلاعاتش سر در نمیاورد تا بخواد دورش بزنه و اگر هم فرمتش میکرد که اون فایل از بین میرفت و اگر تو فلش دیگه هم کپیش میکرد چون برنامه سریال دیکد شده رو با سریال جاری فلش مقایسه میکرد کاری از پیش نمیبرد .

موفق باشید .

Delphi7_love
یک شنبه 07 شهریور 1389, 21:31 عصر
متشکرم از لطف شما آقای تاجیک
خوب حالا فرض کنیم شما فلشی رو که مجوز ورود بهش دادین یه جایی نیاز شد تا فرمتش کنید . حالا دیگه هم فایل داخلش پاک میشه و هم شماره سریال . و قابل شناسایی توسط سیستمتون نیست .
آیا برای این مسئله راه حلی پیدا کردید
سپاسگزارم

Felony
یک شنبه 07 شهریور 1389, 23:08 عصر
نه راه حلی نیست و تبدیل به یه فلش غیر قابل شناسایی میشه و برای شناساییش باید دوباره اون فایل رو توسط برنامتون براش ایجاد کنید .

abazzi
یک شنبه 07 شهریور 1389, 23:21 عصر
یه کامپوننت هست که به شما سریال هر فلش رو به صورت مجزا میده یهنی بر ای هر فلش در دنیا فقط یه شماره سریال
USBPhysic-DLL 1.0.0.1

Delphi7_love
دوشنبه 08 شهریور 1389, 00:13 صبح
ممنون دوست عزیز
این کامپونت پولیه . اگه کامپونت مجانی سراغ دارید راهنمایی نمایید
متشکرم

صابر طهماسبی
دوشنبه 08 شهریور 1389, 12:35 عصر
من در تاپیک زیر
http://www.barnamenevis.org/forum/showthread.php?t=150122&page=3
مطالبی خوندم که نشون میده سریال فلش به راحتی قابل تغییره!
اگه اینطور باشه دیگه این روش جواب نمی ده!!

Delphi7_love
دوشنبه 08 شهریور 1389, 14:11 عصر
من در تاپیک زیر
http://www.barnamenevis.org/forum/showthread.php?t=150122&page=3
مطالبی خوندم که نشون میده سریال فلش به راحتی قابل تغییره!
اگه اینطور باشه دیگه این روش جواب نمی ده!!
اون کدی که در این تاپیک هست سریال فیزیکی فلش رو نمیده و همین کدی هست که آقای تاجیک گذاشتن . و زمانی که فلش فرمت میشه سریال عوض میشه ، اگه بشه سریال فیزیکی فلش رو بدست آورد فکر نمی کنم بشه به این سادگی ها عوضش کرد .

صابر طهماسبی
سه شنبه 09 شهریور 1389, 22:19 عصر
ببخشید دوستان اشتباه متوجه شدم
روش آقای تاجیک هیچ مشکلی نداره چون اگه سریال فلش تغییر کنه دیگه با دیکد کردن اطلاعات فایل داخل اون با سریال فلش مطابقت نداره و برنامه از کار می افته
تنها راه شکستن این قفل پیدا کردن الگوریتم رمز نگاری استفاده شده توسط ایشان است که آن هم به این سادگی امکان پذیر نیست

Delphi7_love
چهارشنبه 10 شهریور 1389, 01:43 صبح
ببخشید دوستان اشتباه متوجه شدم
روش آقای تاجیک هیچ مشکلی نداره چون اگه سریال فلش تغییر کنه دیگه با دیکد کردن اطلاعات فایل داخل اون با سریال فلش مطابقت نداره و برنامه از کار می افته
تنها راه شکستن این قفل پیدا کردن الگوریتم رمز نگاری استفاده شده توسط ایشان است که آن هم به این سادگی امکان پذیر نیست
ببین دوست عزیز تابع آقای تاجیک سریال درایو رو میده و با یه فرمت کردن ، سریال عوض میشه و قابل شناسایی توسط برنامه نیست و این یه مشکل بزرگه
ما باید بتونیم سریال فیزیکی فلش رو بدست بیاریم تا برای همیشه بتونیم این سریال رو شناسایی کنیم ، من حسابی دنبال گشتم ولی موفق نشدم .

صابر طهماسبی
چهارشنبه 10 شهریور 1389, 13:31 عصر
ببین دوست عزیز تابع آقای تاجیک سریال درایو رو میده و با یه فرمت کردن ، سریال عوض میشه و قابل شناسایی توسط برنامه نیست و این یه مشکل بزرگه
ما باید بتونیم سریال فیزیکی فلش رو بدست بیاریم تا برای همیشه بتونیم این سریال رو شناسایی کنیم ، من حسابی دنبال گشتم ولی موفق نشدم .
متشکرم
فرمایش شما کاملا درست است
بنده مبنا را این گرفته بودم که فلش هیچ گونه تغییری نمی کنه

صابر طهماسبی
چهارشنبه 10 شهریور 1389, 13:50 عصر
سلام
فکر کنم پیداش کردم
با VB من که ازش سر در نیاوردم اگه دوستان لطف کنند به دلفی تبدیل کنند خیلی ممنون میشم:

http://www.emmet-gray.com/Articles/USB_SerialNumbers.htm

اینجا هم هست با ++C :

http://www.codeproject.com/KB/mcpp/DriveInfoEx.aspx

این هم دلفی (البته بنده زیاد با توابع API آشنا نیستم و اصلا نمی دونم این کد چطور کار می کنه در دلفی هم هنوز تازه کارم و این هم با جستجو پیدا کردم اگه مشکلی داره لطف کنید بگید تا پست را پاک کنم-ممنون) :





Function GetDiskSerial(lpRootPathName : PChar) : Int64;
var
// lpVolumeSerialNumber : DWORD;
lpMaximumComponentLength : DWORD;
lpFileSystemFlags : DWORD;
begin
Result := 0;
lpMaximumComponentLength := 0;
lpFileSystemFlags := 0;

GetVolumeInformation(lpRootPathName ,
Nil ,
0 ,
@Result ,
lpMaximumComponentLength,
lpFileSystemFlags ,
Nil ,
0);

Felony
چهارشنبه 10 شهریور 1389, 14:10 عصر
سلام
فکر کنم پیداش کردم(البته بنده زیاد با توابع API آشنا نیستم و اصلا نمی دونم این کد چطور کار می کنه در دلفی هم هنوز تازه کارم و این هم با جستجو پیدا کردم اگه مشکلی داره لطف کنید بگید تا پست را پاک کنم-ممنون) :





Function GetDiskSerial(lpRootPathName : PChar) : Int64;
var
// lpVolumeSerialNumber : DWORD;
lpMaximumComponentLength : DWORD;
lpFileSystemFlags : DWORD;
begin
Result := 0;
lpMaximumComponentLength := 0;
lpFileSystemFlags := 0;

GetVolumeInformation(lpRootPathName ,
Nil ,
0 ,
@Result ,
lpMaximumComponentLength,
lpFileSystemFlags ,
Nil ,
0);


خیر ، این کد سریال فیزیکی رو به دست نمیاره .

Delphi7_love
چهارشنبه 10 شهریور 1389, 14:11 عصر
سلام دوست عزیز
ممنون
حالا من یه تاپیک دیگه ایجاد میکنم تا ببینیم کسی میتونه اونو به دلفی تبدیل کنه یا نه .

Felony
چهارشنبه 10 شهریور 1389, 14:12 عصر
سلام دوست عزیز
ممنون
حالا من یه تاپیک دیگه ایجاد میکنم تا ببینیم کسی میتونه اونو به دلفی تبدیل کنه یا نه .

کد به زبان دلفی هست دیگه !

صابر طهماسبی
چهارشنبه 10 شهریور 1389, 14:15 عصر
خیر ، این کد سریال فیزیکی رو به دست نمیاره .
ممنونم
از لینک زیر دیدمش:

http://www.delphipages.com/forum/showthread.php?t=196437

ممکنه کمی راهنمایی کنید کدی که این تابع برای درایو می ده مربوط به چیه؟

Delphi7_love
چهارشنبه 10 شهریور 1389, 14:21 عصر
ممنونم
از لینک زیر دیدمش:

http://www.delphipages.com/forum/showthread.php?t=196437

ممکنه کمی راهنمایی کنید کدی که این تابع برای درایو می ده مربوط به چیه؟
این هم همون سریال درایوه
همه پست ها همزمان با هم ارسال شد
--------------------

کد به زبان دلفی هست دیگه !
تاپیک ها با هم انجام شد
منظور من پست شماره 18 (لینک ها )بود
http://www.emmet-gray.com/Articles/U...ialNumbers.htm (http://www.emmet-gray.com/Articles/USB_SerialNumbers.htm)

صابر طهماسبی
چهارشنبه 10 شهریور 1389, 14:28 عصر
تاپیک ها با هم انجام شد
ببخشید
من سه بار اون پست رو ویرایش کردم