olvido - Ofuscación del código de la aplicación de iPhone/iPad: ¿es posible? ¿Vale la pena?
restricciones ios 12 (5)
- Sí, puedes echar un vistazo a EnsureIT para Apple iOS o Contaxiom Code Protection
- Depende. La seguridad normalmente presenta complejidad, hay que equilibrarla entre usabilidad.
- Apple no debería tener ningún problema con eso (corrígeme si estoy equivocado), y personalmente tengo algunas aplicaciones que usan el código ofuscador.
Investigué un poco, tanto en SO, como en búsquedas de Google en todo el lugar, pero parece que no puedo encontrar una respuesta directa con respecto a la ofuscación de código para aplicaciones de iPhone / iPad escritas en Objective-C .
Mis preguntas son estas:
- ¿Hay una manera de hacerlo? ¿Si es así, cómo?
- ¿Vale la pena?
- ¿Apple lo permite o tiene un problema cuando se le envía la aplicación?
Además de las respuestas anteriores, ahora hay varias herramientas de terceros que ofrecen cierto grado de protección contra la ofuscación y la integridad, que incluyen:
- Arxan,
- Metaforic,
- Cryptanium
Varían en capacidades e incluyen:
- Ofuscación de flujo de control, por ejemplo, los flujos de instrucción ARM se destrozan con instrucciones redundantes para tratar de ocultar el propósito original del código.
- Cambio de nombre de clase y método: cambia el nombre de tus métodos y clases a nombres sin sentido, aunque debes tener cuidado cuando se usa, ya que puedes romper fácilmente tu aplicación porque el tiempo de ejecución de Objective-C espera encontrar ciertos nombres,
- Cifrado de cadenas: todas las cadenas estáticas de la aplicación se cifran y se inserta el código para descifrar las cadenas justo antes de su uso con el fin de dificultar el análisis estático.
- Anti-debug - se inserta código para romper los depuradores habituales (no siempre con éxito),
- Antimanipulación: generalmente crea una red de sumas de comprobación que protegen el código binario de modificaciones,
- Protección de tiempo de ejecución de Objective C: generalmente verifica las implementaciones de métodos registrados de obj-c para asegurarse de que están en la aplicación y que no han sido ''swizzled''.
Todas estas herramientas son muy costosas y tienen sus problemas, por lo que realmente necesita una aplicación que requiera un alto grado de integridad para considerarlas, por ejemplo, la banca o donde DRM es muy importante.
Para estos tipos de aplicaciones también necesitarás expertos probadores de penetración para asegurarte de que tu aplicación no esté expuesta de otras formas, ya que estas herramientas a menudo son tan buenas como las que las usan y existen otras vulnerabilidades del sistema operativo que necesitarán mitigar que las herramientas no te diriges
El ejecutable de una aplicación ya está encriptado por Apple, y el segmento de código ejecutable del entorno limitado de la aplicación no se puede escribir, por lo que no se puede hacer un cifrado adicional que requiera la modificación del código de ejecución del tiempo de ejecución. Y el pase optimizador del compilador Objective C / C ya crea algo muy diferente del código fuente original. Al usar más C y menos, el Objetivo C revelará menos nombres de sus funciones, ya que los nombres de los métodos están incrustados en el texto plano visible, pero los nombres de las funciones C no lo son. Por lo tanto, cualquier código tipo de secreto comercial probablemente debería codificarse en C simple, y compilarse con el optimizador totalmente actualizado. Podría ofuscar cualquier JavaScript de webKit incrustado en el paquete de la aplicación, o cualquier otro código de VM incorporado (siempre que no se descargue el código interpretado).
No parece haber un ocultador de código para Objective-C. Pero supongamos por un momento que uno existe.
Apple probablemente no rechazará una aplicación ofuscada siempre que no se cuelgue. La pregunta principal es: ¿cuál es el punto de ofuscación? Normalmente, quiere ofuscar el código para proteger su conocimiento, por ejemplo, si su programa usa una protección contra copia que desea dificultar a un cracker potencial o si está utilizando algún algoritmo avanzado, no desea que los competidores de negocios sean capaz de descompilarlo
La protección contra copia ya se ha solucionado en iOS. Aunque a través del jailbreak se puede copiar y ejecutar una aplicación normal, yo diría que la cantidad real de usuarios que hacen esto es bastante baja (al menos mucho menor que en computadoras "normales" como PC y Mac). ¿Esperas que la piratería sea un problema tan grande que debes ofuscar?
Si tiene un conocimiento importante que proteger, la ofuscación puede valer la pena. La ofuscación tiene sus desventajas: ya no puedes depurar tu aplicación ofuscada. Los informes de fallas serán inútiles.
También es posible que desee leer el artículo Ofuscación de cacao .
Volviendo al hecho de que no parece haber un ofuscador: lo que puedes hacer es este truco: digamos que tienes un encabezado como este:
@interface MyClass : NSObject {
}
- (void)myMethod;
Podrías hacer una ofuscación barata como esta:
#ifndef DEBUG
#define MyClass aqwe
#define myMethod oikl
#endif
@interface MyClass : NSObject {
}
- (void)myMethod;
De esta forma, aún puede usar símbolos significativos en su fuente, pero el compilador la convertiría en "basura" cuando no esté compilando para la depuración.
Probablemente no porque Objective-C compila las instrucciones del procesador en lugar de ser interpretado o compilado a un código de bytes, por lo que la descompilación del código ya producirá resultados bastante oscuros. La ofuscación es algo que generalmente solo necesita cuando tiene que distribuir la fuente de su código, como en lenguajes interpretados como JavaScript, para que se ejecute incluso cuando desea que el código permanezca en secreto.