protection EXE file

Postby betoncu » Sun Oct 01, 2006 8:54 am

I always use the function GetNetCardID(), which gives Mac address of the ethernet card to protec my EXE

Code: Select all  Expand view  RUN
if GetNetCardID() <> 'XXXXXXX'
   MsgInfo('This Computer is not licensed')
endif
User avatar
betoncu
 
Posts: 126
Joined: Sat Oct 08, 2005 9:38 pm
Location: Cyprus (North)

Postby RAMESHBABU » Sun Oct 01, 2006 9:10 am

Hi betoncu

if GetNetCardID() <> 'XXXXXXX'
MsgInfo('This Computer is not licensed')
endif


This is useful only when the user has an eithernet card in his P.C
and to control multi-user applications. It may not be useful for stand
alone applications.

If the user has several eithernet cards in his P.C ?
or
If he keep changing his eithernet cards frequently ?


Regards to you

- Ramesh Babu P
User avatar
RAMESHBABU
 
Posts: 625
Joined: Fri Oct 21, 2005 5:54 am
Location: Secunderabad (T.S), India

Postby betoncu » Sun Oct 01, 2006 3:50 pm

Dear Ramesh,

Nowadays each computer has an ethernet card embedded on the main board.

If your customer changes the main board he will need another exe from you. But don't forget that he can change the harddisk also.

If there are two ethernet cards?
May be you are right here. I haven't check this function on a computer which has two ethernet cards. So I don't know.

Regards,
Birol Betoncu
User avatar
betoncu
 
Posts: 126
Joined: Sat Oct 08, 2005 9:38 pm
Location: Cyprus (North)

Postby Rochinha » Wed Oct 04, 2006 4:33 am

Amiguinhos

O modulo aqui apresentado permite colocar em seus sistemas uma forma profissional de registro de uso do sistema.

É composto por um código que deve ser colocado em sua aplicação para interagir com o modulo e finalmente um modulo a parte que serve para registrar a aplicação.

No que consiste?

A aplicação, ao abrir fará uma verificação do registro e se o mesmo ainda não estiver gravado no mesmo fará a chamada ao modulo de registro.

O modulo de registro permitira que o usuario rode a demonstração do aplicativo que tem um prazo prédefinido na variavel MAXDAYS e verificado pela função MAXTRIAL.

Caso o registro seja efetivado com exito toda informação de registro sera grafada, isto mesmo, grafada dentro do aplicativo, nada de uso de arquivos externos.

A rotina funcionou muito bem com BLinker sem compressão e Harbour.

O modulo de registro é composto por um .RC que contem a definição da DIALOG de registro e um .PRG contendo o código.

Arquivo REGISTRO.RC

Code: Select all  Expand view  RUN
registro DIALOG 77, 49, 211, 175
STYLE 0x4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX
CAPTION "Acesso ao sistema"
FONT 8, "MS Sans Serif"
{
EDITTEXT 103, 98, 130, 102, 12, ES_UPPERCASE | WS_BORDER | WS_TABSTOP
PUSHBUTTON "C&onfirma", 201, 5, 157, 64, 14
PUSHBUTTON "&Cancela", 203, 76, 157, 62, 14
PUSHBUTTON "Demonstração", 204, 145, 157, 62, 14
EDITTEXT 101, 98, 113, 102, 12, ES_UPPERCASE | ES_READONLY | WS_BORDER | WS_TABSTOP
LTEXT "", 98, 311, 21, 98, 148, NOT WS_GROUP
ICON "icon_Chaves", -1, 8, 9, 21, 20
LTEXT "Este aplicativo está em MODO DEMONSTRAÇÃO.", 90, 35, 9, 170, 18
GROUPBOX "", -1, 5, 101, 202, 50, BS_GROUPBOX
CONTROL "", 97, "static", SS_BLACKRECT | WS_CHILD | WS_VISIBLE, 219, 3, 202, 66
LTEXT "Número de Série:", 95, 12, 115, 60, 8
LTEXT "Código de Liberação:", 96, 12, 131, 72, 8
LTEXT "Para avaliar a Versão de Demonstração clique no botão Demonstração.", 91, 35, 27, 170, 18
LTEXT "Registre o programa e receba o Código de Liberação para utilizar o produto completo.", 92, 35, 55, 170, 18
LTEXT "Entre em contato com o suporte através do telefone (11) 3903-4461", 93, 35, 84, 170, 18
}

