como evitar que copien los programas..alguna idea?

2,715 views
Skip to first unread message

Dennis Sang

unread,
Feb 26, 2009, 4:47:48 PM2/26/09
to Mundo Visual FoxPro
Hola amigos realmente este foro me ha educado mucho, Gracias a todos y
cada uno.

Pues necesito alguna rutina para que no sea tan facil copiar mi
programa de una PC a otra, se que deben existir varias maneras, estare
muy agradecido si me ayudan.

Saludos..

Dennis Sang

mhlezama

unread,
Feb 26, 2009, 8:25:47 PM2/26/09
to Mundo Visual FoxPro
usa el refox8, pero en el modo I+

Gerardo

unread,
Feb 27, 2009, 7:56:34 AM2/27/09
to Mundo Visual FoxPro
Hola Dennis,
te cuento, yo utilizo protección por hard, existen unas llaves que se
conectan en el puerto paralelo o en el usb y son exactamente para
proteger las aplicaciones, entre otras cosas también encripta la base
de datos. Yo las estoy utilizando desde hace tiempo ya y la verdad es
que estoy tranquilo, si bien mi sistema lo pueden copiar (como la
mayoria de los q existen), el sistema se ejecuta solo si está esta
"llave" conectada al pc.
Si quieres más información entra en www.hardkey.net

Saludos.
Gerardo

di por favor, luego gracias

unread,
Feb 27, 2009, 10:16:58 AM2/27/09
to Mundo Visual FoxPro
no te tiene que preocupar si copian o no tu sistema, lo que te tiene
que preocupar
es que una vez copiado no lo puedan utilizar, todo lo que esta en un
disco puede
ser copiado, pero no puede ser reutilizado

arti...@gmail.com

unread,
Feb 27, 2009, 11:54:30 AM2/27/09
to Mundo Visual FoxPro
No puedes evitar que te copien el software porque el medio en el que
se graba
tiene como una de sus características el poder duplicar tanto
información como
programas.
Lo que sí puedes hacer es ponerlo un poco más complicado, yo uso un
sistema
que hasta ahora no me ha fallado nunca, después de instalado el
programa, al
ponerlo en marcha por primera vez el te presenta una clave
alfanumérica de 48 dígitos
a esa clave le corresponde únicamente otra distinta de la misma
longitud (desarrollé un
software que se encarga de hacer esa tarea y generar 2 claves
simultáneamente una se
ve, la otra no). De esa forma cuando el cliente instala el software
con su cd me llama
me dice la clave y yo le doy la respuesta correspondiente, las claves
no se repinten
de modo que aunque el usuario la anote no volverá a salir la misma
clave, la clave
ser repite cada 720000 instalaciones. Cuando se da el valor correcto,
el software
lee el número de serie del disco duro, el de la placa base y el del
procesador, así
como información adicional sobre el número de discos duros, tipo de
tarjeta gráfica,
incluso fragmentos de la bios del sistema, con todo ello aplico un
algoritmo y genera
un número que se guarda dentro del disco duro encriptado y escondido.
Al arrancar la
aplicación, esta realiza la misma operación de lectura de números de
serie y datos y
el resultado lo compara con el número generado en la instalación y ya
está, si falla un
solo dígito el sistema no arranca. Hasta ahora me lo han copiado pero
siempre han
acabado llamandome pues no lo pueden ejecutar. Es una idea pero hay
muchas, espero
que te sirva, saludos

Julio Cesar Rodriguez Dominguez

unread,
Feb 27, 2009, 12:09:27 PM2/27/09
to mundovis...@googlegroups.com

Muy interesante, te pedirias que compartieras tu algoritmo de encriptado, pero seria una falla de seguridad para tus aplicaciones.
La idea es muy buena.



--
:: God bless you, every day and every night ::

mhlezama

unread,
Feb 27, 2009, 4:28:07 PM2/27/09
to Mundo Visual FoxPro
creo que en esto se necesita creatividad y eso es bueno. Y cada quien
lo puede aplicar en forma diferente.
al menos en mi caso yo necesito saber como extraer:

- el fragmento de la BIOS
- el de la placa
- y el numero del procesador.

como hago para saber esto?, la aplicación la inventaré. gracias




