¿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.
¿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
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. –
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