icon_Chaves ICON
{
'00 00 01 00 01 00 20 20 10 00 00 00 00 00 E8 02'
'00 00 16 00 00 00 28 00 00 00 20 00 00 00 40 00'
'00 00 01 00 04 00 00 00 00 00 80 02 00 00 00 00'
'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
'00 00 00 00 80 00 00 80 00 00 00 80 80 00 80 00'
'00 00 80 00 80 00 80 80 00 00 80 80 80 00 C0 C0'
'C0 00 00 00 FF 00 00 FF 00 00 00 FF FF 00 FF 00'
'00 00 FF 00 FF 00 FF FF 00 00 FF FF FF 00 00 00'
'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
'00 00 00 00 08 80 00 00 00 00 00 00 00 00 00 00'
'00 00 00 00 F8 78 00 00 00 00 00 00 00 00 00 00'
'00 08 80 07 08 78 00 00 00 00 00 00 00 00 00 00'
'07 78 88 00 78 78 00 00 00 00 00 00 00 00 00 00'
'07 F8 78 7F 88 78 00 00 00 00 00 00 70 00 00 00'
'07 F8 78 07 F8 78 00 00 00 00 00 07 B3 30 00 00'
'00 08 78 0F 08 78 00 00 00 00 07 00 BB 70 00 00'
'00 78 78 00 78 78 00 00 00 00 73 3B B7 00 00 00'
'7F 88 78 7F 88 78 00 00 00 00 7B BB 70 30 00 00'
'07 F8 78 7F 88 78 00 00 00 70 0B B7 03 00 00 00'
'00 08 78 07 F8 78 00 00 07 33 BB 70 30 00 00 00'
'00 78 78 07 F8 77 00 00 7B BB B7 03 00 00 00 00'
'7F 88 78 7F 88 F7 00 00 7B BB 70 30 00 00 00 00'
'7F 88 77 F8 8F 88 70 00 BB B7 03 00 00 00 00 00'
'07 F8 7F 88 F0 00 00 0B BB 70 30 00 00 00 00 00'
'07 F7 F8 80 07 77 77 7B B7 03 00 00 00 00 00 00'
'7F 7F 88 07 7B BB BB BB 70 30 00 00 00 00 00 07'
'F8 7F 80 7B BB BB BB B8 B3 00 00 00 00 00 00 7F'
'88 7F 80 BB BB 8B 8B 8B 83 00 00 00 00 00 07 F8'
'8F 7F 0B BB B0 B0 B8 B8 B3 00 00 00 00 00 7F 88'
'F8 7F 7B BB BB 0B 0B 8B 83 00 00 00 00 00 7F 88'
'8F 87 7B BB BB B0 B0 B8 B3 00 00 00 00 00 7F 88'
'F8 00 7B BB 77 0B 0B 0B 83 00 00 00 00 00 7F 88'
'80 7F 7B B0 F8 80 B0 B8 30 00 00 00 00 00 7F 88'
'F0 78 7B B0 0F 80 BB B8 30 00 00 00 00 00 07 F8'
'80 77 07 B0 07 F0 BB 83 00 00 00 00 00 00 00 7F'
'88 00 08 77 00 0B B3 30 00 00 00 00 00 00 00 07'
'FF F0 78 70 88 88 30 00 00 00 00 00 00 00 00 00'
'77 70 77 70 77 77 00 00 00 00 00 00 00 00 00 00'
'00 00 70 00 70 00 00 00 00 00 00 00 00 00 00 00'
'00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF F9'
'FF FF FF F0 FF FF FE 60 7F FF FC 00 7F FF F8 00'
'7F FF F8 00 7F F1 F8 00 7F E0 FC 00 7F 80 F8 00'
'7F 00 F0 00 7F 00 F8 00 7C 01 FC 00 78 03 F8 00'
'70 07 F0 00 70 0F F0 00 20 1F F8 00 00 3F F8 00'
'00 7F F0 00 00 FF E0 00 01 FF C0 00 01 FF 80 00'
'01 FF 00 00 01 FF 00 00 01 FF 00 00 01 FF 00 00'
'03 FF 00 00 03 FF 80 00 07 FF C0 00 0F FF E0 00'
'1F FF F0 10 7F FF FE 73 FF FF FF 07 FF FF'
}


Codigo REGISTRO.PRG

