Evitar que nuestra aplicación sea crackeada

06 April 2009



Por todos es conocido el gran número de aplicaciones que han sido crackeadas, y mediante múltiples gestores de descargas como RapidShare, son compartidas las aplicaciones en forma de fichero IPA, para ser distribuidas de forma totalmente gratuita y por supuesto ilegal.

Entre otras cosas, modifican el fichero Info.plist de nuestra aplicación, y por lo tanto, una manera de evitarlo es realizar una sencilla comprobación en tiempo de ejecución.

Este fichero, contiene una serie de claves y valores. Una de esas claves (SignerIdentity) se encarga de indicar, una vez que nuestra aplicación sea ejecutada, que esta aplicación es segura y podemos confiar en ella. Este proceso y esta comprobación es realizado por el cargador (o lanzadera) de aplicaciones de nuestro iPhone.

Una vez explicado de una forma resumida, el proceso de ejecución de nuestra aplicación y el agujero por donde puede ser crackeada, tan solo nos queda evitarlo:

[cpp]
/* Detectar si ha sido crackeada */

NSBundle* bundle = [NSBundle mainBundle];

NSDictionary* info = [bundle infoDictionary];

if( [info objectForKey:@"SignerIdentity"] != nil)

{

}
[/cpp]

Así, si nuestra clave SignerIdentity ha sido activada y/o modificada, podemos cancelar la ejecución de nuestra aplicación, ya que estamos ante un caso de distribución ilegal de nuestra aplicación.

* Entendemos que esta comprobación será efectiva, excepto en el caso de que dicha clave haya sido utilizada por usted en su aplicación.
Evitar que nuestra aplicación sea crackeada

Comentarios recientes

  • 13 December 2009
    lisergio dijo:

    Buenas... No se si leeran esto... estoy haciendo una app, y he usado la comprobación que comentais en este tuto, pero he crackeado mi propia app con el info.plist de otra app crackeada, y funciona perfectamente, he añadido una vista... imagino que debería de funcionar ( soy bastante novato, estoy en vias de aprendizaje) lo he dejado asi... /* Detectar si ha sido crackeada */ NSBundle* bundle = [NSBundle mainBundle]; NSDictionary* info = [bundle infoDictionary]; if( [info objectForKey:@"SignerIdentity"] != nil) { [window addSubview:VISTA_PIRATA]; } ¿Deberia de aparecer la VISTA_PIRATA al detectar el pirateo?

  • 13 July 2009
    Echalotte dijo:

    Muy buen aporte Lord, yo agregaria: - Validar esta clave varias veces en el programa. Cuanto más veces, mejor. - No conviene escribir la validacion en una sola funcion llamada ValidateSignerXXX sino repetir las lineas de código en cada caso. En seguridad las buenas practicas de programacion no se apliquen del todo...

  • 07 April 2009
    LordMoriarty dijo:

    Buena aportación para proteger un poco más nuestras aplicaciones, pero yo recomendaría además de eso, que no usemos la cadena 'SignerIdentity' como texto plano en nuestro código fuente, ya que es una cadena que buscan los 'crackers' a nivel hexadecimal y con desensambladores para localizar la zona binaria de nuestro código para poder parchearlo. Se puede construir esa misma cadena pero a base de alteraciones ASCII internas en nuestro código. Tampoco es recomendable que usemos ningún tipo de mensaje en la zona de código donde hacemos la comprobación del 'SignerIdentity', ya que también buscan las cadenas de texto de ese mensaje para localizar la misma zona anteriormente citada. Para más protección es recomendable que no nos limitemos a realizar un chequeo del 'SignerIdentity' sino que usemos el resultado de 'SignerIdentity' y lo fusionemos con alguna variable totalmente necesaria en nuestra aplicación, de esta forma no es una simple comparación (CMP en ensamblador), que es lo que parchean los 'crackers', sino que es algo más ligado con la filosofía de funcionamiento de nuestro programa. No es infalible pero en nivel del 'cracker' ha de ser más alto para que nos fusilen la aplicación. Saludos.

Deja un comentario

Escrito por:

Administrador

Sin categoría
info.plistcrackIPA

Utilizamos cookies propias y de terceros para mantener la sesión o sus preferencias, recopilar estadísticas y proporcionar contenidos conforme a sus intereses. Si continua navegando, utiliza los servicios de la web o pulsa el botón, está aceptando su instalación y el uso que hacemos de ellas. Puede obtener más información sobre como revocar su consentimiento o cómo cambiar la configuración en este enlace.