iphone objective-c cydia

iphone - ¿Cómo detectar "galletas IAP"?



objective-c cydia (7)

Acabo de encontrar un component de $ 20 en BinPress que pretende proporcionarle esta protección. De hecho, fue la lectura de su descripción lo que me llevó a buscar IAP Cracker y me llevó a esta pregunta.

Desde una lectura rápida a través de la descripción, parece que vale la pena intentarlo, al menos, como una barrera barata para estos ataques.

Este componente brinda protección contra las herramientas que evitan las compras dentro de la aplicación y desbloquean contenido premium de forma gratuita, como el ''iAP Cracker'' más popular. La protección se administra a través de un servicio de verificación de recibos alojado en nuestros servidores. Viene con seguridad y confiabilidad comprobadas contra las herramientas de craqueo y tiene la intención de ser lo más fácil posible de integrar para el desarrollador.

La "verificación de compra en la aplicación" es para aquellos que no mantienen un servidor y desean evitar administrar la verificación de compra por sí mismos. Es un gran ahorro de tiempo: implementarlo es tan fácil como insertar algunas líneas de código adicionales (ver más abajo). A partir de entonces, el servidor hará su magia y verificará cada recibo con un servidor de Apple. También le proporcionará un recuento de las compras realizadas.

Descubrí que muchos usuarios utilizan los llamados "crackers IAP" en lugar de comprar los artículos en la compra dentro de la aplicación (IAP). También aprendí que Zynga Poker y Pokerist ya detectan crackers IAP y previenen el falso IAP. Me gustaría detectar qué teléfono está utilizando el cracker IAP. Para la herramienta de hacking Cydia, podría encontrarla con la ruta de la aplicación.

Pero no creo que los crackers iAP caigan en aplicaciones específicas. Creo que puedo verificarlo llamando al "Esquema de Url" pero no sé el nombre. ¿Hay alguien que sepa cómo?



Debe probar el sistema ("dpkg -l | grep iapCracker> /var/tmp/logiap.txt"); luego llene una NSString con el contenido de logiap.txt y verifique si la cadena contiene algo. Pero no sé si la manzana te permite hacer esto;)


El método NSFileManager , escrito por @ Morpheus2002 no funcionaba para mí y podría estar violando las pautas de Apple. Para verificar si Cydia está instalado y, por lo tanto, si el dispositivo tiene jailbreak, puede verificar si puede abrir el esquema de URL de cydia://home como se sugiere @MarkJohnson:

if (![[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"cydia://home"]]) { NSLog(@"Jailbreak is not detected"); } else { NSLog(@"Jailbreak is detected"); }


Enviaremos esto en una aplicación esta semana (mayo de 2015). Así veremos si Apple aprueba.

