Visual Studio 2010 hdd veya cpu numaralarını öğrenmek ??

Başlatan EMG81, 27 Aralık 2010, 23:56:29

EMG81

Öncelikle herkese selamlar

Arkadaşlar vb6 da hdd seri numarası, cpu seri numaralarını öğrenebiliyordum. Visual Studio ya geçiş yaptım ve ardından Nette bir ton aramalar yaptım.  (Studio da yeni olduğumdan belki gözümden kaçmış olabilir) Fakat bu tarz uygulamalara raslayamadım. Visual studio 2010 da hdd veya cpu seri numaralarını nasıl öğrenebilirim ?


Burak B

Win32 API - GetVolumeInformation
ASM  -  CPUID komutu

Bu ikisini araştır. Ayrıca bu ikiliyi eğer programını korumak için kullanacaksan kırılması 30 dakka sürmez.
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

EMG81

Değerli yanıtınız için çok teşekkür ederim. Nette tekrardan aramalar yaptım, birkaç örnek gördüm fakat başarılı olamadım.

Evet programı korumak için kullanıcam fakat sistemi şu şekil düşündüm. CPU veya HDD numarasını programın her açılışında sistemden çekicem. Atıyorum   (hdd no *2) / (224-200)  birşey yaptırıcam. Ayrıca bu işlemin tam tersini yapan bir programım vasıtasıyla her farklı pc ye kurulan program için bir kod oluşturucam. bu kod vasıtasıyla eşleştirme yaptırıcam.  Bu şekil kırılabilirmi ?

Son olarak Visual net te çok yeniyim. O yüzden bazı şeyleri anlamakta şuanlık çok güçlük çekiyorum. Daha detaylı anlatırsanız çok sevinirim. Kolay gelsin.

iyildirim

EXE debug edilip bu check işleminin yapıldığı satırlar atlatılırsa kırılmış olur. Bu işlemi yapan hazır kırıcı prog. lar var.  Debug anında bu satırdan değilde şu satırdan devam etmesini söylemenin mümkün olduğu ve programda izlenen yola göre otomatik olarak exe üzerinde gerekli değişikliği yapan debuggerlar var. Bu şekilde bir koruma, ancak yazdığınız prog. geniş kitlelere hitap etmiyorsa, çok yüksek bir değeri yoksa yada herhangi biri bunu kırmayı kafaya koymamışsa etkili olur.

Kopya ve kırılmasını engelleme amaçlı olarak da exe'yi şifreleyen, ilk çalışma anında sistemde kernel mod debugger vs. yüklü ise çalışmayan yoksa exe'yi açıp programınızı  çalıştıran uygulamalarda mevcut. 
Net bir uygulama adı isterseniz maalesef hatırlamıyorum. Bilgim 4-5 yıl kadar önce kod güvenliği, kopyalama nasıl engellenir gibi basit bir araştırma  sonucunda öğrendiklerimden ibaret.

EMG81

Yanıtınız için teşekkür ederim. Öyle geniş kitlelere hitab eden birşey değil. Fakat dün geceden beri kafayı yiyeceğim. Hdd yada cpu seri nosunu alamadım ...

iyildirim

VB6 da nasıl yapıyorsunuz bilmiyorum. Sanırım VB6 da bir dll vs. çağırarak yapıyorsunuzdur. Aynı şekilde .NET de de bir dll çağırmak mümkün. .NET de daha zor olmaması gerekli diye düşünüyorum.

EMG81

Evet sanırım öyle birşeydi. bende Net. de daha kolay ve hızlı olduğunu düşünüyorum. Umarım yardımlarınız sayesinde yapabilirim...

sigmoid

İnternette yaptığım aramalar sonucunda bulduklarım.

http://www.codeproject.com/KB/system/GetHardwareInformation.aspx

http://www.csharpnedir.com/forum2/printer_friendly_posts.asp?TID=12997

http://social.msdn.microsoft.com/forums/en-US/Vsexpressvcs/thread/7003d7ae-90b5-41d0-b113-67e9301c8eec/

Düzeltme: OPs ben aramamı c# üzerine yapmıştım. Konunun sonradan Visual Basic içinde açıldığını fark ettim. Google da how to get hdd serial numbers in vb.net şeklinde ararsınız bir çok kod bulabilirsiniz.

EMG81

yanıtınız için teşekkür ederim abdullah bey basic bilgim iyi fakat c# bilgim yok denecek kadar az. Nette tekrardan aramalar yaptım ve bir kod u çalıştırmayı başardım. Fakat birşey dikkatimi çekti. HDD seri numarası :5A545D788T545G gibi Harfli birşeyler olması gerekirken bende sadece 1564648746 şeklinde rakamlar çıkıyor. Başka bir pc de denedim ondada sadece 0 çıkıyor. Kodlar ;



