Protección anticopia

Protección anticopia

Postby Manuel Aranda » Thu Nov 20, 2008 7: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
User avatar
Manuel Aranda
 
Posts: 604
Joined: Wed Oct 19, 2005 8:20 pm
Location: España

Postby Antonio Linares » Thu Nov 20, 2008 7:18 pm

Manuel,

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

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42127
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Protección anticopia

Postby wmormar » Thu Nov 20, 2008 9: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
User avatar
wmormar
 
Posts: 1074
Joined: Fri Oct 07, 2005 10:41 pm
Location: México

Postby dobfivewin » Fri Nov 21, 2008 8: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
dobfivewin
 
Posts: 325
Joined: Sun Feb 03, 2008 11:04 pm
Location: Argetnina

Postby Antonio Linares » Fri Nov 21, 2008 8: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
User avatar
Antonio Linares
Site Admin
 
Posts: 42127
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Manuel Aranda » Fri Nov 21, 2008 7: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
User avatar
Manuel Aranda
 
Posts: 604
Joined: Wed Oct 19, 2005 8:20 pm
Location: España

Postby Antonio Linares » 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
User avatar
Antonio Linares
Site Admin
 
Posts: 42127
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Manuel Aranda » Sat Nov 22, 2008 9: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
User avatar
Manuel Aranda
 
Posts: 604
Joined: Wed Oct 19, 2005 8:20 pm
Location: España

Postby Antonio Linares » 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:
Code: Select all  Expand view  RUN
#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
User avatar
Antonio Linares
Site Admin
 
Posts: 42127
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Manuel Aranda » 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
User avatar
Manuel Aranda
 
Posts: 604
Joined: Wed Oct 19, 2005 8:20 pm
Location: España

Postby Antonio Linares » Sat Nov 22, 2008 3: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
User avatar
Antonio Linares
Site Admin
 
Posts: 42127
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot], JoséQuintas and 31 guests