2011-04-25 12 views
7

¿El archivo ejecutable de una aplicación byte por byte es idéntico cuando la aplicación se compra a través de la tienda de aplicaciones y se instala en el iPhone de un usuario, en comparación con el archivo ejecutable original enviado a Apple en el paquete de la aplicación original? ¿O es diferente (por ejemplo, con firmas adicionales o encriptación)?¿Apple modifica los ejecutables de la aplicación iOS en aplicaciones enviadas a App Store?

Me preocupa solo el archivo ejecutable, no todo el paquete de la aplicación.

En particular, sería codificar como ...

int main(int argc, char* argv[]) { 
    FILE* file = fopen(argv[0], "rb"); 
    // Read entire contents of executable file; calculate a hash value 
    // ... 
    fclose(file); 
} 

... calcular el mismo hash como calcular el hash fuera del iPhone en el original, presentado ejecutable?

Por ejemplo, calcular un hash SHA256 como el anterior utilizando "Crear y ejecutar" en XCode para ejecutar en un iPhone conectado produce exactamente el mismo resultado que calcular el hash SHA256 ejecutando openssl sha256 MyAppExecutableFile desde un terminal en OS X. Esto significa el acto de instalar la aplicación a través de XCode no altera el archivo ejecutable.

Mi pregunta es si esto aún se cumple cuando una aplicación se envía, se compra e se instala.

Respuesta

17

El ejecutable de la aplicación está encriptado por Apple cuando se lanza en la App Store, por lo que la autoejecución de una suma de comprobación en su propio binario no es una buena idea, no se puede conocer el tamaño del archivo binario encriptado con antelación.

Tenga en cuenta que el binario siempre permanece cifrado en el sistema de archivos, y solo el usuario raíz del iPhone puede descifrar estos binarios. Si descarga una aplicación de la App Store con iTunes, se puede abrir la IPA en su PC o Mac y ver que los binarios son, en efecto cifran mediante la ejecución de otool:

otool -l <app binary> | grep cryptid 
crypt id 1 
(a value of cryptid 1 means the app is encripted) 

otool -l <app binary> | grep cryptsize 
12345678 
(size of the encrypted segment) 
+0

¿Revisaste el .ipa o la aplicación en sí? Creo que Apple agrega un par de archivos a .ipa cuando se descarga, pero no pueden cambiar la aplicación en sí porque eso invalidaría la firma de código realizada en la compilación, lo que impediría que la aplicación se ejecute. – ughoavgfhw

+1

Comprobé el binario dentro del paquete de IPA/aplicación. De hecho, Apple puede cambiar la aplicación sin romper la aplicación, ya que la firma va en un archivo separado dentro del paquete de la aplicación. Pueden simplemente verificar la validez de la firma en el momento de la presentación, luego descartarla, alterar ligeramente el binario por el motivo que sea y luego firmarlo con su propio certificado maestro. –

+1

He oído que la aplicación en el paquete de IPA está almacenada encriptada, pero cuando está "instalada" en el dispositivo, puede ser descifrada. (Aparentemente así es como funciona un software de "descifrado": instala la aplicación y luego copia el ejecutable desencriptado fuera del dispositivo). ¿Entonces tal vez vuelva al original? Me pregunto si hay alguna manera de probar si este es el caso. Supongo que podrías entrar en un iPhone con jailbreak y copiar el ejecutable de la aplicación fuera de él, luego ver a qué versión es idéntica. – JohnSpeeks

2

La aplicación también es despojado de su firma y firmado por Apple. Esto se puede verificar ejecutando "codesign -vvvvd" en el binario de la aplicación que envía y comparándolo con el resultado de "codesign -vvvvd" del binario de la aplicación que descarga de la tienda.

Debido a esto, los valores hash no coincidirán.

Cuestiones relacionadas