2011-10-04 37 views
5

Actualmente, estoy intentando crear una biblioteca de seguridad objC reutilizable para el uso de los desarrolladores de mi empresa. En esta biblioteca, me gustaría tener una API que detecte si su dispositivo iOS tiene jailbreak. Observé una respuesta inteligente por GregH que es similar a lo que está haciendo iBooks; ejecuta una versión sin firmar de un ejecutable (iOS lo hace al iniciar la aplicación a través de la llamada execve sys), si vuelve, sabe que el dispositivo está jailbroken.Detectar dispositivo iOS con Jailbreak ejecutando el ejecutable sin firmar

Pregunta: ¿Es posible empaquetar un ejecutable en la biblioteca de iOS e invocarlo a través de alguna función? Si es así, ¿cuál podría ser la mejor manera de hacerlo?

Gracias por su ayuda, kc

Respuesta

1

Que yo sepa, las aplicaciones de espacio aislado no puede ni siquiera fork(). No estoy seguro si pueden llamar al execve(). Si no pueden hacer ninguna de las dos cosas, simplemente debe llamar al execve().

No estoy seguro de cuánto interrumpe el jailbreaking con esto. Es posible tener un jailbreak que le permita ejecutar aplicaciones sin firmar desde aplicaciones sin firmar pero que se comporte normalmente si la persona que llama está firmada.

Obviosuly es posible "empaquetar" un ejecutable en una biblioteca: solo tiene static unsigned char const data [] = { ... };, escríbalo en un archivo, chmod(), e intente ejecutarlo.

Al final del día, sin embargo, esto puede ser un perjuicio para sus usuarios. Un teléfono Jailbroken no significa que su aplicación ha sido pirateada. A menos que conozca a alguien con un teléfono con jailbreak que esté dispuesto a hacer algunas pruebas (y pruebas con diferentes jailbreaks), es posible que se esté preparando para "Simplemente se bloquea". revisiones.

(Y si se cuelga, entonces alguien va a llegar y romper su aplicación. Es mejor ser discreto y monitorear el "problema" antes de decidir si necesita ser reparado.)

Jailbreaks ocurren con más frecuencia de lo que pensar. Agregué cheques para MobileSubstrate a nuestro script automatizado de informe de fallos, porque lo hemos visto en una proporción significativa de fallas. OTOH, la proporción de bloqueos donde se instala la aplicación en/Aplicaciones (que solía ser tradicional para las aplicaciones crackeadas, tal vez ya no lo es) es insignificante.

+0

En lo que respecta a 'execve()', tener una llamada a la función, ya sea que esté funcionando o no, probablemente desconecte el detector "no compatible/API no documentada" de Apple y obtenga su aplicación rechazada. – duskwuff

+0

@duskwuff: si está en un encabezado, entonces está "documentado" lo suficiente como para no disparar el detector. Hasta donde yo sé, los encabezados son exactamente lo que usa su sistema automatizado para decidir si algo es "público" o no. –

0

He intentado empaquetar un archivo ejecutable en una aplicación IOS agregando el archivo ejecutable de un proyecto cuya función main() simplemente devuelve un número entero a mi proyecto. Este archivo se copia en el teléfono cuando se implementa, pero se copia sin permisos de ejecución. Al intentar modificar el archivo para ejecutarlo, se produce un error de "Operación no permitida", a pesar de que el propietario del archivo es el mismo que el usuario actual (móvil).

+0

Si copia el ejecutable en NSCachesDirectory, puede modificarlo. – richie

Cuestiones relacionadas