vez que el usuario entra en su/su clave de licencia, mi aplicación activa en sí con esa clave (en línea). ¿Cómo guardo este estado activado y la clave de licencia para que la próxima vez que el usuario abre la aplicación, la aplicación sepa que ya está activada?¿Cómo debe almacenar mi aplicación Cocoa la clave de licencia del usuario?
Respuesta
acabo de escribieron los usuarios clave de licencia y combinar correo electrónico a un archivo en "~/Library/Application Support/MyApplication/License.myApplicationlicense ". Creo que esto es mejor que usar NSUserDefaults porque el usuario se espera que sea capaz de arrojar sus Preferencias sin tener nada dramático suceda como tener que volver a registrar su aplicación.
El archivo es solo el contenido de un NSDictionary escrito usando writeToFile: atómicamente: y leer usando dictionaryWithContentsOfFile :. Los contenidos no están encriptados, pero eso normalmente no es importante según cómo funcione su esquema de licencia.
También le sugiero que eche un vistazo a AquaticPrime si aún no lo ha hecho. Decidí rodar mi propio esquema de licencia porque quería códigos de licencia y no de licencia. Al final, creo que hubiera sido mejor seguir con AquaticPrime, que es mucho más criptográficamente seguro que mi propio esquema de licencia. Cuando utilicé AquaticPrime durante mi beta, almacené el archivo de licencia en la misma ubicación mencionada anteriormente.
Puede usar NSUserDefaults o un sistema de su propia invención.
He decidido usar NSKeyedArchiver porque mantiene los datos codificados, por lo que es más difícil acceder manualmente y cambiar los datos confidenciales, como la clave de licencia y el estado activado.
Usted podría estar interesado en http://www.cocoadev.com/index.pl?MAKeyedArchiver – RCIX
Eso parece útil. Voy a intentar eso. Utilicé este tutorial para escribir la clave de licencia y la información de activación en un archivo en la carpeta de datos de aplicación del usuario: http://cocoadevcentral.com/articles/000084.php – Chetan
Sugiero que la clave dependa de un asunto específico del usuario, es decir, correo electrónico o nombre completo o tal vez una identificación específica de la máquina si es necesario. A continuación, puede almacenarla en los NSUserDefaults o una llanura punto llamado archivo en el directorio personal del usuario. Esto sin necesidad de encriptarlo o hacer una ofuscación loca. Habrá piratería, asegúrese de eso, creo que esta es gente que nunca pagaría por nada, así que en realidad no pierde nada. Al hacer que la clave dependa de algo específico del usuario, el usuario se vuelve un poco más resistente para compartirla.
Sobre la piratería. ¿Qué tan lejos crees que pueden ir? Hice una pequeña herramienta que funcionó bien sin pagar nada. Pero como un regalo para aquellos que quisieran apoyar el esfuerzo de crearlo, agregué una pequeña característica para cambiar el color de los gráficos en él por solo $ 5. Bueno, ¿qué hicieron? Alguien realmente revirtió la ingeniería de la llave y crearon un keymaker. Admito que no he puesto mucho esfuerzo en el algoritmo de ofuscación, pero bueno, me he centrado más en lo que es fácil para todos los usuarios reales agradables a la entrada que hacer la vida más difícil para cualquier galleta. Estoy más feliz por lo que pensaron que mi pequeña aplicación valió la pena para realizar la ingeniería inversa de la clave.
Enlaces:
Apple proporciona una instalación completa para este tipo de requerimientos. Lo que quieres es la API de Keychain.
+1 esta es la respuesta correcta. Cualquier información sensible debe almacenarse en el llavero. Llamaría a la clave de licencia de un usuario "sensible" porque si la pierden, desaparecerá. –
Pero nunca he visto ninguna aplicación de software almacenar su clave de licencia en el llavero. Si el usuario pierde la clave de licencia, debe tenerla guardada en su correo electrónico o debería poder contactar al servicio de atención al cliente. Incluso los datos de Keychain se pueden perder, al igual que los datos en la carpeta de inicio del usuario. – Chetan
- 1. Licencia para la aplicación
- 2. Licencia .NET aplicación por máquina/por usuario licencia
- 3. proteger la aplicación Java por licencia o clave
- 4. ¿Dónde debería guardar la clave de "activación" de mi aplicación?
- 5. Almacenar la configuración del usuario en la tabla, ¿cómo?
- 6. ¿Evitar "reanudar" para mi aplicación Cocoa?
- 7. ¿Dónde debe almacenar la aplicación sus registros en Mac OS?
- 8. ¿Cómo agrego el soporte de Applescript a mi aplicación Cocoa?
- 9. ¿Cómo puedo decirle a mi aplicación Cocoa que cierre desde la propia aplicación?
- 10. Graph API/FQL ¿Cómo eliminar mi propia aplicación del usuario?
- 11. Licencia para la aplicación de escritorio C#
- 12. ¿Cómo puedo recibir notificaciones sobre un cambio de horario del sistema en mi aplicación Cocoa?
- 13. iPhone - cómo guardar la configuración del usuario desde la aplicación?
- 14. cómo detectar si el usuario tiene una aplicación en Cocoa
- 15. ¿Cómo puedo firmar mi aplicación con la clave de firma del sistema?
- 16. ¿Detección de patrón de clave de licencia?
- 17. ¿Cómo incluir OpenCV en la aplicación Cocoa?
- 18. ¿Cuál es la mejor forma de almacenar la configuración del usuario para una aplicación .NET?
- 19. Práctica recomendada: Aplicación de licencia para la aplicación Java Desktop
- 20. Delegado de aplicación - Cocoa
- 21. ¿Dónde debo almacenar los datos de mi aplicación?
- 22. ¿Hace que mi aplicación Cocoa responda a la tecla de reproducción/pausa del teclado?
- 23. i * debe * almacenar credenciales de terceros en mi base de datos. ¿mejor manera?
- 24. Detectando si la ventana es una ventana clave en cocoa
- 25. Mac/Cocoa: incrustar una ventana de terminal en mi aplicación
- 26. ¿Cómo almacenar contraseñas en la aplicación Winforms?
- 27. Dónde colocar la "pila de datos del núcleo" en una aplicación Cocoa/Cocoa Touch
- 28. Asegurar una clave de licencia de claves RSA con
- 29. Guardar información del usuario en la configuración de la aplicación
- 30. ¿Cómo abro la aplicación de configuración desde mi aplicación?
Eso es exactamente lo que hice, excepto que usé NSKeyedArchiver para codificar los datos en lugar de NSDictionary. Agrega un nivel extra de seguridad. En cuanto a AquaticPrime, consulte esto: http://toxicsoftware.com/aquaticprime-warning/ – Chetan
Debe señalarse que lo que aquí se describe es una falla binaria en el software. La defensa contra las fallas binarias es algo que nadie ha resuelto ya que incluso el cifrado de la aplicación iPhone se ha descifrado. Así que debes decidir qué quieres lograr. Propongo que desee mantener honestas a las personas honestas y tener un sistema de generación de claves de licencia que evite que alguien genere su propio generador de licencias para su aplicación. AquaticPrime logra esto con algunas advertencias. Debe compilar el código y ofuscar la clave pública y los métodos. –