Code: Select all  Expand view  RUN
/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *
* Procedure_: REGISTRO.PRG                                       
* Autor_____: Jose Carlos da Rocha - Konectiva Automacao       
* Cria‡„o___: 13 de Dezembro de 2005                           
* Objetivo__: Pedir codigo de registro para habilitar aplicacao totalmente
* Rotina____: Executavel stand-alone chamado pelo aplicativo principal
* Direitos__: Qualquer alteração neste código pode ser feita deste que
*             seja mantida a autoria principal.
* Alterado__: ___/___/____
* por_______: ___________________________________________
* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
#include "FiveWin.ch"

//----------------------------------------------------------------------------//
function Main()
   local oDlg, oGet, oText1, oText2
   local nSerie    := substr(HDSERIAL(),1,8)
   local nLiberacao:= space(8)
   SET _3DLOOK ON
   DEFINE DIALOG oDlg NAME "registro" COLOR RGB(000,000,000),RGB(255,255,255)
   REDEFINE SAY ID 90 OF oDlg COLOR RGB(000,000,000),RGB(255,255,255)
   REDEFINE SAY ID 91 OF oDlg COLOR RGB(000,000,000),RGB(255,255,255)
   REDEFINE SAY ID 92 OF oDlg COLOR RGB(000,000,000),RGB(255,255,255)
   REDEFINE SAY ID 93 OF oDlg COLOR RGB(000,000,000),RGB(255,255,255)
   REDEFINE SAY ID 95 OF oDlg COLOR RGB(000,000,000),RGB(255,255,255)
   REDEFINE SAY ID 96 OF oDlg COLOR RGB(000,000,000),RGB(255,255,255)
   // Altere os comandos WinExec para chamarem o seu aplicativo principal
   REDEFINE BUTTON oBtn201 ID 201 OF oDlg ACTION ( PROTECT3(), WinExec( "NFWH.EXE" ), oDlg:End() )
   REDEFINE BUTTON         ID 203 OF oDlg ACTION oDlg:End()
   REDEFINE BUTTON         ID 204 OF oDlg ACTION ( WinExec( "NFWH.EXE demo" ), oDlg:End())
   //
   REDEFINE GET oText1 VAR nSerie     ID 101 PICTURE "@!" OF oDlg COLOR RGB(255,255,255),RGB(000,000,255) NO MODIFY
   REDEFINE GET oText2 VAR nLiberacao ID 103 PICTURE "@!" OF oDlg VALID lOkPassword(nLiberacao,nSerie,oBtn201)
   ACTIVATE DIALOG oDlg CENTERED ON INIT (oBtn201:Disable(),oText2:SetFocus())
   return nil

