2010-12-03 9 views
5

Es posible proporcionar un servicio en el que se otorga una versión de prueba gratuita a cada dispositivo sin la posibilidad de que un individuo pueda obtener múltiples pruebas gratuitas en un solo dispositivo. Si es imposible, ¿conoces una forma de dificultar la obtención de múltiples pruebas gratuitas?¿Es posible tener una sola prueba por dispositivo?

+0

Tenga en cuenta que la identificación de Android aparentemente no es única: se alega que existe una versión de modelo/firmware por la que todos los dispositivos tienen la misma identificación. –

+0

Lo hago :) También Windows Mobile. Tenga en cuenta que la identificación única del dispositivo es muy difícil de encontrar en Android. –

+0

La ID del dispositivo obtenida a través de Settings.Secure puede cambiar en un restablecimiento de fábrica del dispositivo. La identificación del dispositivo obtenida a través de TelephonyManager puede no existir (si, por ejemplo, el dispositivo no es un teléfono). –

Respuesta

11

Puede generar la clave de licencia basada en el ID único del dispositivo, la fecha de solicitud y su propia clave privada para crear una licencia que solo es válida hasta cierta fecha.

Su aplicación verificará que la clave de licencia sea válida decodificando la clave de licencia con su clave pública y comparando su fecha de caducidad e ID de dispositivo. Las personas no pueden falsificar una solicitud, ya que la clave de licencia solo es válida para la fecha prescrita y una ID de dispositivo determinada.

(pista: leer sobre criptografía de clave pública)

Sin embargo, no es totalmente a prueba de tontos. Un atacante realmente determinado puede rootear su dispositivo e instalar un firmware personalizado que le permita controlar el identificador devuelto por "getDeviceId()". Esto no es algo que la mayoría de la gente estaría dispuesta a hacer, la mayoría de las personas preferiría encontrar una aplicación gratuita alternativa o simplemente comprar la aplicación en lugar de seguir esa ruta. Contra los crackers con ese tipo de determinación y habilidades, no hay mucho que puedas hacer.

Una vía alternativa de ataque sería reemplazar la clave pública que envía con la aplicación con la combinación de clave privada/pública del atacante, y puede escribir potencialmente un generador de claves que pueda generar una clave de licencia para la aplicación falsificada. Puedes dificultar este ataque mediante la autoverificación de tu propio ejecutable.

Sin embargo, ningún esquema de seguridad es infalible, la aplicación java/android puede ser de ingeniería inversa y un hacker determinado puede forjar su aplicación y desactivar sus comprobaciones de licencia. La única forma infalible de evitar el uso no autorizado de una aplicación es no distribuir la aplicación en absoluto.

3

Claro, pero deberá configurarlo para almacenar identificadores de dispositivos en su propio servidor. En un iPhone, se puede obtener el UDID usando

UIDevice *device = [UIDevice currentDevice]; 
NSString *uniqueIdentifier = [device uniqueIdentifier]; 

Usted puede hacer una llamada de base de datos y acompare uniqueIdentifier a su lista almacenada, asegurando que sólo un ensayo puede ser activado por dispositivo.

En android, getDeviceID() le proporciona un identificador de dispositivo único. compruebe the documentation para obtener más información sobre esto.

+0

+1, pero, ¿es esto realmente seguro? Al final del día, tengo que enviar una solicitud a mi servidor, y ¿qué impide que un atacante falsifique una solicitud? – rook

+0

cierto; pero no creo que haya otra manera, ya que no puedes controlar la distribución de aplicaciones (debido a App Store y Marketplace). Esto definitivamente lo hace difícil, pero no imposible. –

+0

@Rook: podría hash la solicitud con una clave secreta y verificarla en su servidor. – donkim

1

Si no me falta algo, mi solución sería sencilla. Haré que expire el servicio proporcionado por la aplicación, no la aplicación en sí. Esto se puede hacer utilizando algún mecanismo de token como oAuth. (con un token que expira con una duración considerable, en este caso su período de prueba). Durante el proceso de registro del cliente, crearé el token de solicitud en función de la identificación del dispositivo Android y la hora solicitada. Checkout oAuth, podría ser una molestia, pero casi todos los principales proveedores de servicios lo usan.

4

Imagino que podría obtener el 99% del efecto de un esquema más complejo con uno simple: simplemente almacene un archivo en algún lugar del dispositivo que indique que la prueba ha expirado. De acuerdo, los usuarios conocedores de la tecnología podrían encontrar y eliminar el archivo, pero la gran mayoría no se molestará: el dispositivo es una losa inescrutable de magia para ellos, entrometerse en los archivos internos podría desagradar a los pequeños gnomos que comercian furiosamente detrás del dispositivo. pantalla.

Puede hacer las cosas más difíciles al ocultar el archivo de bloqueo, cambiando el nombre y la ubicación en función de la identificación del dispositivo; de esta manera es mucho más difícil para alguien compartir instrucciones sobre cómo evadir su plan de prueba.

Como han notado las otras respuestas: ningún sistema es infalible, siempre hay alguien por ahí que es más listo que usted y que disfrutará de descifrar su plan. El truco es no perder el tiempo dándole a este tipo un entrenamiento mental y en su lugar atender a la mayoría.

1

¿Qué le parece guardar la dirección MAC del adaptador wifi? Posiblemente en su servidor y su aplicación consultará el servidor si ese MAC ya está registrado.

¿CON EL PERMISO DEL USUARIO, en la primera ejecución de la aplicación, pregunte al servidor si la dirección MAC del dispositivo actual ya está registrada? Si no, almacene la dirección MAC en su servidor. Si ya está registrado, solicite al usuario que compre la aplicación para continuar utilizando.

Este método se puede complementar con algunos algoritmos criptográficos como lo sugiere Lie Ryan para proporcionar seguridad y bloqueos adicionales y/o período de prueba.

No sé mucho sobre el iPhone, pero creo que cada iPhone tiene un adaptador wifi y cada adaptador wifi tiene una dirección MAC única. También revise el lado legal de esta solución ya que almacenar el MAC puede generar problemas/inquietudes de privacidad. Entonces, antes de usar esto, verifique las leyes aplicables.

Cuestiones relacionadas