On 27 feb, 11:09, Julio Cesar Rodriguez Dominguez <jura...@gmail.com>
wrote:
> :: God bless you, every day and every night ::- Ocultar texto de la cita -
>
> - Mostrar texto de la cita -

CompuIngenio

unread,
Feb 28, 2009, 12:26:21 PM2/28/09
to Mundo Visual FoxPro
OK muy ingenioso, pero para copiones normales. Pero lo malo es que
existen personas que te decompilan el programa así ya este protegido
con refox o cualquier otro, y luego le quitan el algoritmo de
protección que uno le pone como programador y vuelven a compilar y
voila! el programa corre porque corre.

En realidad, nunca se puede proteger un programa 100%.

Julio Cesar Rodriguez Dominguez

unread,
Feb 28, 2009, 1:35:32 PM2/28/09
to mundovis...@googlegroups.com
El 28 de febrero de 2009 11:26, CompuIngenio <compui...@gmail.com> escribió:

OK muy ingenioso, pero para copiones normales.  Pero lo malo es que
existen personas que te decompilan el programa así ya este protegido
con refox o cualquier otro, y luego le quitan el algoritmo de
protección que uno le pone como programador y vuelven a compilar y
voila! el programa corre porque corre.

En realidad, nunca se puede proteger un programa 100%.

eso tambien es muy cierto. :(

Message has been deleted

Mary

unread,
Feb 28, 2009, 3:47:06 PM2/28/09
to Mundo Visual FoxPro
Julio cesar haber yo creo que si se puede proteger al 100% si quieres
te envio un exe y tu lo decompilas sinceramente no crea que se pueda

On 28 feb, 19:35, Julio Cesar Rodriguez Dominguez <jura...@gmail.com>
wrote:

Dennis Sang

unread,
Feb 28, 2009, 3:56:48 PM2/28/09
to Mundo Visual FoxPro
Gracias por su ayuda.... son de mucha utilidad las ideas y las
discusiones alrededor de este tema... Finalmente, me prodria alguien
ayudar con el codigo para obtener:

1) el id del Procesador,
2) el del disco duro y
3) el de la placa base,


me suena super hacerlo asi. Si me pueden facilitar el codigo que lee
este partes de la computadora estare mas que agradecido..!


Saludos,


Dennis Sang.


PS. a la vez quiero compartir algo que estaba en el foro anterior de
hotmail. Mauricio si estas por ahi, gracias por este:


06/10/2002 9:07 Expuesto por Mauricio


Evitar las copias del sistema:
Una Manera sencilla de verificar si el sistema que un usuario tiene es
original es el uso de archivos que nos ayuden a comprobar si ellos
tienen una copia o no. Aqui les pongo una manera sencilla de como
hacerlo, por supuesto
pueden modificar el contenido de las rutinas, a la vez que aqui
describo dos pequeñas rutinas, las cuales se deben de ejecutar por
separado. La primer rutina es la que debemos usar en nuestro sistema
por decirlo
asi en el main menu(Menu principal), la segunda es donde creamos
nuestro archivo a verificar.

Codigo para colocar en el archivo principal

** Archivo para la verificacion de autenticidad
** de un sistema
** Basado en un archivo con variables
** El archivo debera ser guardado a la hora
** de Instalacion en el directorio:
** C:WindowsSystem
** Nombre del Archivo= acxso.dll
** Nombre de la variable = ntrd
*** Funcion que verifica que exista el archivo
*** y sus respectivos datos
if file('C:\windows\system\acxso.dll')
restore from C:\windows\system\acxso.dll additive
if ntrd='yipague'
do nuetro_programa_principal
else
wait window 'Programa invalido, por favor consiga una version
original'
endif
else
wait window 'Programa invalido, por favor consiga una version
original'
endif


*Codigo para crear el archivo DLL


**** Funcion para crear el archivo acxso.dll
**** Aqui es donde vamos a guardar nuestra
**** clave dentro de una variable y la vez en
**** un archivo
ntrd = 'yipague'
save to acxso.dll all like ntrd


Julio Cesar Rodriguez Dominguez

unread,
Feb 28, 2009, 3:57:47 PM2/28/09
to mundovis...@googlegroups.com
El 28 de febrero de 2009 14:47, Mary <maeo...@gmail.com> escribió:

Julio cesar haber yo creo que si se puede proteger al 100%  si quieres
te envio un exe y tu lo decompilas sinceramente no crea que se pueda

Una oferta muy tentativa, pero no tengo tiempo ahorita para invertirlo en dicho reto.
Pero creeme que no te puedes proteger al 100% es muy obvio, si hasta el mismo Windows lo hackean unas horas de liberado, que sera de un simple exe.

Pero si tu crees lo contrario, esta bien, no pretendo iniciar un thread polemico.

Saludos Mary.

Guillermo Anibal garcia

unread,
Feb 28, 2009, 11:46:01 PM2/28/09
to Mund Visual FoxPro, denni...@gmail.com
Colega:
Aqui va lo que pediste
Espero te sirva
Saludos
Guillermo
 
*!* Devuelve las direcciones IP
*!* Sintaxis: IPAddress()
*!* Valor devuelto: lcRetVal
*!* lcRetVal viene expresado como una cadena con el formato: 192.100.100.100, 192.100.100.101, ...
FUNCTION IPAddress
*!* Windows Sockets
#DEFINE WS_VERSION_REQD        257
#DEFINE WS_VERSION_MAJOR    1
#DEFINE WS_VERSION_MINOR    1
#DEFINE MIN_SOCKETS_REQD    1
#DEFINE SOCKET_ERROR        -1
#DEFINE WSADESCRIPTION_LEN     256
#DEFINE WSASYS_STATUS_LEN     128
*!* Windows NetBIOS
#DEFINE NCBENUM                     55
#DEFINE NCBASTAT                    51
#DEFINE NCBNAMSZ                    16
#DEFINE HEAP_ZERO_MEMORY            8
#DEFINE HEAP_GENERATE_EXCEPTIONS    4
#DEFINE NCBRESET                    50
 
  LOCAL lnCnt, lpWSAData, lpWSHostEnt, lpHostName, lcRetVal, lpHostIp_Addr, ;
    lpHostEnt_Addr, lnHostEnt_Lenght, lnHostEnt_AddrList
  *!* Instrucciones DECLARE DLL para manipular Windows Sockets
  DECLARE INTEGER WSAGetLastError IN WSock32.DLL
  DECLARE INTEGER WSAStartup IN WSock32.DLL INTEGER wVersionRequested , STRING @lpWSAData
  DECLARE INTEGER WSACleanup IN WSock32.DLL
  DECLARE INTEGER gethostname IN WSock32.DLL STRING @lpHostName, INTEGER iHostNameLenght
  DECLARE INTEGER gethostbyname IN WSock32.DLL STRING lpHostName
  DECLARE RtlMoveMemory IN Win32API STRING @lpDest, INTEGER nSource, INTEGER nBytes
  *!* Valores
  lcRetVal           = ''
  lpHostName         = SPACE(256)
  lnHostEnt_Addr     = 0
  lnHostEnt_Lenght   = 0
  lnHostEnt_AddrList = 0
  lnHostIp_Addr      = 0
  lpTempIp_Addr      = CHR(0)
  lpHostIp_Addr      = REPLICATE(CHR(0), 4)
  lpWSHostEnt        = REPLICATE(CHR(0), 4 +4 +2 +2 +4)
  lpWSAData          = REPLICATE(CHR(0), 2 +2 + ;
    WSADESCRIPTION_LEN +1 +WSASYS_STATUS_LEN +1 +2 +2 +4)
  *!* Iniciar Windows Sockets
  IF WSAStartup(WS_VERSION_REQD, @lpWSAData) =  0
    *!* Valores
    lnVersion    = StrToInt(SUBSTR(lpWSAData, 1, 2))
    lnMaxSockets = StrToInt(SUBSTR(lpWSAData, 391, 2))
    *!* Determinar si Windows Sockets responde
    IF gethostname(@lpHostName, 256) <> SOCKET_ERROR
      *!* Valores
      lpHostName = ALLTRIM(lpHostName)
      lnHostEnt_Addr = gethostbyname(lpHostName)
      *!* Determinar si Windows Sockets no dio error
      IF lnHostEnt_Addr <> 0
        *!* Mover bloques de memoria
        RtlMoveMemory(@lpWSHostEnt, lnHostEnt_Addr, 16)
        *!* Valores
        lnHostEnt_AddrList = StrToLong(SUBSTR(lpWSHostEnt, 13, 4))
        lnHostEnt_Lenght   = StrToInt(SUBSTR(lpWSHostEnt, 11, 2))
        *!* Obtener todas las direcciones IP de la máquina
        DO WHILE .T.
          *!* Mover bloques de memoria
          RtlMoveMemory(@lpHostIp_Addr, lnHostEnt_AddrList, 4)
          *!* Valores
          lnHostIp_Addr = StrToLong(lpHostIp_Addr)
          *!* No hay o no quedan más direcciones validas
          IF lnHostIp_Addr = 0
            EXIT
          ELSE
            *!* Separar multiples IP`s con comas
            lcRetVal = lcRetVal + IIF(EMPTY(lcRetVal), '', ',')
          ENDIF
          lpTempIp_Addr = REPLICATE(CHR(0), lnHostEnt_Lenght)
          *!* Mover bloques de memoria
          RtlMoveMemory(@lpTempIp_Addr, lnHostIp_Addr, lnHostEnt_Lenght)
          *!* Componer cadena IP con puntos
          FOR lnCnt = 1 TO lnHostEnt_Lenght
            lcRetVal = lcRetVal + TRANSFORM(ASC(SUBSTR(lpTempIp_Addr, lnCnt, 1))) + ;
              IIF(lnCnt = lnHostEnt_Lenght, '', '.')
          ENDFOR
          *!* Continuar con la siguiente direccion
          lnHostEnt_AddrList = lnHostEnt_AddrList + 4
        ENDDO
      ENDIF
    ENDIF
  ENDIF
  *!* Parar Windows Sockets
  IF WSACleanup() <> 0
    lcRetVal = 'No se pudo obtener la Direccion IP'
  ENDIF
  *!* Retorno
  RETURN lcRetVal
ENDFUNC
 
* como obtener el Serial de un Disco, esta forma es súper sencilla y con poco código.
oFS=CreateObject('scripting.filesystemobject')
? 'Numero de Serie del Disco ' + str(oFS.Drives('c').SerialNumber,11,0)

 

* Una forma sencilla de conocer toda la información del procesador de nuestro PC.
? "Número de CPUs: " + GETENV("NUMBER_OF_PROCESSORS")+CHR(13)
? "Arquitectura del Procesador: " +GETENV("PROCESSOR_ARCHITECTURE")+CHR(13)
? "Identificador del Procesador Identifier: " +GETENV("PROCESSOR_IDENTIFIER")+CHR(13)
? "Nivel del Procesador: " +GETENV("PROCESSOR_LEVEL")+CHR(13)
? "Revisión del Procesador Revision: " +GETENV("PROCESSOR_REVISION")+CHR(13)

 

 
> Date: Sat, 28 Feb 2009 12:56:48 -0800
> Subject: [Mundo Visual FoxPro] Re: como evitar que copien los programas..alguna idea?
> From: denni...@gmail.com
> To: mundovis...@googlegroups.com
ips_macs_guid.zip

Mary

unread,
Mar 1, 2009, 10:31:59 AM3/1/09
to Mundo Visual FoxPro
Bueno aqui les dejo chicos este pdf de la aplicacion desarrollada para
licencias , demo , trial, alquiler de software , tenemos 2 versiones
de escritorio y web tanto para vfp .net , java
http://www.badongo.com/file/13627273

On 1 mar, 05:46, Guillermo Anibal garcia <guille1...@hotmail.com>
wrote:
> > From: dennis.s...@gmail.com
> _________________________________________________________________
> Descubre cómo compartir tus fotos con Windows Live. ¡Pruébalo ya!http://home.live.com/
>
>  ips_macs_guid.zip
> 4 KVerDescargar- Ocultar texto de la cita -

servic...@gmail.com

unread,
Mar 2, 2009, 3:12:00 AM3/2/09
to Mundo Visual FoxPro
Saludos a todos:

Mira yo utilizo una llave Key, pero hecha por mi. Te explico. Cojo
cualquier lapiz USB y hago los siguientes pasos:

1 - Formateo el USB (key)
2 - Averiguo el número de serie.
3 - Guardar el numero de serie en un fichero (xxxxx.ini) pero el
número esta encriptado.

Cuando se ejecuta el programa:

1 - Leer todos los puertos USB y si existe la llave (Key) la comparo
con el fichero de xxxxx.ini (te recuerdo que esta encriptado por lo
que tendrás antes de comparar desencriptar.

2 - Si claves del Key y la del INI son iguales a correr el programa,
de lo contrario saco un formulario que tiene un trimer el cual
comprueba que la llave se introduce, y por su puesto que tiene un
botón para salir.

Te puedo asegurar que es muy difícil la ejecución del programa.

Esta es la idea que es similar a la comercial, pero en plan muy
económico, ya que no supone un incremento en el precio del programa.

Espero que te sea útil. Jesús. (www.ServiciosJFP.com)

Dennis Sang

unread,
Mar 2, 2009, 10:11:20 AM3/2/09
to Mundo Visual FoxPro
Gracias a todos por sus respuestas...! me parece que todos son buenos
en lo que hacen.. sin duda...!

Dennis Sang

Pd. encontre un codigo que sirve para leer el numero serial de una
memoria usb aqui se los dejo...Saludos desde Honduras.

oWMi = getobject("winmgmts://")
col = oWMI.ExecQuery("Select * from win32_diskdrive")
for each disk in col
? disk.PNPDeviceID
next

El Malosito Malosito

unread,
Mar 7, 2009, 7:56:59 AM3/7/09
to mundovis...@googlegroups.com

Buenos días a todos mis amigos zorros.

 

Tengo el siguiente problemita:

 

Tengo un archivo .prg el cual llamo librería (le digo librería porque contiene muchas funciones y procedimientos creados por mi y que las tengo como base para cualquier cosa que necesite hacer sin necesidad de volver a hacerlas), pero pasa y sucede que cada vez que quiero usar alguna función tengo que copiarlo completo y cuando genero el ejecutable entonces el se hace muy grande.

 

Entonces escuche hablar de las famosas librerías, según con esto el ejecutable solo se crea con las funciones o procedimientos que yo necesito y no se graban todas las funciones al mismo tiempo.

 

Entonces la pregunta es como hago para generar una librería de funciones partiendo del archivo .prg que yo tengo?

 

Si alguien tiene una respuesta, un ejemplo de como se hace o los pasos a seguir para poder crearla, les estaría muy agradecido al respecto.

 

Espero puedan ayudarme por favor.



Invite your mail contacts to join your friends list with Windows Live Spaces. It's easy! Try it!

El Malosito Malosito

unread,
Apr 6, 2009, 2:25:24 PM4/6/09
to mundovis...@googlegroups.com
Amigos Foxeros, tengo una problema y no se que hacer, ni como lo coy a hacer.
 
El problema es que diseñe una funcion en Visual foxpro 9 y necesito hacer esa misma función pero en Visual C++.
 
 
Aqui les dejo la función a ver quien me ayuda con dicha funcion:
-----------------------------------------------------------------------------------------------------
Function HayLlave()
     Local oWmi, xSerial, wBase64, xExisteLlave, x
    
     If File("Llave.txt") Then
       xExisteLlave = 0
       oWmi =
Getobject("winmgmts://")
       Col = oWmi.ExecQuery("Select * from win32_diskdrive")
      
       For Each Disk In Col
           xSerial = Disk.PNPDeviceID
     
           If Substr(xSerial, 1, 3) = "USB" Then
             wBase64 = Alltrim(Filetostr("Llave.txt"))
 
             For x = 1 To 25
                 wBase64 =
Strconv(wBase64, 14)
             Next x
 
             If wBase64 = Alltrim(xSerial) Then
                xExisteLlave = 1
             Endif
          Endif
       Next
     Else
        xExisteLlave = -1
     Endif
 
     Return
xExisteLlave
Endfunc
-----------------------------------------------------------------------------------------------------
 
Bueno amigos hay les dejo dicha funcion, esperando una pronta respuesta, porque de verdad no se nada de Visual C++.
 
 


Explore the seven wonders of the world Learn more!
Reply all
Reply to author
Forward
0 new messages