FUNCTION PROTECT3()
   PRIVATE ARQ, BUFFERS, RET, PALAVRA, P, T, ARQUIVO1
   SET CENTURY OFF
   REGISTRO := "HDHDHDHDRBRBRBRB99999999YYYYYYYYYYYY"
   HDSERIAL := SUBSTR(HDSERIAL(),1,8)                // Serial do HD
   MAXDAYS  := "30"                                  // Tempo maximo de DIAS de uso
   ROMBIOS  := "RBRBRB"                              // CheckSum da RomBios
   MAXUSERS := "05"                                  // Maximo de usuarios por sessao
   MAXTRIAL := SUBSTR(STRTRAN(DTOC(MAXTRIAL(MAXDAYS)),'/',''),1,6) // Tempo maximo de uso
   ARQUIVO1 := "NFWH.EXE"                            // Nome do aplicativo
   PALAVRA  := "KONECTIVA"                           // String a ser protegida ate 10 caracteres
   PROTEGER := HDSERIAL+MAXDAYS+ROMBIOS+MAXUSERS+MAXTRIAL    // Dados para serem armazenados
   IF REPL("HD",4) $ REGISTRO
      //MSGRUN( "Protegendo..." )
      ARQ := FOPEN(ARQUIVO1,2)
      IF FERROR() # 0
         MSGRUN(  "Erro na abertura do arquivo "+ARQUIVO1 )
         QUIT
      ENDIF
      T = FSEEK(ARQ,0,2)
      FSEEK(ARQ,0,0)
      BUFFER := SPACE(512)
      BUFFE0 := PROTEGER+SPACE(512-LEN(PROTEGER))
      P      := 0
      FOR A = 1 TO 512
          P := P + ASC(SUBS(SUBSTR(ROMBIOS+SPACE(12),1,12),A,1)) + A
      NEXT
      PALAVRA := ALLTRIM(PALAVRA)
      PS     := ACHOU(PALAVRA)
      IF PS = 0
         //MSGRUN( "String nao encontrada em "+ARQUIVO1 )
         QUIT
      ENDIF
      BYTES1 := 0
      FOR A = 1 TO 512
          BYTES1 := BYTES1 + ASC(SUBS(BUFFE0,A,1)) + A
      NEXT
      IF ACHOU(REPL("HD",4)) = 0
         //MSGRUN(  "String de prote‡„o nao foi encontrada em "+ARQUIVO1 )
         RETURN 0
      ENDIF
      L = AT("HDHD",BUFFER)
      BUFFER1 := SUBS(PROTEGER+SPACE(24),1,24)+STRZERO(P,12)
      BUFFER  := STUFF(BUFFER,L,36,BUFFER1)
      FSEEK(ARQ,-512,1)
      FWRITE(ARQ,BUFFER)
      FCLOSE(ARQ)
      //MSGRUN( "Protegido... " )
      //@ 4,0 SAY "Verifica‡„o conferida"
      //INKEY(3)
   ELSE
      //MSGRUN( "Ambientando..." )
      ARQUIVO  := "NFWH.EXE"
      HDSERIAL := SUBS(REGISTRO, 1, 8)      // Serial do HD
      MAXDAYS  := VAL(SUBS(REGISTRO, 9, 2)) // Maximo de Dias
      ROMBIOS  := SUBS(REGISTRO,11, 6)      // STR(ROMCKSUM(),8)          // CheckSum da RomBios
      MAXUSERS := VAL(SUBS(REGISTRO,17, 2)) // Maximo de usuarios por sessao
      MAXTRIAL := CTOD(SUBS(REGISTRO,21, 2)+"/"+;
                       SUBS(REGISTRO,19, 2)+"/"+;
                       SUBS(REGISTRO,23, 2))
      DESLOCA  := VAL(SUBS(REGISTRO,25,12))
      //
      // -> Rotinas de verificacao de travas
      IF HDSERIAL() <> HDSERIAL        ; RETURN 1; ENDIF
      IF ROMBIOS(ROMBIOS) <> ROMBIOS   ; RETURN 2; ENDIF
      IF MAXUSERS(MAXUSERS) > MAXUSERS ; RETURN 3; ENDIF
      IF (MAXTRIAL() > MAXTRIAL+30) .OR. (MAXTRIAL > DATE()); RETURN 4; ENDIF
   ENDIF
   RETURN 0
FUNCTION HDSERIAL()
   RETURN ALLTRIM(STR(nSerialHD()))
FUNCTION MAXUSERS(MAXUSERS)
   RETURN 0
FUNCTION ROMBIOS(ROMBIOS)
   RETURN ROMBIOS
FUNCTION MAXTRIAL(MAXDAYS)
   RETURN date()+val(MAXDAYS)
FUNCTION ACHOU(PALAVRA)
   PRIVATE Q
   FSEEK(ARQ,0,0)
   FOR Q = 0 TO T STEP + 512
       FREAD(ARQ, @BUFFER, 512)
       IF AT(PALAVRA, BUFFER) # 0
          RETURN Q
       ENDIF
   NEXT
   RETURN 0
FUNCTION lOkPassword(nLiberacao,nSerie)
   if val(nLiberacao)+val(nSerie)=99999999
      oBtn201:Enable()
   else
      oBtn201:Disable()
   endif
   return .t.


A parte que vai dentro do aplicativo esta descrita abaixo:

function main(M_O_D_O) // Necessario receber este parametro
...
if M_O_D_O = NIL // Arqui o parametro sera criticado
PROTERRO := PROTECT3() // Funcao que verifica se o aplicativo foi registrado
IF PROTERRO > 0
IF PROTERRO = 1; PROTMENS := 'NAO REGISTRADO' ; WinExec( "REGISTRO.EXE" ); QUIT ; ENDIF
IF PROTERRO = 2; PROTMENS := 'ROMBIOS ERRADO' ; ENDIF
IF PROTERRO = 3; PROTMENS := 'MUITOS USUARIOS' ; ENDIF
IF PROTERRO = 4; PROTMENS := 'TEMPO ESTOURADO' ; ENDIF
CLEAR SCREEN
IF PROTERRO > 1
cMensa := OemToAnsi( "(****" + PROTMENS + "****)"+CRLF+CRLF+;
"Um erro grave ocorreu na inicializacao do sistema"+CRLF+;
"Favor entrar em contato com o:"+CRLF+;
"Suporte tecnico SuaEmpresa Ltda"+CRLF+;
" Telefones:"+CRLF+;
" Central: (0xx11) 9999-9999"+CRLF+;
" Email: suporte@suaempresa.com.br" )
MsgStop( cMensa )
QUIT
ENDIF
ENDIF
endif
...
Resto do codigo principal do aplicativo contendo Window, Menus, Buttons, etc
...
// Funcoes de critica do registro
FUNCTION PROTECT3()
PRIVATE ARQ, BUFFERS, RET, PALAVRA, P, T, ARQUIVO1
SET CENTURY OFF
REGISTRO := "HDHDHDHDRBRBRBRB99999999YYYYYYYYYYYY" // Nao altere este conteudo
HDSERIAL := SUBSTR(HDSERIAL(),1,8) // Serial do HD
MAXDAYS := "30" // Tempo maximo de DIAS de uso com no maximo 2 digitos
ROMBIOS := "RBRBRB" // CheckSum da RomBios, nunca modifique esta variavel
MAXUSERS := "05" // Maximo de usuarios por sessao
MAXTRIAL := SUBSTR(STRTRAN(DTOC(MAXTRIAL(MAXDAYS)),'/',''),1,6) // Tempo maximo de uso
// Altere estas 3 linhas com o nome de seu aplicativo principal
ARQUIVO1 := "NFWH.EXE" // Nome do aplicativo
PALAVRA := "KONECTIVA" // String a ser protegida
ARQUIVO := "NFWH.EXE"
//
PROTEGER := HDSERIAL+MAXDAYS+ROMBIOS+MAXUSERS+MAXTRIAL // Dados para serem armazenados
// Verifica a protecao
HDSERIAL := SUBS(REGISTRO, 1, 8) // Serial do HD
MAXDAYS := VAL(SUBS(REGISTRO, 9, 2)) // Maximo de Dias
ROMBIOS := SUBS(REGISTRO,11, 6) // STR(ROMCKSUM(),8) // CheckSum da RomBios
MAXUSERS := VAL(SUBS(REGISTRO,17, 2)) // Maximo de usuarios por sessao
MAXTRIAL := CTOD(SUBS(REGISTRO,21, 2)+"/"+;
SUBS(REGISTRO,19, 2)+"/"+;
SUBS(REGISTRO,23, 2))
DESLOCA := VAL(SUBS(REGISTRO,25,12))
//
// -> Rotinas de verificacao de travas
IF HDSERIAL() <> HDSERIAL ; RETURN 1; ENDIF
IF ROMBIOS(ROMBIOS) <> ROMBIOS ; RETURN 2; ENDIF
IF MAXUSERS(MAXUSERS) > MAXUSERS ; RETURN 3; ENDIF
IF DATE() > MAXTRIAL ; RETURN 4; ENDIF
RETURN 0
FUNCTION HDSERIAL()
RETURN ALLTRIM(STR(nSerialHD()))
FUNCTION MAXUSERS(MAXUSERS)
RETURN 0
FUNCTION ROMBIOS(ROMBIOS)
RETURN ROMBIOS
FUNCTION MAXTRIAL(MAXDAYS)
RETURN date()+val(MAXDAYS)
FUNCTION ACHOU(PALAVRA)
PRIVATE Q
FSEEK(ARQ,0,0)
FOR Q = 0 TO T STEP + 512
FREAD(ARQ, @BUFFER, 512)
IF AT(STRING, BUFFER) # 0
RETURN Q
ENDIF
NEXT
RETURN 0

Estas rotinas poderão ser usadas também em aplicativos DOS bastando modificar o codigo do REGISTRO.EXE retirando o que for referente ao FIVEWIN.

Uma vez gravada a informação de registro o aplicativo sera executado somente na maquina em que foi instalado. se por acaso for copiado ele não executara mais.

Portanto após compilar o aplicativo o mesmo já deve ser empacotado para entrega/instalação, pois se for executado não rodará na maquina do cliente.

As funções trabalham com o numero serial do hd em que foram instalados e portanto para saber qual o codigo de liberação para este exemplo basta calcular:

99999999 - Serial do Hd = Codigo de liberação

Ou seja:

99999999 - 3210-9876 = 67890123

Mas voces poderão criar qualquer tipo de geração de código de registro e contrasenha.

Se quizerem aprender sobre criptografia acessem este link aqui

@braços :?)
Last edited by Rochinha on Thu Oct 05, 2006 12:44 am, edited 1 time in total.
Rochinha
 
Posts: 310
Joined: Sun Jan 08, 2006 10:09 pm
Location: Brasil - Sao Paulo

Postby ssbbs » Wed Oct 04, 2006 4:00 pm

