PDA

View Full Version : حرفه ای: سریال هار دیسک



zaeimh90
جمعه 17 شهریور 1391, 12:18 عصر
Dim S As String = ""
Dim physicalMedia As New Management.ManagementClass("Win32_PhysicalMedia")
For Each physicalMedium As Management.ManagementObject In physicalMedia.GetInstances()
S += Trim(CStr(physicalMedium("SerialNumber")))
Next physicalMedium
سلام خدمت همه دوستان.
ببینید من برای گرفتن سریال هارد دیسک که فکر میکنم یکتا ترین کد در سخت افزارها می باشد استفاده میکنم.
یه سوالم اینه که واقعا یکتاست؟
و اینکه میخواستم بدونم برای تمام سیستم ها چند بیتی هست.
یعنی از چند حرف تشکیل شده؟
ویک سوال دیگه هم اینکه میشه سریال هارد رو با سریال سی پی یو تلفیق کرد که یک سریال امن تر ساخت؟یا سریال سی پی یو یکتا نیست؟
این تعداد حروف سریالهارو برا این میخوام چون میخوام اونارو به قسمتهای 4تایی تبدیل کنم، مثل :
X24D-6G56-YUM6-M5LO
ممنون میشم جواب بدین.خیلی حیاتیه.

alimanam
جمعه 17 شهریور 1391, 19:42 عصر
با سلام


یه سوالم اینه که واقعا یکتاست؟

بله یکتاست . البته این که میگم یکتاست نسبی هستش یعنی در مقابل مشخصات سخت افزاری دیگه خیلی مشکل تر میشه تغییرش داد اون هم به صورت سخت افزاری !


و اینکه میخواستم بدونم برای تمام سیستم ها چند بیتی هست.

منظورتون رو متوجه نمیشم اما بر روی اکثر نسخه های ویندوز تست شده چه x64 چه x86


یعنی از چند حرف تشکیل شده؟

بستگی به سریال هارد دیسک شما داره متغییره .


ویک سوال دیگه هم اینکه میشه سریال هارد رو با سریال سی پی یو تلفیق کرد که یک سریال امن تر ساخت؟یا سریال سی پی یو یکتا نیست؟

چرا نمیشه تلفیقش کرد ! 2 تا رشته بیشتر که نیستن ! در مورد یکتا بودن سریال سی پی یو بحث سر یکتا بودنش نیست بحث سراینه که ممکنه اصلاً وجود خارجی روی بعضی سیستم ها نداشته باشه که اتفاقاً کم هم نیستن ( کارخانه سریال رو درج نمیکنه ! )


این تعداد حروف سریالهارو برا این میخوام چون میخوام اونارو به قسمتهای 4تایی تبدیل کنم، مثل :

خبری نیست؟

دوست عزیز ! خودتون که کد یونیک رو در کدی که در پست اول اوردین میتونین به دست بیارین , خوب با یه تابع اون رو هش کن و با فرمتی که نیاز داری نشونش بده , کار سختیه ؟!!!!

موفق باشید./

zaeimh90
شنبه 18 شهریور 1391, 01:47 صبح
ممنون از کمکت.
من الان فقط مشکلم اینه که نمیشه برای سریال هارد دیسک یه بازه برای اندازش تعیید کرد؟
مثلا بگیم از 10 حرف تا 30 حرف. این خیلی برام مهمه.

pooya1072
شنبه 18 شهریور 1391, 09:15 صبح
سلام دوست عزیز
سریال هارد دیسک مثل کد ملی من و شما می مونه , خودت بگو...میشه تعداد ارقام کد ملی رو تغییر داد؟
شماره سریال هر هارد دیسک تعداد ارقام مشخصی داره و قابل تغییر نیست که البته این تعدا ارقام برای هر هارد دیسکی می تونه متفاوت باشه.

alimanam
شنبه 18 شهریور 1391, 12:59 عصر
با سلام


من الان فقط مشکلم اینه که نمیشه برای سریال هارد دیسک یه بازه برای اندازش تعیید کرد؟
مثلا بگیم از 10 حرف تا 30 حرف. این خیلی برام مهمه.

ببین درست به پست قبلی من توجه نکردی ! من میگم سریال هایی که میخوای از سیستم کاربر استخراج کن حالا اون ها رو با هم جمع کن میشه یه رشته مثلاً 7K9HJD904HA0003N488 خوب این رشته رو هش کن مثلاً با الگوریتم MD5 بعد از هش کردن رشته فوق شما یه رشته جدید احتمالاً 32 کاراکتری جدید دارین ! خوب این رشته رو با فرمتی که دوست داری نمایش بده ! فکر نمیکنم کار پیچیده ایی باشه که متوجه اش نشی . من خودم یک یوزر کنترل در این زمینه دارم و همیشه ازش استفاده میکنم امکانات خوبی هم داره مثلاً با توجه به مشخصات سیستم کاربر و نام نرم افزار میتونی یک سریال کاملاً منحصر بفرد برای هر سیستم استخراج کنی . اگه بازم نتونستی انجامش بدی بگو برات آپ میکنم .