+(BOOL)isJailbroken { #if (TARGET_IPHONE_SIMULATOR) return NO; #endif #ifndef IS_APP_EXTENSION NSURL* url = [NSURL URLWithString:@"cydia://package/com.example.package"]; BOOL doesHaveCydia = [[UIApplication sharedApplication] canOpenURL:url]; if (doesHaveCydia) { return YES; } NSError* error=nil; NSArray* files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"/System" error:&error]; //NSLog(@"blah %i error %@",(int)[files count], error); if (error==nil) { //A non-jailbroken device will have an operation not permitted error. //Jailbroken device should have a list of files and a nil error. if (files) { NSLog(@"jailbreak? %i",(int)[files count]); } return YES; } return NO; #else return NO; #endif }


La mejor solución en este momento parece ser verificar las transacciones IAP usando un servidor externo, y luego enviar algún tipo de clave específica del dispositivo para desbloquear el elemento pagado que solo se puede generar en ese servidor. Esto no es a prueba de balas, pero debería hacer que su aplicación sea altamente resistente a cualquier sistema de craqueo de IAP de propósito general; alguien que quisiera descifrar tu aplicación tendría que desarrollar una grieta específicamente para eso. (que es mucho más complicado, mucho más allá del alcance de la mayoría de las personas que utilizan IAP Cracker)

Esto es lo que básicamente deberías hacer:

  1. Diseña tu solución de seguridad en la aplicación; algún tipo de clave única que desbloquea la funcionalidad añadida. Si la funcionalidad agregada toma la forma de un archivo de datos, entonces esta podría ser una clave de cifrado para descifrar ese archivo, si está todo en código, entonces es un poco más difícil, pero hay muchas soluciones creativas (por ejemplo, constantes de cadena cifrada). Sea lo que sea, sin embargo, debe confiar o verificar la presencia de algún dato que obtendrá de su servidor web.
  2. Modifique su código de procesamiento IAP para que cuando vea una transacción procesada, envíe los detalles de esa transacción a su servidor web y recupere la clave única necesaria en el paso 1.
  3. Escriba un script simple en su servidor web que tome los detalles de la transacción, verifíquelos con Apple (consulte la documentación del desarrollador para obtener detalles sobre cómo funciona la verificación de recibos, una solicitud JSON bastante simple), y luego de una verificación exitosa, devuelva la clave del paso 1.

(vea el texto después de EDITAR a continuación para ver una verificación adicional que debe hacer ahora en el paso 3)

En su caso, dado que su aplicación ya ha sido resquebrajada y está intentando desactivar a las personas que obtuvieron ilícitamente su elemento de IAP, usted presentaría esta funcionalidad en una nueva versión de su aplicación, luego llamará a restoreCompletedTransactions la primera vez que la nueva La versión se ejecutó para volver a validar / reactivar las compras para sus usuarios legítimos y bloquear a todos los demás.

Sin embargo, debo agregar que esto es MUCHO trabajo; nos llevó un par de semanas de tiempo de programación para que funcionara sin problemas, aunque ahora existe un código de fuente abierta que manejará la mayoría de los pasos 2 y 3 para usted. También hay un costo de soporte y PR para ese paso de reactivación: inevitablemente, algunas personas cambiarán las cuentas de iTunes o se quedarán sin conexión a Internet o algo así, y es probable que estén bastante sorprendidas para perder el acceso a algo que legítimamente pagaron. .

Debe valorar si realmente vale la pena invertir el tiempo en esto, cuando el crack solo está disponible para los usuarios de jailbreak (por lo que algo como el 90% de sus clientes potenciales no se ven afectados) y la mayoría de las personas que lo instalan difícilmente pagarán por su aplicación de todas formas; No se asuste por la gran cantidad de usuarios que descifran su aplicación, muchas personas estarán felices de descargar algo gratis, incluso si nunca lo hubieran pagado. Probablemente sea mejor que dedique su tiempo a mejoras que beneficien a los usuarios legítimos (y aliente a más de ellos a comprar su aplicación).

EDITAR Un año más tarde, esto todavía es (en su mayoría) preciso, pero para lidiar con el nuevo crack anunciado hoy que intercepta y luego reenvía recibos genuinos, ahora hay un poco más de trabajo necesario en el lado del servidor. (Afortunadamente, si ya tiene configurado un servidor de verificación, debería poder hacer esto sin actualizar su aplicación) Dos nuevos requisitos:

1) Verifique que las ID del producto (tanto la ID de la aplicación como la IAP del producto) en el recibo descifrado que recibe del servidor de Apple coincidan con el producto que el usuario está comprando.

2) Verifique que el ID de transacción en el recibo (o el ID de transacción de restauración para un recibo de restauración) nunca se haya usado antes, manteniendo un registro de los ID de transacción utilizados anteriormente.

Sin embargo, incluso con el craqueo de IAP disponible para usuarios sin jailbreak, mi punto básico es que esto puede ser más problemático de lo que vale la pena, para recuperar el tiempo que pasará implementando y manteniendo un lote de código totalmente no divertido. , tendría que obtener MUCHAS ventas adicionales de personas que, después de todo, no estaban tan dispuestas a pagar por su producto que estaban dispuestas a comprometer masivamente la seguridad de su iPhone para evitar hacerlo.


Para detectar IAP Cracker, simplemente puede verificar el paquete instalado con NSFileManager . Lo he intentado con Cydia para detectar un jailbreak y funciona bien.

Como Cydia se instala automáticamente en todos los dispositivos con jailbreak, puedes buscar Jailbreak de la siguiente manera:

if ([[NSFileManager defaultManager] fileExistsAtPath:@"/Applications/Cydia.app"]){ NSLog(@"Jailbreak detected"); }

IAP Cracker es solo un paquete, que también está instalado en su sistema, puede verificarlo también.

if ([[NSFileManager defaultManager] fileExistsAtPath:@"/Library/MobileSubstrate/DynamicLibraries/iap.dylib"]){ NSLog(@"IAP Cracker detected"); }

¿Alguien sabe si está violando algunas pautas de Apple?