Public Class Form1


    Dim tmpStr2 As String = ""

    Dim myScop As New Management.ManagementScope("\\" & Environment.MachineName & "\root\cimv2")

    Dim oQuer As New Management.SelectQuery("SELECT * FROM WIN32_DiskDrive")

    Dim oResult As New Management.ManagementObjectSearcher(myScop, oQuer)

    Dim oIte As Management.ManagementObject

    Dim oPropert As Management.PropertyData

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load



    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        For Each oIte In oResult.Get()

            For Each oPropert In oIte.Properties

                If Not oPropert.Value Is Nothing AndAlso oPropert.Name = "Signature" Then

                    tmpStr2 = oPropert.Value.ToString

                    Exit For

                End If

            Next

        Next

        TextBox1.Text = (tmpStr2)
    End Sub
End Class

Digimensch

Visual Studio 2010  C# ile söyle birsey karaladim insallah isine yarar
using System;
using System.Collections.Generic;
using System.Management; 
using System.Linq;
using System.Text;

namespace HDD_Serial_Nummer
{
    class Program
    {
        //CPU Seri Numarasi icin gerekli Method
        public static string GetCPUId()
        {
            string cpuInfo = String.Empty;
            string temp = String.Empty;
            ManagementClass mc = new ManagementClass("Win32_Processor");
            ManagementObjectCollection moc = mc.GetInstances();
            foreach (ManagementObject mo in moc)
            {
                if (cpuInfo == String.Empty)
                {
                    cpuInfo ="\nCPU Serial Numarasi:"+ mo.Properties["ProcessorId"].Value.ToString();
                }
            }
            return cpuInfo;
        } 

          static void Main(string[] args)
        {

           int adet = 1;
            try
            {
                ManagementObjectSearcher Sucher = new ManagementObjectSearcher("root\\CIMV2","SELECT * FROM Win32_DiskDrive");
            
                  foreach (ManagementObject queryObj in Sucher.Get()) 

            {
                Console.WriteLine("-----------------------------------");
                Console.WriteLine((adet++)+".HDD"); 
                Console.WriteLine("-----------------------------------"); 
                Console.WriteLine("Marka: {0}", queryObj["Caption"]); 
                Console.WriteLine("Interface Tip: {0}", queryObj["InterfaceType"]);
                Console.WriteLine("Serial Numarasi: {0}", queryObj["SerialNumber"]); 
            }
                  Console.WriteLine(GetCPUId());
        }
                 catch (ManagementException e) 
                {
                    Console.WriteLine("Hata olustu:" + e.Message);
                  }
            
            Console.ReadLine();
}

    }
}
         

EMG81

Vakit ayırıp yorum yazdığın için çok teşekkür ederim ama C ile sadece led yakıp söndürecek kadar pic programlıyabiliyorum. İşin Visual C olayına çok uzağım. yani Ufo görmüş masum köylü gibiyim. yazdığım programda Basic dilinde ve program hazır gibi sadece HDD kodu ile giriş yapma kısmı kaldı. Ama şuda var ki C öğrenme çabalarım yılmadan sürekli devam etmekte. Birkaç aya kadar Visual C ye geçmeyi düşünüyorum. Değerli yanıtın için Tekrardan teşekkür ettim...

Digimensch

#11
VB.NET'e  herhalde bir ceviren arkadas olur olur.
Sadece su Method isine yariyacak....
using System.Manegement; // bu uzayi dahil etmeyi unutma

//String türünde veri döndüren Method istedigin yerden cagir
public static string GetCPUId()        
{           
string cpuInfo = String.Empty;            
string temp = String.Empty;           
ManagementClass mc = new ManagementClass("Win32_Processor");            
ManagementObjectCollection moc = mc.GetInstances();            
foreach (ManagementObject mo in moc)            
{                
if (cpuInfo == String.Empty)                
{                    
cpuInfo =mo.Properties["ProcessorId"].Value.ToString();                
}            
}            
return cpuInfo;        
}

iyildirim

Çoğu çevirici  "line 4 col 15: invalid TypeDecl" hatası verdi.
linktekini kullanınca
http://www.carlosag.net/Tools/CodeTranslator/

bunu verdi..
Imports System.Manegement

    
    ' bu uzayi dahil etmeyi unutma
    'String t�r�nde veri d�nd�ren Method istedigin yerden cagir
    Public Shared Function GetCPUId() As String
        Dim cpuInfo As String = String.Empty
        Dim temp As String = String.Empty
        Dim mc As ManagementClass = New ManagementClass("Win32_Processor")
        Dim moc As ManagementObjectCollection = mc.GetInstances
        For Each mo As ManagementObject In moc
            If (cpuInfo = String.Empty) Then
                cpuInfo = " mo.Properties["
                ProcessorId
                "].Value.ToString();              "
            End If
        Next
        Return cpuInfo
    End Function

EMG81


kudretuzuner

Merhaba
Ben size şöyle yardımcı olabilirim.Volkan Aktaş'ın VB Net 10 adlı kitabında 467 nci sayfadan itibaren "windows API lerini kullanma" adlı bir bölüm var çok kapsamlı anlatıyor.Ben de yeni yeni öğrenmeye başladığım için size ancak bu kadar yardımcı olabildim.Kolay gelsin.
Amatör