http://up.vbiran.ir/images/99yivqyeftenpdo0ypj.png

موفق باشید./

zaeimh90
شنبه 18 شهریور 1391, 14:43 عصر
اگه آپ کنی که ممنون میشم.
وی دوستان منظوره من اینه که ما که نمیدونیم مثلا برای سیستم من چند رقمه.امکان داره برای من 15 رقم باشه و برای شما 20 رقم.منظوره من اینه.
پس با این شرایط نمیتونیم یه کد سریال مشخص بسازیم.مثلا 15 رقم.منظوره من اینه.

alimanam
شنبه 18 شهریور 1391, 14:52 عصر
با سلامی 3 باره !


وی دوستان منظوره من اینه که ما که نمیدونیم مثلا برای سیستم من چند رقمه.امکان داره برای من 15 رقم باشه و برای شما 20 رقم.منظوره من اینه.
پس با این شرایط نمیتونیم یه کد سریال مشخص بسازیم.مثلا 15 رقم.منظوره من اینه.

عزیز وقتی میگم درست بخونین واسه همینه ! در الگوریتم MD5 شما چه یک کاراکتر چه 1000 کاراکتر بهش بدی همیشه یه رشته منحصر بفرد با طول مشخص دریافت میکنی .

موفق باشید./

zaeimh90
شنبه 18 شهریور 1391, 15:53 عصر
ممنون از کمکت.
میتونی یه توضیح درمورده MD5 و hash بدی.
مثلا از کد زیر استفاده میکنم :
Dim m As MD5 = MD5.Create
Dim s As HashAlgorithm
TextBox2.Text = s.ComputeHash(Encoding.Default.GetBytes(TextBox1.T ext)).ToString
مثلا ما تو این کد هم از hash استفاده کردیم و هم md5.
اول اینکه کذومش بهتره و چه فرقی با هم دارن.تقریبا تمام مقاله های سایتو هم خوندم چیزی دسگیرم نشد.ممنون میشم راهنمایی کنی؟

alimanam
شنبه 18 شهریور 1391, 16:01 عصر
با سلام

متدی که شما استفاده کردی درست نیست ! در MD5 شما باید با استفاده از Service Provider خود این الگوریتم مقدار رشته ایی که تبدیل به بایت شده رو هش کنین . از تابع زیر استفاده کنید .


Private Function MD5(ByVal SourceText As String) As String
Dim Ue As New UnicodeEncoding()
Dim ByteSourceText() As Byte = Ue.GetBytes(SourceText)
Dim Md5h As New MD5CryptoServiceProvider()
Dim ByteHash() As Byte = Md5h.ComputeHash(ByteSourceText)
Return Convert.ToBase64String(ByteHash)
End Function

موفق باشید./

