PDA

View Full Version : بدست آوردن سریال MainBoard



mousa1992
دوشنبه 05 تیر 1391, 00:09 صبح
سلام دوستان
میخوام سریال مادربورد رو بدست بیارم
سرچ کردم در سایت و کدهایی رو هم گیر اوردم و نمونش :
using System.Management;

public static string GetMotherBoardID()
{
string mbInfo = String.Empty;
ManagementScope scope = new ManagementScope("\\\\" + Environment.MachineName + "\\root\\cimv2");
scope.Connect();
ManagementObject wmiClass = new ManagementObject(scope, new ManagementPath("Win32_BaseBoard.Tag=\"Base Board\""), new ObjectGetOptions());

foreach (PropertyData propData in wmiClass.Properties)
{
if (propData.Name == "SerialNumber")
mbInfo = String.Format("{0,-25}{1}", propData.Name, Convert.ToString(propData.Value));
}

return mbInfo;
}

برنامه کلاس هایی رو که تو این متد استفاده شده رو شناسایی نمیکنه !! ( در صورتی که name space بالایی رو اضافه کردم !!) ایا از فضای نام دیگری باید استفاده کنم و یا مشکل از چیه؟؟
متشکرم

Saeed_m_Farid
دوشنبه 05 تیر 1391, 13:54 عصر
شما باید اول System.Management (http://msdn.microsoft.com/en-us/library/system.management.aspx) رو به Reference پروژه اضافه کنی
این تابع از WMI استفاده میکنه و معمولاً‌ هم خالیه جوابش‌ :دی
اگه برای برای قفل و اینا میخوای، باید بصورت ترکیبی از سریالها استفاده کنی؛ دوست شیرازی مون اینجا (http://www.codeproject.com/Articles/17973/How-To-Get-Hardware-Information-CPU-ID-MainBoard-I) یه مقاله در موردش نوشته ...

ali.bahrami
دوشنبه 05 تیر 1391, 13:58 عصر
سلام دوست عزیز ... باید System.management را توی قسمت References برنامه هم اضافه کنید.
روی فولدر References‌راست کلیک کنید بعد گزینه add references را بزنید. در بنجره باز شده در تب NET. میتونید اسمبلی را پیدا کرده و به برنامتون اضافه کنید.

سوالی بود در خدمتم

mousa1992
دوشنبه 05 تیر 1391, 17:17 عصر
این تابع از WMI استفاده میکنه و معمولاً‌ هم خالیه جوابش‌ :دی
سلام
تشکر میکنم از علی اقا و سعید اقا
سایتی که این کد رو ازش گرفتم هم همینو گفته بود که ممکنه جواب نده
ایا روشی وجود داره که به طور قطع جواب بده ؟؟

اگه برای برای قفل و اینا میخوای، باید بصورت ترکیبی از سریالها استفاده کنی؛ دوست شیرازی مون اینجا (http://www.codeproject.com/Articles/17973/How-To-Get-Hardware-Information-CPU-ID-MainBoard-I) یه مقاله در موردش نوشته ...
اره یه سری الگوریتم ها رو دیدم برای قفل ولی خب یه چیز دیگه تو ذهنم هست که میخوام همونو پیاده کنم و نیاز دارم که سریال مادربورد رو بگیرم بدون خطا !

Saeed_m_Farid
دوشنبه 05 تیر 1391, 18:20 عصر
ایا روشی وجود داره که به طور قطع جواب بده ؟؟ ... بدون خطا !
نه متاسفانه! برای اینکه ببینی مشکل از کجاست، تو Event Viewer بگرد و Error‌ هایی که مربوط به WMI هست رو نگاه کن؛ مثلاً برای اینکار یه Error ای مثل این میگیری :

Event filter with query "SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA "Win32_Processor" AND TargetInstance.LoadPercentage > 99" could not be reactivated in namespace "//./root/CIMV2" because of error 0x80041003. Events cannot be delivered through this filter until the problem is corrected.
کلاً برای محافظت از نرم افزار و برنامه و ... باید بری دست به دامن بچه های برنامه نویسی سطح پایین بشی (Ring0، SSDT، Kernel Mode و ...) و فکر نکنم با اینجور سریال بازی و ... جواب بگیری! اگه خیلی علاقه داری برو تو این تالار: امنیت در نرم افزار و برنامه نویسی (http://barnamenevis.org/forumdisplay.php?66) (مثلاً محافظت از برنامه فايل اجرايي (http://barnamenevis.org/showthread.php?104440)) بعد از یکی دو ماه بیا حالِت رو می‌پرسم :لبخند:
خلاصه اش اینکه واسه اینحور کارها، با بچه مچه طرف نیستی، کسی که بخواد قفل برنامه تو رو بشکنه، خیلی خفن تر از این حرف هاست که با دو سه تا شماره سریال و ... بخوای جلوش رو بگیری (معمولاً هم جار نمیزنه که آهای، بیاین من قفل فلان برنامه رو شکستم و شما هم فکر میکنی عجب قفلی!)؛ مگه اینکه قصدت از اینکار چیز دیگه ای باشه

mousa1992
دوشنبه 05 تیر 1391, 18:28 عصر
متشکرم از راهنماییتون
ولی فک نمیکنم *فعلا* اون حرفه ای ها بیان وقتشون رو بذارن برنامه ای که نوشتم قفلشو بشکونن :لبخند:
فقط میخوام که برنامه ای رو که برا جایی مینویسم به راحتی نشه برش داشتو یه جای دیگه نصبش کرد در همین حد!(با حرفه ای ها سرو کار ندارم )
در مورد گرفتن سریال هارد دیسک و سی پی یو چی ؟ ایا اونا رو هم نمیشه به قطع بدست اورد ؟!

Saeed_m_Farid
دوشنبه 05 تیر 1391, 20:12 عصر
در مورد گرفتن سریال هارد دیسک و سی پی یو چی ؟ ایا اونا رو هم نمیشه به قطع بدست اورد ؟!
وقتی مرع شما یه پا داره، باشه! شما می‌تونید یه ترکیبی از اونها (سریال پردازنده، MAC، BIOS، هارد و ...) رو برای چیزی مثل FingerPrint برای سیستم درنظر بگیرین، ولی یادم باشه حتماً یه سری به برنامه شما بزنم :لبخند:
using System;
using System.Management;
using System.Security.Cryptography;
using System.Security;
using System.Collections;
using System.Text;
namespace Security
{
/// <summary>
/// Generates a 16 byte Unique Identification code of a computer
/// Example: 4876-8DB5-EE85-69D3-FE52-8CF7-395D-2EA9
/// </summary>
public class FingerPrint
{
private static string fingerPrint = string.Empty;
public static string Value()
{
if (string.IsNullOrEmpty(fingerPrint))
{
fingerPrint = GetHash("CPU >> " + cpuId() + "\nBIOS >> " +
biosId() + "\nBASE >> " + baseId() +
"\nDISK >> " + diskId() + "\nVIDEO >> " +
videoId() +"\nMAC >> "+ macId());
}
return fingerPrint;
}
private static string GetHash(string s)
{
MD5 sec = new MD5CryptoServiceProvider();
ASCIIEncoding enc = new ASCIIEncoding();
byte[] bt = enc.GetBytes(s);
return GetHexString(sec.ComputeHash(bt));
}
private static string GetHexString(byte[] bt)
{
string s = string.Empty;
for (int i = 0; i < bt.Length; i++)
{
byte b = bt[i];
int n, n1, n2;
n = (int)b;
n1 = n & 15;
n2 = (n >> 4) & 15;
if (n2 > 9)
s += ((char)(n2 - 10 + (int)'A')).ToString();
else
s += n2.ToString();
if (n1 > 9)
s += ((char)(n1 - 10 + (int)'A')).ToString();
else
s += n1.ToString();
if ((i + 1) != bt.Length && (i + 1) % 2 == 0) s += "-";
}
return s;
}
#region Original Device ID Getting Code
//Return a hardware identifier
private static string identifier
(string wmiClass, string wmiProperty, string wmiMustBeTrue)
{
string result = "";
System.Management.ManagementClass mc =
new System.Management.ManagementClass(wmiClass);
System.Management.ManagementObjectCollection moc = mc.GetInstances();
foreach (System.Management.ManagementObject mo in moc)
{
if (mo[wmiMustBeTrue].ToString() == "True")
{
//Only get the first one
if (result == "")
{
try
{
result = mo[wmiProperty].ToString();
break;
}
catch
{
}
}
}
}
return result;
}
//Return a hardware identifier
private static string identifier(string wmiClass, string wmiProperty)
{
string result = "";
System.Management.ManagementClass mc =
new System.Management.ManagementClass(wmiClass);
System.Management.ManagementObjectCollection moc = mc.GetInstances();
foreach (System.Management.ManagementObject mo in moc)
{
//Only get the first one
if (result == "")
{
try
{
result = mo[wmiProperty].ToString();
break;
}
catch
{
}
}
}
return result;
}
private static string cpuId()
{
//Uses first CPU identifier available in order of preference
//Don't get all identifiers, as it is very time consuming
string retVal = identifier("Win32_Processor", "UniqueId");
if (retVal == "") //If no UniqueID, use ProcessorID
{
retVal = identifier("Win32_Processor", "ProcessorId");
if (retVal == "") //If no ProcessorId, use Name
{
retVal = identifier("Win32_Processor", "Name");
if (retVal == "") //If no Name, use Manufacturer
{
retVal = identifier("Win32_Processor", "Manufacturer");
}
//Add clock speed for extra security
retVal += identifier("Win32_Processor", "MaxClockSpeed");
}
}
return retVal;
}
//BIOS Identifier
private static string biosId()
{
return identifier("Win32_BIOS", "Manufacturer")
+ identifier("Win32_BIOS", "SMBIOSBIOSVersion")
+ identifier("Win32_BIOS", "IdentificationCode")
+ identifier("Win32_BIOS", "SerialNumber")
+ identifier("Win32_BIOS", "ReleaseDate")
+ identifier("Win32_BIOS", "Version");
}
//Main physical hard drive ID
private static string diskId()
{
return identifier("Win32_DiskDrive", "Model")
+ identifier("Win32_DiskDrive", "Manufacturer")
+ identifier("Win32_DiskDrive", "Signature")
+ identifier("Win32_DiskDrive", "TotalHeads");
}
//Motherboard ID
private static string baseId()
{
return identifier("Win32_BaseBoard", "Model")
+ identifier("Win32_BaseBoard", "Manufacturer")
+ identifier("Win32_BaseBoard", "Name")
+ identifier("Win32_BaseBoard", "SerialNumber");
}
//Primary video controller ID
private static string videoId()
{
return identifier("Win32_VideoController", "DriverVersion")
+ identifier("Win32_VideoController", "Name");
}
//First enabled network card ID
private static string macId()
{
return identifier("Win32_NetworkAdapterConfiguration",
"MACAddress", "IPEnabled");
}
#endregion
}
}
نحوه استفاده هم :
MessageBox.Show(FingerPrint.Value());

* مرجع (http://sowkot.blogspot.com/2008/08/generating-unique-keyfinger-print-for.html)
___________________
پ.ن.: با اینکه من اینکاره نیستم، ولی همونطورکه در جواب پ.خ. شما گفتم،‌ شما بیشتر طرف رو حساس می کنید بره حالتون رو بگیره:

100% راه نامناسبیه!
مطالب اون تالار رو بخونین، کلی در مورد روش های دور زدن این روش مطلب هست که حتی اگه شما از گرفتن شماره سریال مطمئن باشید، بازم مثل آب خوردن میشه اون سطر مقایسه شما رو پرید! مخصوصاً که شما کد Managed می‌نویسین و تقریباً سورس تون بدون زحمت قابل دستیابی هست؛ بحثش مفصله و باید خیلی در موردش مطالعه کنید.

بهروز عباسی
دوشنبه 05 تیر 1391, 21:35 عصر
در مورد گرفتن سریال هارد دیسک و سی پی یو چی ؟ ایا اونا رو هم نمیشه به قطع بدست اورد ؟!
درود
در مورد CPU میتونم با اسمبلی اینلاین در دلفی برات DLL ایجاد کنم اما استفادش در C# با خودت چون من زیا وارد نیستم(به C#) خواستی پیام خصوصی بده تا بذارم اینجا

بهروز عباسی
دوشنبه 05 تیر 1391, 22:05 عصر
نوشتم اینم فایل DLL و یک فایل اجرایی اول فایل اجرایی رو اجرا کن اگر جواب داد که با خیال راحت از Dll استفاده کن برای هارد هم یه کاری کردم(برای این کار باید هردو فایل کنار هم باشند)

برای استفاده کافی تابع GetCpuIDEX رو خروجیش از نوع String در دلفی هست(معادلش رو پیدا کن) و فراخوانی کن

mousa1992
سه شنبه 06 تیر 1391, 12:16 عصر
سلام و متشکرم از جوابتون


Saeed_m_Farid (http://barnamenevis.org/member.php?41415-Saeed_m_Farid)
ولی یادم باشه حتماً یه سری به برنامه شما بزنم :لبخند:

ولی فک نکنم برنامم دستتون بیافته ها :لبخند:
قیمتش زیاده اگه کافینت زدی خواستی بگو برات نصبش کنم :لبخند: (میبخشید یه کم شوخ طبعم) متشکرم از لطفتون :بوس:


درود
در مورد CPU میتونم با اسمبلی اینلاین در دلفی برات DLL ایجاد کنم اما استفادش در C#‎ با خودت چون من زیا وارد نیستم(به C#‎) خواستی پیام خصوصی بده تا بذارم اینجا

از دوست عزیز اقای عباسی تشکر میکنم بابت dll :بوس: