FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Protecci贸n anticopia
Posts: 610
Joined: Wed Oct 19, 2005 08:20 PM
Protecci贸n anticopia
Posted: Thu Nov 20, 2008 07:15 PM

Aparte de nSerialHD() 驴Existe alguna otra funci贸n para identificar un equipo, como por ejemplo el n煤mero de BIOS, si es que este n煤mero existe? Hasta ahora he estado utilizando nSerialHD() pero hoy me han demostrado lo sorprendentemente f谩cil que es piratar un programa basado en esta protecci贸n.

Tambi茅n he probado msginfo(GetNetCardId())
y me da el error siguiente: Error: Unresolved external 'GetAdaptersInfo' referenced from C:\FWH\LIB\FIVEHC.LIB|NETCRDID. Aunque esto pudiera ser por la versi贸n FWH que uso (la 2.8, bastante antiguilla). Aunque, si el ordenador no tiene tarjeta de red 驴de que nos sirve?

Un saludo,

Manuel



xH 1.2.3, FWH 23.07 32 bits, BC++ 7.4, xVerce CW 1.0, PellesC
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Protecci贸n anticopia
Posted: Thu Nov 20, 2008 07:18 PM

Manuel,

Tienes que enlazar bcc55\lib\PSDK\iphlpapi.lib para usar GetNetCardId()

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1076
Joined: Fri Oct 07, 2005 10:41 PM
Re: Protecci贸n anticopia
Posted: Thu Nov 20, 2008 09:38 PM

Manuel Aranda,

en:

http://codigo-base.blogspot.com

he colgado unas lib para checar bios, tarjeta principal, disco duro, etc.

espero sea lo que buscas

William, Morales

Saludos



m茅xico.sureste
Posts: 325
Joined: Sun Feb 03, 2008 11:04 PM
Protecci贸n anticopia
Posted: Fri Nov 21, 2008 08:22 AM

UNa consulta

y si el sistema est谩 instalado en una red/servidor estos controles los realiza del servidor o de la m谩quina donde se est谩 corriendo el programa?

david

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Protecci贸n anticopia
Posted: Fri Nov 21, 2008 08:49 AM

David,

Hay forma de solicitar el identificador de la tarjeta de red, de un ordenador que est茅 conectado a la red.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 610
Joined: Wed Oct 19, 2005 08:20 PM
Protecci贸n anticopia
Posted: Fri Nov 21, 2008 07:28 PM

Gracias Antonio y Wiliam.

Unas preguntas m谩s :

Ante la curiosidad de si GetNetCardId() proporciona siempre el mismo formato he probado en tres ordenadores diferentes y me ha dado un serial con el mismo formato en los tres: 00-1A-92-B4-88-C5
驴Esto siempre es as铆?

Otra pregunta que me he hecho ha sido si un ordenador no tiene tarjeta de red, GetNetCardId() 驴qu茅 serial dar铆a? 驴ser铆a cero? 驴dar铆a error? Por lo que he abierto la m谩quina y le he quitado la tarjeta de red. Sorprendente: me da el mismo serial que si la tiene pinchada.
Tambi茅n he extraido el modem, por si acaso, y tambi茅n da el mismo serial. Entonces 驴 que informaci贸n me est谩 proporcionando GetNetCardId() ? 驴Acaso el serial de la placa base?

Un saludo,

Manuel



xH 1.2.3, FWH 23.07 32 bits, BC++ 7.4, xVerce CW 1.0, PellesC
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Protecci贸n anticopia
Posted: Fri Nov 21, 2008 10:44 PM

Manuel,

Tienes que comprobar el tipo de valor que devuelve GetNetCardId().

Si es de tipo array, entonces es que hay mas de un adaptador de red.

Si solo hay un adaptador entonces debe devolver un valor tipo cadena.

Si no hay adaptador de red, la verdad es que no se que devolvera el API de Windows. A ver si localizamos un equipo aqui sin red (ya que las placas actuales lo incorporan por defecto) y lo probamos.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 610
Joined: Wed Oct 19, 2005 08:20 PM
Protecci贸n anticopia
Posted: Sat Nov 22, 2008 09:56 AM

Pues ya te digo, Antonio, he sacado la tarjeta de red de uno de los ordenador (un pentium mmx con 8 o 9 a帽os de antiguedad) y tanto con tarjeta de red como sin ella el resultado es el mismo : 44-45-53-54-00-00
驴No es curioso?

Un saludo,

Manuel



xH 1.2.3, FWH 23.07 32 bits, BC++ 7.4, xVerce CW 1.0, PellesC
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Protecci贸n anticopia
Posted: Sat Nov 22, 2008 10:10 AM
Manuel,

Esta es la funci贸n del API de Windows que usamos en GetNetCardID():

http://msdn.microsoft.com/en-us/library/aa365917(VS.85).aspx

Y este es el c贸digo fuente:
#include <WinTen.h>
#include <Windows.h>
#include <hbapiitm.h>
#include <iphlpapi.h>

static PIP_ADAPTER_INFO pAdapterInfo = NULL; // Contains pointer to
                                             // current adapter info

static char * GetMACaddress( void )
{
  IP_ADAPTER_INFO AdapterInfo[ 16 ];       // Allocate information
                                           // for up to 16 NICs
  DWORD dwBufLen = sizeof( AdapterInfo );  // Save memory size of buffer

  DWORD dwStatus = GetAdaptersInfo(      // Call GetAdapterInfo
            AdapterInfo,                 // [out] buffer to receive data
            &dwBufLen);                  // [in] size of receive data buffer

  static char szText[ 18 ];
  PHB_ITEM pText = hb_itemNew( NULL );

  pAdapterInfo = AdapterInfo;

  do 
  {
     wsprintf( szText, "%02X-%02X-%02X-%02X-%02X-%02X",
               ( unsigned char * ) pAdapterInfo->Address[ 0 ],
               ( unsigned char * ) pAdapterInfo->Address[ 1 ],
               ( unsigned char * ) pAdapterInfo->Address[ 2 ],
               ( unsigned char * ) pAdapterInfo->Address[ 3 ],
               ( unsigned char * ) pAdapterInfo->Address[ 4 ],
               ( unsigned char * ) pAdapterInfo->Address[ 5 ] );
      
     hb_itemPutCL( pText, szText, strlen( szText ) );
     hb_arrayAdd( hb_param( -1, HB_IT_ANY ), pText );          
     pAdapterInfo = pAdapterInfo->Next;    // Progress through
                                           // linked list
  } while( pAdapterInfo );                 // Terminate if last adapter
}

HB_FUNC( GETNETCARDID) // --> nMac netcard ID number
{
   hb_reta( 0 );
   GetMACaddress();
   
   if( hb_arrayLen( hb_param( -1, HB_IT_ANY ) ) == 1 )
      hb_retc( hb_parc( -1, 1 ) );
}

Como ves, nos limitamos a llamar a la funci贸n del API de Windows y recoger sus resultados.
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 610
Joined: Wed Oct 19, 2005 08:20 PM
Protecci贸n anticopia
Posted: Sat Nov 22, 2008 11:07 AM

Bueno, una 煤ltima rese帽a con otro dato curioso:
El dato entre par茅ntesis es el valor que devuelve GetNetCardId()

He cogido la tarjeta de red del viejo ordenador (44-45-53-54-00-00) y la he pinchado en un ordenador nuevo con tarjeta de red integrada (00-1A-92-B4-88-C7). Ahora ya tengo dos tarjetas de red en el mismo ordenador y el valor que me devuelve GetNetCardId() es 00-02-44-A7-BA-A8, distinto a los dos anteriores.
Tengo que decir que uso la versi贸n 2.8 de FWH, y creo recordar que esta funci贸n ha tenido alguna variaci贸n con posterioridad.

De cualquier manera, y a lo que iba desde un principio, tanto si la m谩quina tiene tarjeta de red, como si no tiene, o tiene dos tarjetas me devuelve un serial con el mismo formato, que es lo que necesito para generar un n煤mero 煤nico e identificar esa m谩quina al objeto de controlar las copias no autorizadas del programa.

Antonio, mi 煤ltima pregunta es, GetNetCardId() en versiones posteriores a la 2.8 de FWH 驴tiene un comportamiento distinto? Lo digo porque pronto va tocando actualizar la versi贸n que tengo de FWH y quiero asegurarme de no tener problemas futuros si al final decido utilizar esta form煤la de protecci贸n.

Un saludo,

Manuel



xH 1.2.3, FWH 23.07 32 bits, BC++ 7.4, xVerce CW 1.0, PellesC
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Protecci贸n anticopia
Posted: Sat Nov 22, 2008 03:58 PM

Manuel,

Si tienes mas de una tarjeta, la funcion deberia devolverte un array.

De no ser asi quiere decir que estas usando una version antigua de esta funcion que puede estar mal.

regards, saludos

Antonio Linares
www.fivetechsoft.com

Continue the discussion