zaeimh90
شنبه 18 شهریور 1391, 18:12 عصر
ممنون.
بعد یه سوال این MD5 که میگی از چه حروفی برای hash استفاده میکنه ( A-Z , a-z , 0-9 , !@#$%^&*()_+ )
همه اینا هست؟

AmiRReZzZzA
شنبه 18 شهریور 1391, 19:32 عصر
با سلام



ببین درست به پست قبلی من توجه نکردی ! من میگم سریال هایی که میخوای از سیستم کاربر استخراج کن حالا اون ها رو با هم جمع کن میشه یه رشته مثلاً 7K9HJD904HA0003N488 خوب این رشته رو هش کن مثلاً با الگوریتم MD5 بعد از هش کردن رشته فوق شما یه رشته جدید احتمالاً 32 کاراکتری جدید دارین ! خوب این رشته رو با فرمتی که دوست داری نمایش بده ! فکر نمیکنم کار پیچیده ایی باشه که متوجه اش نشی . من خودم یک یوزر کنترل در این زمینه دارم و همیشه ازش استفاده میکنم امکانات خوبی هم داره مثلاً با توجه به مشخصات سیستم کاربر و نام نرم افزار میتونی یک سریال کاملاً منحصر بفرد برای هر سیستم استخراج کنی . اگه بازم نتونستی انجامش بدی بگو برات آپ میکنم .

http://up.vbiran.ir/images/99yivqyeftenpdo0ypj.png

موفق باشید./


دوست عزیز میشه اپ کنید ما هم بهره مند شیم ؟ :لبخند::قلب:

alimanam
شنبه 18 شهریور 1391, 21:55 عصر
با سلام

از اینجا (http://lh.rs/XAmcVtnxJ6nf)دانلود کنین . ( پسورد : @89&*%393029 )

این کنترل رو باید به Toolbox ویژوال استودیو اضافه کنین . FW مورد نیاز 3.5 به بالا .

موفق باشید./

AmiRReZzZzA
یک شنبه 19 شهریور 1391, 19:22 عصر
مرسی از زحماتت :*

ali reza mansoori 2
دوشنبه 20 شهریور 1391, 22:31 عصر
Dll رو آنتی ویروسم پاکش کرد
مشکل از چیه؟؟؟
آنتی ویروسم نود ورژن 5 ک=ر=ک شده است

alimanam
سه شنبه 21 شهریور 1391, 11:27 صبح
با سلام


بعد یه سوال این MD5 که میگی از چه حروفی برای hash استفاده میکنه

این هم از اون سوال ها بود ها! خوب خودتون تست کنین ببینین چی برمیگردونه ! کد که ضیمیه شده بود ! من بایت ها رو تبدیل به Base64 کردم شما میتونی تبدیل به یه نوع رشته دیگه کنی , برای مثال :


Private Function MD5(ByVal SourceText As String) As String
Dim Ue As New UnicodeEncoding()
Dim ByteSourceText() As Byte = Ue.GetBytes(SourceText)
Dim Md5h As New MD5CryptoServiceProvider()
Dim ByteHash() As Byte = Md5h.ComputeHash(ByteSourceText)
'Return Convert.ToBase64String(ByteHash)
Dim sb As New StringBuilder()
For i As Integer = 0 To ByteHash.Length - 1
sb.Append(ByteHash(i).ToString("x2")) ' X2 = Character haye bozorg !
Next i
Return sb.ToString()
End Function



Dll رو آنتی ویروسم پاکش کرد

به این دلیل ویروس شناخت چون با نسخه کرک شده Dot net reactor مبهم شده ولی از نظر امنیتی مطمئناً مشکلی نداره . ( با دیگر آنتی ویروس ها به صورت آنلاین تست شده و مشکلی از این جهت نداره )

موفق باشید./

ali reza mansoori 2
سه شنبه 21 شهریور 1391, 14:24 عصر
میشه سورس dll رو هم قرار بدید

alimanam
چهارشنبه 22 شهریور 1391, 12:19 عصر
با سلام


میشه سورس dll رو هم قرار بدید


Imports System
Imports System.Management
Imports System.Security.Cryptography
Imports System.IO

Public Class HDWID

Private Function GetHardDiskSerial() As String
Try
Dim searcher As ManagementObjectSearcher
Dim query As String = "SELECT * FROM Win32_PhysicalMedia"
searcher = New ManagementObjectSearcher(query)
Dim SR As String = Nothing
For Each wmi_HD As ManagementObject In searcher.Get()
If Not wmi_HD("SerialNumber") Is Nothing Then
SR += wmi_HD("SerialNumber").ToString().Trim
End If
Next
Return SR
Catch ex As Exception
Throw (New Exception("Error in Hard Disk Serial" & ex.Message))
End Try
End Function
Private Function HMACMD5(ByVal text As String, ByVal key As String) As String
Try
If text IsNot Nothing AndAlso key IsNot Nothing Then
Dim Encoder = New System.Text.ASCIIEncoding()
Using MyHMD5 = New System.Security.Cryptography.HMACMD5(Encoder.GetBy tes(key))
Return String.Concat(Array.ConvertAll(MyHMD5.ComputeHash( Encoder.GetBytes(text)), Function(x) x.ToString("X2")))
End Using
Else
Return Nothing
End If
Catch ex As Exception
Throw (New Exception("Error in Encrypt Data !" & ex.Message))
End Try
End Function
Private Function base64Encode(ByVal sData As String) As String
Try
Dim encData_byte As Byte() = New Byte(sData.Length - 1) {}
encData_byte = System.Text.Encoding.UTF8.GetBytes(sData)
Dim encodedData As String = Convert.ToBase64String(encData_byte)
Return (encodedData)
Catch ex As Exception
Throw (New Exception("Error in Base64Encode" & ex.Message))
End Try
End Function
Private Function Encrypt(ByVal strText As String, ByVal strEncrKey As String) As String
Dim IV() As Byte = {&H12, &H34, &H56, &H78, &H90, &HAB, &HCD, &HEF}
Try
Dim bykey() As Byte = System.Text.Encoding.UTF8.GetBytes(strEncrKey)
Dim InputByteArray() As Byte = System.Text.Encoding.UTF8.GetBytes(strText)
Dim des As New DESCryptoServiceProvider
Dim ms As New MemoryStream
Dim cs As New CryptoStream(ms, des.CreateEncryptor(bykey, IV), CryptoStreamMode.Write)
cs.Write(InputByteArray, 0, InputByteArray.Length)
cs.FlushFinalBlock()
Return Convert.ToBase64String(ms.ToArray())
Catch ex As Exception
Return ex.Message
End Try
End Function
Private _Serial As String = String.Empty
Private _softwareName As String = My.Application.Info.ProductName
Public Property SoftwareName As String
Get
Return _softwareName
End Get
Set(value As String)
_softwareName = value
End Set
End Property
Public ReadOnly Property HardwareUniqueId As String
Get
Return l1.Text
End Get
End Property
Private Sub HDWID_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim h0x0h As String = HMACMD5(base64Encode(Encrypt(GetHardDiskSerial(), Me.SoftwareName)), Me.SoftwareName)
l1.Text = String.Format("{0}-{1}-{2}-{3}-{4}", h0x0h.Substring(0, 4), h0x0h.Substring(4, 4), h0x0h.Substring(9, 4), h0x0h.Substring(16, 4), h0x0h.Substring(26, 4))
Me.Size = New Size(l1.Width + 8, l1.Height + 6)
End Sub
Private Sub HDWID_Resize(sender As Object, e As EventArgs) Handles Me.Resize
Me.Size = New Size(l1.Width + 8, l1.Height + 8)
End Sub
Public Sub RandomUniqueSerial()
Dim h0x0h As String = HMACMD5((Date.Now.Millisecond), CStr(Date.Now.Millisecond))
l1.Text = String.Format("{0}-{1}-{2}-{3}-{4}", h0x0h.Substring(0, 4), h0x0h.Substring(4, 4), h0x0h.Substring(9, 4), h0x0h.Substring(16, 4), h0x0h.Substring(26, 4))
Me.Size = New Size(l1.Width + 8, l1.Height + 6)
End Sub

End Class


موفق باشید./

pooya1072
چهارشنبه 22 شهریور 1391, 13:02 عصر
سلام
من سعی دارم این کلاس رو توی برنامه ام بنویسم ولی یه مشکلی هست :



Imports System
Imports System.Management
Imports System.Security.Cryptography
Imports System.IO
Public Class Class1
Function GetHardDiskSerial() As String
Try
Dim Searcher As ManagementObjectSearcher
 
Catch ex As Exception
End Try
End Function
End Class



ManagementObjectSearcher اصلا توی برنامه من شناخته شده نیست.اروری که میده اینه:
Error 1 Type 'ManagementObjectSearcher' is not defined. C:\Users\pooyan\AppData\Local\Temporary Projects\ClassLibrary1\Class1.vb 9 29 ClassLibrary1

مشکلش چیه؟
من قبلا هم همین مشکل رو داشتم.

Hybrid
چهارشنبه 22 شهریور 1391, 13:19 عصر
مشکلش چیه؟
من قبلا هم همین مشکل رو داشتم.

سلام ، روی پروژتون راست کلیک کنید و گزینه ی Add reference رو انتخاب کنید سپس رفرنس System.management رو به برنامه اضافه کنید و بعد فضای نامی System.management رو Import کنید.

pooya1072
پنج شنبه 23 شهریور 1391, 15:21 عصر
سلام مجدد
فرض کنید زمانی که برنامه رو اجرا می کنیم روی سیستم چندین هارد نصب باشه که هارد اکسترنال هم شاملشون میشه.در این صورت چطور باید هاردی که سیستم عامل روش نصبه رو تشخیص بدیم.(فکر کنم اصولا این هارد,هاردیه که مد نظر ماست و می خواهیم سریالش رو بدست بیاریم.)

alimanam
جمعه 24 شهریور 1391, 22:59 عصر
با سلام


فرض کنید زمانی که برنامه رو اجرا می کنیم روی سیستم چندین هارد نصب باشه که هارد اکسترنال هم شاملشون میشه.در این صورت چطور باید هاردی که سیستم عامل روش نصبه رو تشخیص بدیم.(فکر کنم اصولا این هارد,هاردیه که مد نظر ماست و می خواهیم سریالش رو بدست بیاریم.)

برای اینکار از API ویندوز میشه کمک گرفت در اونجا به راحتی درایو سیستم عامل رو به تابع برگردوندن سریال هارد دیسک میدین و به طبع سریالی رو به دست میارین که مد نظرتونه .

موفق باشید./