Protecao de software com pen-drive

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

angeiras
Usuário Nível 3
Usuário Nível 3
Mensagens: 134
Registrado em: 21 Nov 2005 20:53
Localização: Olinda/PE

Protecao de software com pen-drive

Mensagem por angeiras »

Olá,

O código original está no forum internacional do Fivewin e foi criado pelo Antonio linares.

O objetivo é ler o número serial da pen-drive, que é único ( mesmo formatando ) e utilizar como esquema de proteção de software.

Achei muito interessante por dois motivos :

1) Protege o software contra pirataria. NÃO É PERFEITO, mas até mesmo produtos comerciais como o HASP e o PROTEQ já foram hackeados.

2) Serve também como armazenamento para backup dos dados.

A adaptação para xHarbour puro é muito simples, bastando alterar a criação dos objetos. O resto é a mesma coisa.

O Código :

Código: Selecionar todos

***************
FUNCTION MAIN()
***************
  Alert( "Numero serial da pen-drive : " + GetUSBSerial( "Z:" ) )
RETURN NIL

*******************************
FUNCTION GetUSBSerial( cDrive )
*******************************
   local cDiskNum := "", cPnPDeviceID := "", cTmp, oDiskDrive, oLogicalDrive

   local oWMIObjA, oWMIServerA, oWMIDiskDrive, oWMIObjA2, oWMIServerA2,;
         oWMILogicalDisk

   try
      oWMIObjA := GetActiveObject( "wbemScripting.SwbemLocator" )
   catch
      try
         oWMIObjA := CreateObject( "wbemScripting.SwbemLocator" )
      catch
         Alert( "ERRO ! Nao criou objeto wbemScripting")
         return
      end
   end
   oWMIServerA   := oWMIObjA:ConnectServer()
   oWMIDiskDrive := oWMIServerA:ExecQuery( "SELECT * FROM Win32_DiskDrive" )

   try
      oWMIObjA2 := GetActiveObject( "wbemScripting.SwbemLocator" )
   catch
      try
         oWMIObjA2 := CreateObject( "wbemScripting.SwbemLocator" )
      catch
         Alert( "ERRO ! Nao criou objeto wbemScripting")
         return
      end
   end
   oWMIServerA2    := oWMIObjA2:ConnectServer()
   oWMILogicalDisk := oWMIServerA2:ExecQuery( "SELECT * FROM Win32_LogicalDiskToPartition" )

   for each oLogicalDrive in oWMILogicalDisk
      if substr(oLogicalDrive:Dependent, at('"',oLogicalDrive:Dependent )+1,2 ) == cDrive
         cDiskNum := substr(oLogicalDrive:Antecedent, at('#',oLogicalDrive:Antecedent )+1,1 )
      endif
   next

   for each oDiskDrive in oWMIDiskDrive
      if oDiskDrive:Name == "\\.\PHYSICALDRIVE" + cDiskNum .and. oDiskDrive:InterfaceType == "USB"
         cTmp         := substr( oDiskDrive:PnPDeviceID, 1, rat( "&", oDiskDrive:PnPDeviceID ) - 1 )
         cPnPDeviceID := substr( cTmp, rat( "&", cTmp ) + 1 )
      endif
   next
RETURN cPnPDeviceID
O Z:, é a letra que indiquei para meus pen-drives.

Testei com todos os meus pen-drives, em windows XP e funcionou. Alguém mais disposto a testar ?

[]s
Manoel Angeiras
Clipper 5.2e + sixcdx + catools + nanfor
xHarbour 1.0.0 + gtwvw / xHarbour 1.2.1 + Fivewin
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Angerias, muito boa essa função...amanha vou testar para ver como funciona certinho ...depois volto com os resultados.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Mensagem por asimoes »

Angeiras,

Testei e funciona blz.

[]´s
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Tche, fungo tudo blz em NT, agora tem PEN-DRIVER que não esta mais compativel com win95/98/98se/me por exemplo KINGSTON, ai se tornaria um pouco complicado usar essa função, mas tmb. com o o win98 já esta cada vez sendo menos usado, pelomenos isso é uma realidade entre meus clientes....quem sabe amanha depois...Obrigado por Compartilhar essa solução com nós !!!!
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Mensagem por asimoes »

Angeiras,

No 2000 Professional não funcionou.

[]´s
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
angeiras
Usuário Nível 3
Usuário Nível 3
Mensagens: 134
Registrado em: 21 Nov 2005 20:53
Localização: Olinda/PE

Mensagem por angeiras »

Olá,

Segundo o link

http://msdn2.microsoft.com/en-us/libra ... .85).aspx

O WMI vem pré-instalado nos SO Windows ME, 2000, XP, 2003 e Vista. Para as outras versões, precisa ser instalado o WMI Redistributable Components.

Dá uma lida do link para uma explicação mais completa.

[]s
Manoel Angeiras
Clipper 5.2e + sixcdx + catools + nanfor
xHarbour 1.0.0 + gtwvw / xHarbour 1.2.1 + Fivewin
Responder