You can try this:
http://www4.zzz.com.tw/phpbb2/viewtopic.php?t=28

The sample can get more networks!! :D

Code: Select all  Expand view  RUN
#INCLUDE "FIVEWIN.CH"
Func    Test()
Local   aNet      := {},;
        nI        := 0

        msgInfo( "Test Begin..." )
        aNet := GetMacAddress()
        msgInfo( "Test OK" )
        If Len(aNet) > 0
           MsgInfo( "You have:["+Str( Len(aNet), 2, 0 )+"] Network Cards!" )
           For nI := 1 To Len(aNet)
               cStr := []
               cStr += [Card Num:]+Str(nI,2,0)+CRLF
               cStr += [Desc:]+aNet[nI,1]+CRLF
               cStr += [Mac Address:]+aNet[nI,2]+CRLF
               msgInfo( cStr, "Your Network Cards" )
           Next nI
        Else
           Tone( 1000, 1 )
           MsgStop( "No any Network Card!!" )
        EndIf

Return  NIL


if GetNetCardID() <> 'XXXXXXX'
MsgInfo('This Computer is not licensed')
endif

This is useful only when the user has an eithernet card in his P.C
and to control multi-user applications. It may not be useful for stand
alone applications.

If the user has several eithernet cards in his P.C ?
or
If he keep changing his eithernet cards frequently ?
User avatar
ssbbs
 
Posts: 104
Joined: Mon Oct 17, 2005 3:03 am
Location: Taiwan

Postby RAMESHBABU » Wed Oct 04, 2006 4:28 pm

Hi ssbbs

Thanks for your MAC.LIB which is holding
GetMacAddress() to know the no. of Network cards,
their manufacturer and Mac Address.

- Ramesh Babu P
User avatar
RAMESHBABU
 
Posts: 625
Joined: Fri Oct 21, 2005 5:54 am
Location: Secunderabad (T.S), India

Postby Milan Mehta » Sat Oct 07, 2006 10:45 am

areang wrote:I will send you by your private email

Areang


Dear Areang,

Can you help me too with those routines that will help me protect my application ?

With best regards,

Milan.
Milan Mehta
 
Posts: 115
Joined: Mon Oct 17, 2005 4:42 am
Location: India

Saludos colega

Postby sildata » Mon Dec 11, 2006 2:35 pm

Amigo: podrias intentar algo mas rudimentario como por ejemplo hacer un "run dir >dir.txt " en el archivo que te crea esta opcion te viene el "label" y el numero del serial del HDD, la lees con memoread, la limpias y separas lo que te interesa.
Adicionalmente tambien podrias agregar a tu rutina de seguridad la fecha del BIOS asi que esta string la guardas encriptada en algun subdirectorio de WINDOWS por ejemplo y con el nombre sugerido "SEGURIDAD.DLL"
pero sera un *.mem, el cual seria facil de leer y desencriptar solamente por ti.
Pienso que FECHABIOS+LABELHDD+SERIALHDD, pienso que seria bien dificil que te copien tu programa; yo lo utilizo y me va bien.
Saludos sildata
sildata@cantv.net
sildata
 
Posts: 38
Joined: Thu May 11, 2006 7:41 pm

Postby Milan Mehta » Thu Dec 14, 2006 6:28 am

Dear Ssbbs,

I too am working very hard to protect exe from copying. I think your smart.lib can go a long way in protecting the same.

From where can I get your smart.lib ?

TIA
Milan.

ssbbs wrote:
RAMESHBABU wrote:Hi Jeff

Thank you very much for quick reply.

Now your solution to the problem in subject is complete.

Regards

- Ramesh Babu P


reference the web link:
http://www4.zzz.com.tw/phpbb2/viewtopic.php?t=26

You can get HDD Lower level serial-number!!
Milan Mehta
 
Posts: 115
Joined: Mon Oct 17, 2005 4:42 am
Location: India

Postby cuatecatl82 » Thu Sep 13, 2007 12:17 am

Considered Jeff Barnes: :D

I am making tests with library that you publish in this forum, I have translated the instructions and the implementation of the same ones, but at the time of compiling my application it appears the following error it would be possible to update the file for the recent versions of xHabour.

This is the message:

"keygen32.obj" was compiled by older version, PCODE version 7 is no longer supported - Please recompile.


Thanks and Greetings from Mexico...

I.S.C. Víctor Daniel Cuatécatl León
User avatar
cuatecatl82
 
Posts: 625
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México

Previous

Return to FiveWin for Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 60 guests