Ir para conteúdo
Fórum Script Brasil
  • 0

Capturar séries de hardware


alexandremanowar

Pergunta

E ae pessoal beleza

Esses dias vi um software feito em vb.net que o programa captura o número de série do hd e da placa de rede e usa isso como identificação da máquina que o programa esta sendo instalado quando eu cliquei no menu identificação ele mostrou a key do programa e os números do série do hd e da placa de rede! Achei isso super 10. Alguém sabe como eu posso fazer isso? Como eu capturo o nº de série do hd ou qualquer outro componente?

Valeu

Link para o comentário
Compartilhar em outros sites

14 respostass a esta questão

Posts Recomendados

  • 0

Alexandre,

Eu também estou tentando encontrar uma solução de controlar as licenças dos softwares que desenvolvo.

Inclusive, na empresa que eu trabalho existe alguns software que pagamos mensalidades, ai eles fornecem um código mensalmente e colocamos em um form e ele libera por 30 dias, como seria possível agregar essas duas soluções ?? identificar pelo numero d HD e placa de rede e como também por esse código mensal ??

falows

Link para o comentário
Compartilhar em outros sites

  • 0
E ae pessoal beleza

Esses dias vi um software feito em vb.net que o programa captura o número de série do hd e da placa de rede e usa isso como identificação da máquina que o programa esta sendo instalado quando eu cliquei no menu identificação ele mostrou a key do programa e os números do série do hd e da placa de rede! Achei isso super 10. Alguém sabe como eu posso fazer isso? Como eu capturo o nº de série do hd ou qualquer outro componente?

Valeu

Ae, dá uma olhada nesses dois links. Eles mostram como pegar o serial do HD do usuário. Bom, eles estão escritos em VB6, mas é extermamente simples passar para .NET (Se for preciso)

http://www.macoratti.net/dica2.htm

http://www.macoratti.net/d240207.htm

Alexandre,

Eu também estou tentando encontrar uma solução de controlar as licenças dos softwares que desenvolvo.

Inclusive, na empresa que eu trabalho existe alguns software que pagamos mensalidades, ai eles fornecem um código mensalmente e colocamos em um form e ele libera por 30 dias, como seria possível agregar essas duas soluções ?? identificar pelo numero d HD e placa de rede e como também por esse código mensal ??

falows

Matheus, você pode por exemplo, pegar o ID do serial, concatenar ele ao mes e ano e depois criptografar isso para gerar o "código de liberação". O problema é: como você vai fazer para pegar o serial do HD do usuário?

porque você poderia passar essas informações pela net... Mas ai o usuário teria de estar online...

Bom, sei lá heheheh.. Minha opinião..

Flws

Link para o comentário
Compartilhar em outros sites

  • 0

em um dos softwares que eu trabalho aqui na empresa, todo mês, quando o período de utilização acaba, a gente liga pra o dono do software e informamos um código que tem num form lá e ele fornece outro pra gente, ai ele automaticamente já fica liberado, eu queriai entender como ele faz isso... é bem interessante e evita muito a questão de cópias ilegais...

valeu!

Link para o comentário
Compartilhar em outros sites

  • 0

Exatamente como ele faz isso eu não sei... Mas não é dificil pensar em uma maneira nova de fazer..

De uma maneira bem simples (e até facil de ser hackeada), basta você fazer o seguinte:

Primeiro é preciso gerar o "código". Para isso, você pode utilizar um GUID, ou qualquer outra forma que quiser, desde que esse código possa ser resgatado mais pra frente.

Esse código seria enviado para você.

Dai você pega algum método para encriptar e passa em codigo pelo cript, que vai gerar um outro valor qualquer lá, que você devolve para o usuário.

Ai quando você passar esse novo valor para o usuario, ele irá digitar no programa, que irá encriptografar (ou descriptografar) e comparar os códigos. Se forem iguais, o programa destrava.

Bom, como eu disse, esse jeito ai é extremamente falho, e qualquer um q saiba utilizar o google e tenha a minima noção de programação consegue quebrar.. Mas a idéia tá ai.. basta torná-la segura heheheh..

flws

Link para o comentário
Compartilhar em outros sites

  • 0

E ae pessoal beleza!

Então valeu a todos que estão me dando uma força.

Eu consegui fazer algo e esta pegando os dados do hd, porém acho que tem uma falha, ele pega todos os hds exitente se tiver 2 ele pega 2 se tiver 3 ele pega 3, eu quero que ele pegue apenas o hd que esta o windows ou seja o principal, bom vou mostrar o código:

Essa é a class com as váriáveis:

Class HardDrive
    Private m_model As String = Nothing
    Private m_type As String = Nothing
    Private m_serialNo As String = Nothing
    Public Property Model() As String
        Get
            Return m_model
        End Get
        Set(ByVal value As String)
            m_model = value
        End Set
    End Property
    Public Property Type() As String
        Get
            Return m_type
        End Get
        Set(ByVal value As String)
            m_type = value
        End Set
    End Property
    Public Property SerialNo() As String
        Get
            Return m_serialNo
        End Get
        Set(ByVal value As String)
            m_serialNo = value
        End Set
    End Property
