El Santo Grial de los programadores, como hacer para que se venza al Mes ?

Iniciado por TrashAmbishion, 25 Abril 2013, 00:50 AM

0 Miembros y 1 Visitante están viendo este tema.

TrashAmbishion

Pues quisiera oir ideas de como puedo hacer para que mi aplicación se venza en una fecha X todos los meses...

He estado pensando en hacerlo por tiempo, que la aplicación trabaje un X tiempo.

Asi como obligar a que tenga que verificar la fecha por internet siempre al arrancar la aplicación.

Pero bueno quisiera antes de tomar una decision algunas opiniones para evitar la pirateria.

La Pc en la que correra la aplicacion no tiene internet.

Salu2

USLO

Hola TrashAmbishion,

A ver el planteamiento de que verifique por internet, no esta mal.
Pero como vas a hacerlo si el pc en la que corre la aplicación no tiene internet?
Si tiene internet yo verificaría si la fecha a expirado o no y a su vez meterle una segunda comprobación.

Ejemplo:
Creas un fichero XML con una clave y que el programa al arrancar verifique la clave y la hora del fichero XML de forma remota.

Si quieres añadir mas seguridad. puedes codificar la clave, para los listos que sacan las claves.

Esto seria para mi , un formato estándar y básico de comprobación de software.

Otro planteamineto seria:

Que tu programa al descodificar la clave a partir de cierto dia,tenga otro tipo de codificacion, por lo que deberias generar un fichero XML con la nueva clave codificada de otra manera.

Asi te aseguras que a partir de determinada fecha el programa expire.

Seguro que hay metodos mucho mas eficaces , pero la verdad no he indagado mucho en este asunto.

Espeor que te sirva de algo.


Un saludo

Eleкtro

Una solución sencilla de usar:

Código (vbnet) [Seleccionar]
    #Region " Trial Period Function "
     
       ' [ Trial Period Function ]
       '
       ' Examples :
       ' Trial_Get(Trial_value.As_Boolean)
       ' MsgBox(String.Format("You have {0} day(s) remaining.", Trial_Get(Trial_value.As_LeftDays)))
     
       Public Enum Trial_value
           As_Boolean
           As_LeftDays
           As_CountDays
       End Enum
     
       ' Trial Period [Get]
       Public Function Trial_Get(ByVal Trial_value As Trial_value)
           'My.Settings.Reset() 'If you want to reset the trial period
           Dim TrialCount As Integer = 0
           TrialCount += 1
           Return Trial_CheckDate(Date.Now.AddDays(TrialCount), Trial_value)
       End Function
     
       ' Trial Period [CheckDate]
       Public Function Trial_CheckDate(ByVal Trial_DateToCheck As Date, ByVal Trial_value As Trial_value)
     
           Dim Trial_retValue As Boolean = False ' Fail safe, default to false
           Dim Trial_usageDatesLeft As Int16 = 7 ' Set here the number of days of Trial period
           Dim Trial_hashedDate As String = Trial_HashDate(Trial_DateToCheck)
     
           If My.Settings.Trial_Period Is Nothing Then My.Settings.Trial_Period = New System.Collections.Specialized.StringCollection
     
           If My.Settings.Trial_Period.Contains(Trial_hashedDate) Then
               Trial_retValue = True
               Trial_usageDatesLeft = CShort(Trial_usageDatesLeft - My.Settings.Trial_Period.Count)
               If Trial_usageDatesLeft <= 0 AndAlso My.Settings.Trial_Period.IndexOf(Trial_hashedDate) <> My.Settings.Trial_Period.Count - 1 Then Trial_retValue = False
           Else
               If My.Settings.Trial_Period.Count < Trial_usageDatesLeft Then My.Settings.Trial_Period.Add(Trial_hashedDate)
               Trial_usageDatesLeft = CShort(Trial_usageDatesLeft - My.Settings.Trial_Period.Count)
               If Trial_usageDatesLeft > 0 Then Trial_retValue = True Else Trial_retValue = False
           End If
     
           Select Case Trial_value
               Case Trial_value.As_Boolean : Return Trial_retValue ' If False then Trial Period is expired
               Case Trial_value.As_LeftDays : Return Trial_usageDatesLeft ' Days left
               Case Trial_value.As_CountDays : Return My.Settings.Trial_Period.Count ' Count days
               Case Else : Return Nothing
           End Select
     
       End Function
     
       ' Trial Period [HashDate]
       Public Function Trial_HashDate(ByVal Trial_DateToHash As Date) As String
           Dim Trial_Hasher As System.Security.Cryptography.MD5 = System.Security.Cryptography.MD5.Create()
           Dim Trial_Data As Byte() = Trial_Hasher.ComputeHash(System.Text.Encoding.Default.GetBytes(Trial_DateToHash.ToLongDateString()))
           Dim Trial_StringBuilder As New System.Text.StringBuilder()
           Dim Trial_IDX As Integer
           For Trial_IDX = 0 To Trial_Data.Length - 1 : Trial_StringBuilder.Append(Trial_Data(Trial_IDX).ToString("x2")) : Next Trial_IDX
           Return Trial_StringBuilder.ToString
       End Function
     
    #End Region



Aquí tienes más snippets interesantes: http://foro.elhacker.net/net/libreria_de_snippets_posteen_aqui_sus_snippets-t378770.0.html








