J'ai fait beaucoup de recherches, à la fois sur SO, ainsi que sur Google partout, mais je n'arrive pas à trouver une réponse simple en ce qui concerne l'obfuscation de code pour les applications iPhone/iPad écrites en Objective-C .
Mes questions sont les suivantes:
Il ne semble pas y avoir d'obscurcisseur de code pour Objective-C. Mais supposons un instant qu'il existe.
Apple ne rejettera probablement pas une application masquée tant qu'elle ne plante pas. La question principale est: quel est l'intérêt de l'obscurcissement? Normalement, vous voulez brouiller le code pour protéger vos connaissances, par exemple si votre programme utilise une protection contre la copie, vous voulez le rendre plus difficile pour un pirate potentiel ou si vous utilisez un algorithme avancé, vous ne voulez pas que les concurrents commerciaux soient capable de le décompiler.
La protection contre la copie est déjà prise en charge sur iOS. Bien que grâce au jailbreak, une application normale puisse être copiée et exécutée, je dirais que le nombre réel d'utilisateurs qui le font est assez faible (au moins beaucoup plus bas que sur des ordinateurs "ordinaires" comme PC et Mac). Pensez-vous que le piratage est un si gros problème que vous devez masquer?
Si vous avez des connaissances importantes à protéger, l'obscurcissement peut valoir la peine. L'obfuscation a ses inconvénients: vous ne pouvez plus déboguer votre application obscurcie. Les rapports de plantage seront inutiles.
Vous pouvez également lire l'article Obfuscating Cocoa .
Retour au fait qu'il ne semble pas y avoir d'obscurcisseur: ce que vous pouvez faire est cette astuce: disons que vous avez un en-tête comme celui-ci:
@interface MyClass : NSObject {
}
- (void)myMethod;
Vous pouvez faire un brouillage bon marché comme celui-ci:
#ifndef DEBUG
#define MyClass aqwe
#define myMethod oikl
#endif
@interface MyClass : NSObject {
}
- (void)myMethod;
De cette façon, vous pouvez toujours utiliser des symboles significatifs dans votre source, mais le compilateur le transformerait en "ordure" lorsqu'il ne compile pas pour le débogage.
Suite aux réponses précédentes, il existe maintenant plusieurs outils tiers qui offrent un certain degré d'obscurcissement et de protection de l'intégrité, notamment: -
Ils varient en capacités et comprennent: -
Tous ces outils sont très chers et non sans problèmes, vous avez donc vraiment besoin d'une application qui nécessite un haut degré d'intégrité pour les prendre en compte, par exemple. bancaire ou où le DRM est très important.
Pour ces types d'applications, vous aurez également besoin de testeurs de pénétration qualifiés pour vous assurer que votre application n'est pas exposée d'autres manières, car ces outils sont souvent aussi bons que ceux qui les utilisent et il existe encore d'autres vulnérabilités du système d'exploitation qui devront atténuer le fait que les outils ne vous adressez pas.
L'exécutable d'une application est déjà crypté par Apple et le segment de code exécutable du sandbox de l'application n'est pas accessible en écriture, vous ne pouvez donc pas effectuer de cryptage supplémentaire qui nécessite une modification du code d'armement d'exécution. Et la passe d'optimisation du compilateur Objective C/C crée déjà quelque chose de très différent du code source d'origine. Utiliser plus de C et moins d'Objective C révélera moins de vos noms de fonction, car les noms de méthode sont intégrés dans du texte brut visible, mais pas les noms de fonction C. Donc, tout code de type secret commercial devrait probablement être codé en C simple et compilé avec l'optimiseur complètement tourné vers le haut. Vous pouvez obscurcir tout Javascript WebKit intégré dans le bundle d'application, ou tout autre code VM VM intégré (tant que le code interprété n'est pas téléchargé).