2010-03-14 18 views
5

Im haciendo una aplicación en cacao y quería ver si algunas cadenas en él eran de fácil acceso, así que ejecuté OTX en él y, lamentablemente, se encontró todo mi código. ¿Hay algún método que pueda usar para hacer que mi código sea más "seguro" o al menos encriptar/ocultar las cadenas? La razón por la que quiero encriptar la cadena es una contraseña para un servidor. No lo necesito realmente seguro. Simplemente no quiero que la contraseña sea tan fácil de encontrar.Escribir código de cacao seguro

Gracias por cualquier ayuda

+0

¿Qué es esta cosa OTX que mencionaste y cómo usarla? –

Respuesta

6

1. Evitar ObjC en código seguro.

Como el sistema de clases de ObjC depende en gran medida del reflejo del tiempo de ejecución, toda la interfaz debe incluirse junto con el ejecutable. Esto permite que herramientas como class-dump recuperen fácilmente la interfaz de origen del binario.

Por lo tanto, las funciones de código de seguridad deben escribirse como una función C, no como un método ObjC.

2. Utilice strip.

De forma predeterminada, el compilador conservará todos los símbolos privados (lo que permite que la traza de la pila sea más legible). Puede usar strip para eliminar todos estos símbolos.

3. Ofuscación.

Los pasos anteriores solo pueden ocultar la lógica del código. Pero si la contraseña es una cadena constante, es inmediatamente visible usando la utilidad strings. Puede ofuscar esto al construir la contraseña en tiempo de ejecución (por ejemplo, almacenar la contraseña codificada en ROT-13 en el archivo).

4. O simplemente cambie su diseño.

No importa qué tan bueno sea su sistema de protección, ya que el hacker tiene control total sobre su máquina, dado el tiempo suficiente, siempre ganan. Es mejor revisar su diseño, por ejemplo, ¿por qué la contraseña debe venir con el ejecutable? ¿O por qué se necesita una contraseña global?

+0

Gracias por la respuesta. No soy un programador con mucha experiencia, pero ¿cómo lo cambiaría a una función C? – nosedive25

+1

@happy: como en lugar de usar '+ (NSString *) getPassword;', se crea una 'static NSString * getPassword (void);' fuera de la clase. – kennytm

8

Debe nunca poner una contraseña en un archivo ejecutable.

Esto es como poner la contraseña en una nota adhesiva al lado del monitor. Si un pirata informático malintencionado tiene su aplicación, con el tiempo puede extraer la contraseña independientemente del idioma o la API que utilice para escribirla.

Por ejemplo, si sé que su aplicación se conecta a un servidor protegido con contraseña pero la aplicación nunca solicita una contraseña, entonces sé que cometió un error al incluir la contraseña. Para encontrar la contraseña, solo necesito monitorear el funcionamiento del programa para ver qué áreas de código están activas en el momento en que se conecta al servidor. Esto me dirá dónde enfocar la búsqueda de la contraseña independientemente de cuán grande sea su aplicación. Entonces solo es cuestión de tiempo hasta que rastree la contraseña. Cifrar la contraseña no sirve porque el algoritmo de encriptación también debe estar en la aplicación y también puedo descifrarlo.

Recuerda que hay muchas personas que pueden descifrar tu código utilizando solo el código de máquina sin formato. Para esas personas, no importa qué idioma o API utilizas, ya que todos se destilan a código de máquina al final. Esas personas son los diestros dioses habilidosos de la programación y se ríen de meros mortales como usted o yo.Desafortunadamente, algunos de ellos son malvados.

¿He mencionado que usted debe Nunca poner una contraseña en un archivo ejecutable? Si no lo hiciera, déjeme repetir que debe nunca poner una contraseña en un archivo ejecutable.

En su caso particular, como programador novato, no tiene ninguna esperanza de ocultar la contraseña de alguien con incluso un poco más de experiencia que usted. Esta es otra buena razón por la cual usted debe nunca poner una contraseña en un archivo ejecutable.

+1

Gracias por la respuesta. La única razón por la que hay una contraseña es que es solo para unos pocos amigos y no se distribuirá. – nosedive25

+3

Amigos? Entonces, ¿por qué quieres encriptarlo? :-) –