Un pequeño aporte para quien tanto me dio

Un pequeño aporte para quien tanto me dio

Postby daniel_halon » Mon Oct 01, 2012 3: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: Select all  Expand view

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
daniel_halon
 
Posts: 41
Joined: Tue May 13, 2008 1:53 am
Location: Porto Alegre - Brazil

Re: Un pequeño aporte para quien tanto me dio

Postby AIDA » Wed Oct 10, 2012 5: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ǝ
User avatar
AIDA
 
Posts: 877
Joined: Fri Jan 12, 2007 8:35 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Garbi and 16 guests