End Class
E esse é o código que exibe o resultado:
Imports System.Management
Public Class Form1

    Private Sub btnSerie_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSerie.Click
        Dim HardDisk, Tipo, Serial As String
        Dim searcher As New ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive")
        Dim hdCollection As New ArrayList()
        For Each wmi_HD As ManagementObject In searcher.[Get]()
            Dim hd As New HardDrive()
            hd.Model = wmi_HD("Model").ToString()
            HardDisk = hd.Model
            hd.Type = wmi_HD("InterfaceType").ToString()
            Tipo = hd.Type
            hdCollection.Add(hd)
        Next

        searcher = New ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia")

        Dim i As Integer = 0
        For Each wmi_HD As ManagementObject In searcher.[Get]()
            ' get the hard drive from collection
            ' using index
            Dim hd As HardDrive = DirectCast(hdCollection(i), HardDrive)

            ' get the hardware serial no.
            If wmi_HD("SerialNumber") Is Nothing Then
                hd.SerialNo = "None"

            Else
                hd.SerialNo = wmi_HD("SerialNumber").ToString()
                Serial = hd.SerialNo
            End If

            i += 1
        Next

        lblMarca.Text = HardDisk.ToString
        lblTipo.Text = Tipo.ToString
        lblSerie.Text = Serial

     End Sub
End Class

Então esse código se eu tiver mais de 1 hd ele pega todos, eu quero que pegue apenas o principal, não consegui manipular esse select que tem no código para varrer os driver! Acredito que da para melhorar esse código para ele pegar só o hd que eu quero mas não consegui ainda, estou lendo alguns tutoriais para entender melhor, acredito também que da para diminuir esse código.

Se alguém puder me da esse força aí. Valeu

Link para o comentário
Compartilhar em outros sites

  • 0
Esses dias vi um software feito em vb.net que o programa captura o número de série do hd e da placa de rede

Se quiser pegar o endereço físico (MAC) da(s) placa(s) de rede, basta fazer:

Imports System.Net.NetworkInformation

...

Dim placas() As NetworkInterface = NetworkInterface.GetAllNetworkInterfaces()

For Each placa As NetworkInterface In placas
    Debug.Print(placa.GetPhysicalAddress().ToString())
Next

Certo? ;)

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

E ae beleza

Value pela força cara

E como eu faço para pegar apenas o serial do disco principal? Sem varrer todos? Eu fiz uma gambi que resolveu mas não é o modo certo, eu fiz isso:

Dim HardDisk, Tipo, Serial As String
        Dim searcher As New ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive")
        Dim hdCollection As New ArrayList()
        Dim a As Integer = 0
        For Each wmi_HD As ManagementObject In searcher.[Get]()
            Dim hd As New HardDrive()

            hd.Model = wmi_HD("Model").ToString()
            If a = 0 Then
                HardDisk = hd.Model
            End If
            hd.Type = wmi_HD("InterfaceType").ToString()
            If a = 0 Then
                Tipo = hd.Type
            End If
            hdCollection.Add(hd)



            a += 1
        Next

        searcher = New ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia")

        Dim i As Integer = 0
        For Each wmi_HD As ManagementObject In searcher.[Get]()
            ' get the hard drive from collection
            ' using index
            Dim hd As HardDrive = DirectCast(hdCollection(i), HardDrive)

            ' get the hardware serial no.
            If wmi_HD("SerialNumber") Is Nothing Then
                If i = 0 Then
                    hd.SerialNo = "None"
                End If
            Else
                hd.SerialNo = wmi_HD("SerialNumber").ToString()
                If i = 0 Then
                    Serial = hd.SerialNo
                End If
            End If



            i += 1
        Next

        lblMarca.Text = HardDisk.ToString
        lblTipo.Text = Tipo.ToString
        lblSerie.Text = Serial

Ou seja mandei preencher a variável quando o contador estiver no 0, mas deve ter uma forma de pegar só o disco principal se você souber me da um toque

Valeu pela força

Link para o comentário
Compartilhar em outros sites

  • 0

E ae pessoal beleza

Então esse código que eu fiz acima captura uma númeração do hd que acredito que é o serian mac, porém vi um programa esses dias que capturou o serial number do disco mesmo! por exempo o serial do meu hd que o código que eu fiz esta pegando é esse: 3000df78dd4545444dsd4105462166a54~

Mas o serial number do hd é SOJRJ56P716563 o programa que eu vi mostra extamente esse serial number e é o que eu gostaria de pegar também! Alguém sabe como fazer isso?

valeu

Link para o comentário
Compartilhar em outros sites

  • 0

E ae beleza