TrashAmbishion

Puedes explicarlo un poco..

Como verificas la fecha ??

Acaso usas la fecha del pc donde corre el programa como referencia ? Es que esta claramente se puede alterar !! Yo obligo a que se conecte y tenga que verificar la fecha a internet y bueno realizo una serie de verificaciones y demas ?

Salu2

Eleкtro

#4
No soy el creador del código, pero te responderé según lo que estuve testeando.

Cita de: TrashAmbishion en 30 Abril 2013, 16:02 PM
Acaso usas la fecha del pc donde corre el programa como referencia ?

Si y No, se toma la fecha como referencia para el primer uso, y cuando la fecha cambia (ya séa hacia atrás o hacia delante), cuenta como un día de uso.

Es decir, si tenemos un trial de 7 días y Pasan 5 días, quedan 2 días de uso,
Si el usuario cambia la fecha a -5 días porque se cree muy listo,  ¿al volver a iniciar la aplicación que sucede?,
Que se ha restado 1 día de uso, en lugar de 2 días queda 1 día de uso, porque al cambiar la fecha hacia atrás, el programa ha detectado el cambio de fecha y lo ha contado como un día más de uso.

¿Como puede eludir esta protección un usuario?, fácil, no cambiando la fecha en el sistema, mantener siempre la misma fecha, pero no creo que exista nadie que primero se de cuenta y sepa que para evadir la protección hay que hacer eso, y segundo alguien que séa tán retorcido como para perder 1 minuto cada día para vivir siempre en la misma fecha de su puñetero PC xD.

No sé que tipo de aplicación haces, pero si no está relacionada con la web entonces no te parece demasiado excesivo querer OBLIGAR a disponer de una conexión de internet para utilizar la aplicación?

Un saludo!








TrashAmbishion

Oye eso ultimo era privado jejeje y dime si te pagasen no harias lo necesario, jejeje..

Salu2 y gracias por la explicación muy bueno.

Eleкtro

#6
Si me pagasen por hacer una Aplicación Trial, lo que yo haría es cojer un software profesional de pago (craqueado) para implementar la protección Trial a la aplicación > http://www.exeshield.com

Saludos!




EDITO:
Otra alternativa mucho más barata y eficaz que se me ocurre es :

· Crear un timer que tickee cada 5 segundos y que haga lo siguiente:
1. Crear una clave de registro oculta (si, oculta, de 256 caracteres)
2. Sumarle el tiempo transcurrido por el timer al valor de la clave (sumarle 5 segundos cada 5 segundos) hasta que el programa se cierre.
3. cifrar la clave aunque séa con algún cifrado básico.
4. Denegar los permisos de lectura y de escritura a la clave del registro para el usuario actual.

· Al volver a iniciar la aplicación, se retomaría el permiso de lectura/escritura a la clave, se descifraría, se leeria el valor y se convertiría a días, para saber los días restantes que quedan.

PD: El usuario no podría saber ni que esa clave existe aunque la monitoriee, pero si se diera el caso, además debería tener los conocimientos necesarios para obtener los permisos de usuario, y saber como ver la clave oculta, y como desencriptarla.

...hmmm creo que acabo de sacar una nueva idea de esto para mi próximo snippet xD.

Saludos.




EDITO2:

Añado un comentario muy bueno que he leido respecto a hacer una protección trial añadiendo una clave de registro...
Si entiendes el inglés lee la parte subrayada, tiene toda la razón, y es uno de los motivos por lo que te digo que no hay que buscar la protección perfecta.

Traduzo:
· No hay que preocuparse por los usuarios que hacen cosas como cambair la hora dle pc o eliminar tu clave de registro de protección.
· Los usuarios que hacen esas cosas representan 0 perdidas de dinero.
· Un usuario que está dispuesto a intentar piratear tu aplicación no se va a levantar para comprarte la aplicación.
· Estás aquí para ganar dinero, no para perder tiempo intentando ganar batallas perdidas con compradores que no puedes obtener.

http://stackoverflow.com/questions/4521468/where-to-store-the-protection-trial-info-for-software-protection-purpose

Cita de: StackOverFlowJust don't worry about those users who do things like set back their system clock or manually hack the registry to break your key. Let me say that again: Just don't worry about users who make a conscious decision to alter their system in a significant way to get past your trial limitations — and make no mistake, setting back the system clock or editing the registry are significant modifications. The reason you shouldn't worry about these users is that they represent exactly $0 in potential income. A user willing to make to take this kind of conscious choice about pirating your software isn't going to just give up and decide to pay for your product if it doesn't work. If they can't get your software for free, they'll either go with a competitor or do without. You're in this to make money - you don't want to spend time and resources trying to grab sales you can't win or sending users to a competitor. Therefore, the basic security issues you raised for either option aren't a factor.








TrashAmbishion

Tiene hasta cierto punto lógica pero bueno la aplicación no lo voy a comercializar es algo mas bien a pedido y entonces quiero tratar de hacerlo lo mejor posible por defender el tiempo que me llevo crearlo  ::)

De todas formas me alegra a verte ayudado en idear un Snippet jejeje thx anyway aun sigo viendo...

Salu2

MCKSys Argentina

Siempre recuerda que: If it runs, it can be defeated.

La idea es hacerlo tan insoportable, que no valga la pena perder tiempo en reversearlo...

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."