Protecao de software com pen-drive
Enviado: 24 Dez 2007 12:26
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 :
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
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
Testei com todos os meus pen-drives, em windows XP e funcionou. Alguém mais disposto a testar ?
[]s
Manoel Angeiras