Protección anticopia
- Manuel Aranda
- Posts: 605
- Joined: Wed Oct 19, 2005 8:20 pm
- Location: España
Protección anticopia
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?
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
Manuel
xH 1.2.3, FWH 23.07 32 bits, BC++ 7.4, xVerce CW 1.0, PellesC
- Antonio Linares
- Site Admin
- Posts: 42513
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 31 times
- Been thanked: 73 times
- Contact:
Re: Protección anticopia
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
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
Saludos
méxico.sureste
-
- Posts: 325
- Joined: Sun Feb 03, 2008 11:04 pm
- Location: Argetnina
- Antonio Linares
- Site Admin
- Posts: 42513
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 31 times
- Been thanked: 73 times
- Contact:
- Manuel Aranda
- Posts: 605
- Joined: Wed Oct 19, 2005 8:20 pm
- Location: España
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?
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
Manuel
xH 1.2.3, FWH 23.07 32 bits, BC++ 7.4, xVerce CW 1.0, PellesC
- Antonio Linares
- Site Admin
- Posts: 42513
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 31 times
- Been thanked: 73 times
- Contact:
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.
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.
- Manuel Aranda
- Posts: 605
- Joined: Wed Oct 19, 2005 8:20 pm
- Location: España
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?
¿No es curioso?
Un saludo,
Manuel
xH 1.2.3, FWH 23.07 32 bits, BC++ 7.4, xVerce CW 1.0, PellesC
Manuel
xH 1.2.3, FWH 23.07 32 bits, BC++ 7.4, xVerce CW 1.0, PellesC
- Antonio Linares
- Site Admin
- Posts: 42513
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 31 times
- Been thanked: 73 times
- Contact:
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:
Como ves, nos limitamos a llamar a la función del API de Windows y recoger sus resultados.
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
#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.
- Manuel Aranda
- Posts: 605
- Joined: Wed Oct 19, 2005 8:20 pm
- Location: España
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.
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
Manuel
xH 1.2.3, FWH 23.07 32 bits, BC++ 7.4, xVerce CW 1.0, PellesC
- Antonio Linares
- Site Admin
- Posts: 42513
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 31 times
- Been thanked: 73 times
- Contact: