FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Un pequeño aporte para quien tanto me dio
Posts: 41
Joined: Tue May 13, 2008 01:53 AM
Un pequeño aporte para quien tanto me dio
Posted: Mon Oct 01, 2012 03:00 PM
Todos queremos proteger nuestros programas, esta es mas una opción, mucho copié y aprendi de los que mas saben en este forum, a todos ellos, GRACIAS por conpartir con los que menos saben.

Code (fw): Select all Collapse
Em primeiro lugar devo agradecer a Leonardo Machado, quem tanto me ajudou sem pedir nada em troca(Valeu Leo!) Claro que muito aprendi neste fórum sem o qual não poderia ter sabido o pouco que sei sem a ajuda dos gurus do FW.

 Function SerialProtect(Criador)
// Vem de...
// ACTIVATE WINDOW oWnd MAXIMIZED;
// ON INIT(IF(Criador#'12081952', Valida_Senha('Entrada ao Sistema', '1', .T.), SerialProtect(Criador))) 
 
// Protegendo meu programa...
// CRIADOR es un parámetro que utilizo quando instalo un programa por primera vez, abro uma ventana al DOS y
// digito el  nombre del ejecutable espacio y  12081952, claro que es la fecha de mi cumpleaños(cosa de viejo,
// para no olvidarme!).
// Pueden crear um Keygen que haga esto, quedaria mas profesional y despues inutilizarlo com Ferase o limitando la  // fecha. mas abajo van entender la importancia  desta variable que sirve para gravar de manera encriptada el UUID // da placa madre en la base de datos para posteriormente comparar el mismo. Caso la placa madre sea antigua y no    // tenha UUID, tomo  el numero de serie del HD.
//-----------------------------------------------------------
  local oLoc := CreateObject( "wbemScripting.SwbemLocator" )
  local oSrv := oLoc:ConnectServer(,"root\cimv2")
  local aDrives := oSrv:ExecQuery( "SELECT * FROM Win32_ComputerSystemProduct" )
  local oDrive, cSerial := ''
  Local aData  := {}
  Local oMac, oDlgSerial, oSerial1, oSerial2
  Local cMac := Space(10), cSerial1 := Space(64), cSerial2 := Space(64)
  
  DEFINE BRUSH oBrush   Filename "Image\stone.bmp"  
  DEFINE ICON  oIcon    Resource "KEYS.ICO"
  
 
 
  FOR Each oDrive in aDrives
    AADD( aData, oDrive:UUID )
  Next
  For nAt := 1 to Len( aData )
    cSerial += Upper( AllTrim( cStr( aData[nAt] ) ) )
  Next nAt
  
  cMac := NEWPAR->MAC
  
  IF EMPTY(cSerial)               // Como la placa es antigua no tiene UUID, entonces tomamos el serial del HD
    cSerial  := nSerialHD('C:\')
    IF Valtype(cSerial) == 'N'
       cSerial := Str(cSerial)
    ENDIF
  ENDIF
  
  cSerial1 := alltrim(cSerial)
  
    
  IF Criador == '12081952'     //Puedem mandar un regalo en este dia!!!
  
    DEFINE DIALOG oDlgSerial RESOURCE "SERIAL";                     
           ICON oIcon;
           BRUSH oBrush 
                       
               
      REDEFINE VGET oSerial1 Var cSerial1 ID 101  OF oDlgSerial   WHEN .F.  VISTA  // Uso Vget de Vagner Wirts es mais    bonito (estoy hablando del Get)
      REDEFINE VGET oMac     Var cMac     ID 103  OF oDlgSerial PICTURE '9999999999'          
           
         
      REDEFINE BUTTON oBtnOK ID 10 OF oDlgSerial;
                  ACTION (Check_Serial(cSerial1, cMac, Criador, oDlgSerial))
  
  
      REDEFINE BUTTON oBtnCANCEL ID 20 OF oDlgSerial Transparent;
                            ACTION (oDlgSerial:End(), oWnd:End())  
 
    ACTIVATE DIALOG oDlgSerial Centered 
  
        
  ENDIF 
    
  
Return (cSerial)

*********************************************************
Static Function Check_Serial(cSerial, cMac, Criador, oDlgSerial)

   IF Criador == '12081952'  
     NEWPAR->( net_lock( .t. ) )
     NEWPAR->SERIAL := Alltrim(Encode(cSerial)) Nro de serie, UUID o Serial del HD
     NEWPAR->MAC    := cMac   //Nro de maquina
     NEWPAR->(dbunlock())
     oDlgSerial:End()
     oWnd:End()
  ENDIF 

Return


**********************************************************************
///////////////////////////////////////////////////////////////////////////////
// encode()   NOVA VERSAO 06/09/2000                                         //
///////////////////////////////////////////////////////////////////////////////
Function encode(p_str)

  Local m_char := '', m_outstr := '', m_cont := 0, m_aux := ''

  IF Valtype( p_str ) # 'C'
    Return( p_str )
  ENDIF
  //
  // rotina para encriptar
  //
  for m_cont := 0 to len(p_str) - 1
    m_aux    += substr(p_str,len(p_str)-m_cont,1)
    m_outstr += chr( asc(substr(m_aux,m_cont+1,1)) + m_cont * 2 + 127 )
  next
return m_outstr

///////////////////////////////////////////////////////////////////////////////
// decode()     NOVA VERSAO !!! 06/09/2000                                   //
///////////////////////////////////////////////////////////////////////////////
function decode(p_str)
local m_char := '', m_outstr := '', m_cont := 0, m_aux := ''
  //
  // rotina para desencriptar
  //
  for m_cont := 0 to len(p_str) - 1
    m_aux    += chr( asc(substr(p_str,m_cont+1,1)) - m_cont * 2 - 127 )
  next
  for m_cont := 0 to len(m_aux) - 1
    m_outstr += substr(m_aux,len(m_aux)-m_cont,1)
  next
return m_outstr

******************************************************************************
Function Check_Senha(vCod, vSenha, oDlg1, entrada)
   
    Local Largo := 8, habilita := .f. 
  
   IF Empty(Entrada) 
     Entrada := .F.         
   ELSE
     xSerial  := SerialProtect()
     IF EMPTY(xSerial)
       xSerial := nSerialHD('C:\')
     ENDIF
     
     IF Valtype(xSerial) == 'N'
       xSerial := Str(xSerial)
     ENDIF
     
     acSerial := Alltrim(Decode(NEWPAR->SERIAL))
     
     IF ALLTRIM(xSerial) # ALLTRIM(acSerial) .or. Empty(acSerial)
       lSair := .T.
       oDlg1:End()
       MsgStop(OemToAnsi('Este computador nao possui licenca de uso!' + CRLF + 'Ligue para (51)xxxx-xxxx para adquirir uma'))
       oWnd:End()
     ENDIF  
   ENDIF
        
   IF Sequencia > 3
     lSair := .T.
     oDlg1:End()
     oWnd:end()
   ENDIF
            

   IF vCod == 0 .AND. Empty(vSenha)
     IF Entrada == .T.
       lSair := .T.
       oDlg1:End()
       oWnd:end()
     ENDIF
   ENDIF

   IF empty(vSenha)
     MsgInfo(OemToAnsi('Voce nao digitou a Senha'))
     oDlg1:Setfocus()
     oSenha:Setfocus()
     oSenha:Refresh() 
     Return(habilita)
   ENDIF
   
   IF vCod == 0
     MsgInfo(OemToAnsi('Voce nÆo digitou o C¢digo'))
     oDlg1:Setfocus()
     oCod:Setfocus()
     oCod:Refresh() 
     Return(habilita)
   ENDIF

   IF LEN( vSenha ) # largo
     cDif := ( largo - LEN( vSenha ) )
     vSenha := vSenha + space( cDif )
   ENDIF

   vSenha := upper( vSenha )                              
   NEWFUN->( dbsetorder(1) )
   NEWFUN->( dbseek( vSenha ) ) 
     
   IF NEWFUN->( FOUND() )
     IF NEWFUN->COD == vCod
        lSair := .T.
        oDlg1:End()
        IF TIME() < '12:00'
          MsgWait("Bom dia  " + pripalavra(NEWFUN->NOM) + ',  ' + "Seu acesso esta liberado", "Bem Vindo",2)
          
        ENDIF
        
        IF TIME() > '12:00' .AND. TIME() <'19:00'
          MsgWait("Boa Tarde  " + alltrim(pripalavra(NEWFUN->NOM)) + ',  ' + "Seu acesso esta liberado","Bem Vindo",2)
          
        ENDIF
      
        IF TIME() > '19:01' .AND. TIME() < '23:59'
          MsgWait("Boa Noite  " + alltrim(pripalavra(NEWFUN->NOM)) + ',  ' + "Seu acesso esta liberado","Bem Vindo",2)
        
        ENDIF  
        
        Return lSair
     ENDIF
   ENDIF   


  IF NEWFUN->( FOUND() ) 
    IF NEWFUN->COD # vCod
      msgstop(OemToAnsi('O C¢digo digitado nÆo confere com a senha,') + CRLF + 'a entrada ao sistema foi NEGADA' +;
             CRLF + 'Tentativa Nro: ' + ALLTRIM(STR(SEQUENCIA)))
      oDlg1:Setfocus()
      vSenha := Space(8)
      oSenha:Setfocus()
      oSenha:Refresh()
      habilita := .f.
      sequencia++  
      return habilita
    ENDIF
  ELSE
    MsgStop(OemToAnsi('A Senha digitada nÆo existe') + CRLF + 'Tentativa Nro: ' +  ALLTRIM(STR(SEQUENCIA)))
    oDlg1:Setfocus()
    vSenha := Space(8)
    oSenha:Setfocus()
    oSenha:Refresh()
    sequencia++  
    Return(habilita)
  ENDIF 
     
RETURN
Buenos Aires - Argentina - Viviendo en Porto Alegre - RS - Brasil
daniel_halon@portobakers.com.br
FW 2.7- xHarbour 0.99.71 - PellesC
Posts: 880
Joined: Fri Jan 12, 2007 08:35 PM
Re: Un pequeño aporte para quien tanto me dio
Posted: Wed Oct 10, 2012 05:41 PM

Muchos Tenquius :mrgreen:

Saluditos :wink:

Que es mejor que programar? creo que nada :)
Atropellada pero aqui ando :P

I love Fivewin

séʌǝɹ ןɐ ɐʇsǝ opunɯ ǝʇsǝ

Continue the discussion