É realmente não esta fácil já procurei igual louco por isso e não achei nada o pior é que o programa que vi fazendo isso esta instalado na minha máquina e ele foi feito com .net 2.0, ele pega o serial number do hd para validar a instalação oem dele. Vou continuar pesquisando e pesso que se alguém encontrar alguma coisa posta aqui por favor.

Valeu

Link para o comentário
Compartilhar em outros sites

  • 0

E ae pessoal beleza

Depois de muita pesquisa e principalmente ajuda, consegui achar a solução.

Com o código que postei acima eu já tinha chegado no resultado só não sabia disso, foi um colega dos fóruns chamado Marcio que me explicou que eu já estava no resultado só que ele precisa ser convertido para hexa então outro amigo chamado Laercio me explicou como converter então cheguei no resultado final.

O serial capturado seria é esse: 3053524a354a5036313735363336202020202020

após a converção em hexa chega o valor real que é : SOJRJ56P716563

vou postar o código e quem precisar esta aí:

Esses são os eventos e funções que estão dentro do meu form:

Imports System.Management
Imports System.Net.NetworkInformation

Public Class lblRede

    Private Sub btnSerie_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSerie.Click

        ''captura a marca do hd
        Dim HardDisk As String
        Dim searcher As New ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive")
        Dim hdCollection As New ArrayList()
        Dim a As Integer = 0
        For Each wmi_HD As ManagementObject In searcher.[Get]()
            Dim hd As New HardDrive()

            hd.Model = wmi_HD("Model").ToString()
            If a = 0 Then
                HardDisk = hd.Model
            End If
            hdCollection.Add(hd)



            a += 1
        Next

       
        lblMarca.Text = HardDisk.ToString


        ''captura a série do hd
        Dim searcher2 As New ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive")
        Dim hdCollection2 As New ArrayList()
        Dim Serial As String = ""
        Dim Serial2 As String = ""

        For Each wmi_HD As ManagementObject In searcher2.[Get]()


            Dim hd As New HardDrive()

            hd.Model = wmi_HD("Model").ToString()

            hd.Type = wmi_HD("InterfaceType").ToString()


            hdCollection2.Add(hd)
        Next


        searcher2 = New ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia")

        Dim i As Integer = 0

        For Each wmi_HD As ManagementObject In searcher2.[Get]()

            Dim hd As HardDrive = DirectCast(hdCollection2(i), HardDrive)



            'Pegando o Serial

            If wmi_HD("SerialNumber") Is Nothing Then
                hd.SerialNo = "None"
                Serial = "Não consta"
                Serial2 = "Não consta"
            Else
                hd.SerialNo = wmi_HD("SerialNumber").ToString()
                Serial = wmi_HD("SerialNumber").ToString()
                Serial2 = wmi_HD("SerialNumber").ToString()

            End If


            i += 1
        Next


        lblSerie.Text = hex2ascii(Serial)
        Label7.Text = Serial2




        'captura a série da placa de rede
        Dim placas() As NetworkInterface = NetworkInterface.GetAllNetworkInterfaces()

        Dim b As Integer = 0
        For Each placa As NetworkInterface In placas
            'Debug.Print(placa.GetPhysicalAddress().ToString())
            If b = 0 Then
                lblSerieRede.Text = (placa.GetPhysicalAddress().ToString())
            End If
            b += 1
        Next



    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim classEmbaralhar As New Senha() '' instancia a class Senha
        classEmbaralhar.SenhaGerada() '' executa a métdo SenhaGerada

        'exibe a senha sugerida
        lblKey.Text = classEmbaralhar.SenhaFinal
    End Sub
   


    Public Function hex2ascii(ByVal hextext As String) As String

        Dim Value As String = ""

        Dim Num As String = ""



        For y As Integer = 1 To Len(hextext)

            num = Mid(hextext, y, 2)

            Value = Value & Chr(CInt(Val("&h" & Num)))

            y = y + 1

        Next y



        hex2ascii = Value

        hex2ascii = InverterString(Value)

    End Function


    Public Function InverterString(ByVal text As String) As String

        Dim Value As String = ""

        Dim Num1 As String = ""

        Dim Num2 As String = ""



        For y As Integer = 1 To Len(text) Step 2

            Num1 = Mid(text, y, 1)

            Num2 = Mid(text, y + 1, 1)

            Value = Value & Num2 & Num1

        Next y



        InverterString = Value

    End Function



End Class
Essa é a class:
Class HardDrive
    Private m_model As String = Nothing
    Private m_type As String = Nothing
    Private m_serialNo As String = Nothing
    Public Property Model() As String
        Get
            Return m_model
        End Get
        Set(ByVal value As String)
            m_model = value
        End Set
    End Property
    Public Property Type() As String
        Get
            Return m_type
        End Get
        Set(ByVal value As String)
            m_type = value
        End Set
    End Property
    Public Property SerialNo() As String
        Get
            Return m_serialNo
        End Get
        Set(ByVal value As String)
            m_serialNo = value
        End Set
    End Property
End Class

Valeu a todos que me ajudaram

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...