9
votes

Objective-C obscusation des méthodes fonctionne dans le débogage mais des accidents de la libération

J'ai fait un projet Xcode où j'ai fait des trucs de sécurité et ils m'ont demandé d'obscurcir les noms de méthodes

comme p> xxx pré>

J'ai fait une bibliothèque de caractères .framework de. Le projet (projet A) et l'inclus dans un autre projet (projet B). P>

mais quand je cours (projet B) avec une configuration de version de déverrouillage, il se bloque toujours comme. P>

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[SecurityClass a9328238]: unrecognized selector sent to class 0x337cc4'


6 commentaires

Qu'y a-t-il dans vos drapeaux de compilateur?


Est-ce que cela fonctionne dans la construction de libération sans noms de méthodes obscurcissés?


Qu'est-ce qu'ils disent de la sécurité par l'obscurité?


Cela fonctionne sans obfuscation.


Peut-être devriez-vous en dire plus sur la façon dont l'Obfuscation est utilisé - la façon dont vous montrez dans votre exemple, avec un #define immédiatement avant la définition de la méthode (dans un fichier .m) ne fera pas que Nom visible aux appelants (bien que ce n'est pas évidemment la cause de l'erreur que vous voyez, alors je soupçonne que vous condensez votre code)


Je ressens la même chose que @jeremyp. Tout cela n'a rien à voir avec la sécurité. Cela rendra un piratage légèrement plus difficile, mais il n'aura plus d'augmentation de la sécurité.


4 Réponses :


7
votes

Où avez-vous placé le #define pour obfuscation? Est-ce dans le fichier d'en-tête ( .h ) ou dans le fichier de mise en œuvre ( .m ) du cadre?

Pour que l'obfuscation soit efficace, elle doit être placée dans un fichier à la fois inclus par la mise en œuvre et l'appelant.

Vous pouvez également vérifier que le prétraitement est correct en inspectant le fichier pré-traité. Sélectionnez le fichier de mise en œuvre et accédez au menu Produit> Générer une sortie> Générer un fichier prétraité (vous pouvez sélectionner la configuration en bas de l'écran).


1 commentaires

L'affichage du résultat pré-traité est également possible via l'éditeur d'assistant.



1
votes

Il semble que l'exécutable qui importe le cadre obscurcier essaie d'accéder aux méthodes non obscurcées.

Vous devriez vérifier les symboles dans le cadre. Utilisez nm sur la bibliothèque statique dans le cadre pour voir les symboles exportés (marqués d'un "T"). Assurez-vous que les symboles sont obscurcissés.


0 commentaires

2
votes

My Hunch est le #define code> Emplacement / Visibilité également.

Mais vous voudrez peut-être considérer cela sous un autre angle. Vous pouvez modifier: p> xxx pré>

à: p> xxx pré>

déposer #define code> totalement. P>

en utilisation: P>

SecurityClass_LogIn();
…


0 commentaires

1
votes

Si vous avez tout emballé dans un cadre, avez-vous été assuré que les en-têtes appropriés sont exposés en dehors du cadre? Les en-têtes à l'intérieur d'un cadre ne sont pas exposés de la même manière que les fichiers normaux. Accédez à vos phases de projet > de construction, en bas à droite, vous devriez voir "Ajouter des en-têtes de copie" . Cela ajoutera une nouvelle section dans vos phases de construction. Dans cette section, cliquez sur les "+" et des en-têtes qui définissent vos noms de méthodes.


0 commentaires