2010-02-25 23 views
43

Je viens de terminer une bibliothèque en Objective-C que j'ai compilée en tant que bibliothèque statique pour la distribution.Décomposition des bibliothèques Objective-C

Je voulais savoir quelles sont les chances d'obtenir ce décompilé sont là.

  • Connaissez-vous un logiciel qui peut le faire?
  • Si oui, comment pourrais-je mieux me protéger?

EDIT: Mon lib statique est faite pour iPhone/ARM

je créé un algorithme qui, selon les certains paramètres de l'application, il peut fonctionner en tant que démo ou code complet. Vous initiez l'objet avec des variables X et déverrouillez la version complète. Je me demandais s'ils seraient en mesure de voir cet algorithme afin qu'ils puissent créer un générateur de clés.

+0

FYI, en demandant aux utilisateurs d'entrer un code pour utiliser la version complète des sons iffy pour une application iPhone.S'ils achètent le jeu complet sur l'App Store, il n'est pas nécessaire d'entrer un code. S'ils l'achètent en dehors de l'App Store, Apple ne sera pas heureux. – Chuck

+3

Merci, je ne parle pas des utilisateurs finaux mais des développeurs. [[myLib alloc] initWithMySecretKey: @XXX]] –

+0

Votre algorithme fonctionnera pour vérifier la clé; ils peuvent voir les instructions (comme la machine, il doit connaître les instructions pour l'exécuter), puis ils peuvent le voir et développer un générateur. – JHG

Répondre

58

Il n'est pas clair ce que vous essayez de vous protéger de. Oui, il peut être inversé. L'outil le plus simple est otool, une partie de la distribution des développeurs standard:

otool -tV <library> 

A partir de ce qu'ils courent jusqu'à des choses comme IDA Pro, qui a le soutien et l'iPhone est très agréable pour ce genre de travail. Entre les deux, je suis vraiment surpris que je n'ai pas encore vu de refonte de otx pour iPhone/ARM. Je ne serais pas surpris d'en voir apparaître un par la suite. Et bien sûr, il y a gdb si vous essayez de comprendre comment les choses évoluent et quelles sont les données à différents points.

Si vous avez plus de détails sur ce que vous essayez de vous protéger, il peut y avoir des réponses ciblées. Au-delà, lisez les commentaires de Chuck.

+1

Merci Rob, cela a été très instructif. J'ai ajouté plus d'informations sur ce que j'essaie de protéger. –

+2

Je vois l'édition. Pour votre question, oui, avec un débogueur, ils seront en mesure de créer un générateur de clé. Mais ils ne vont pas déranger. Ils vont simplement modifier le binaire pour passer la vérification des clés. Ne t'en fais pas trop. Si votre bibliothèque est si populaire que les gens prennent la peine de créer de fausses clés, alors c'est assez populaire que vous ferez beaucoup d'argent de toute façon. Inquiétez-vous quand vous roulez dans toute cette pâte. Si vous perdez votre temps sur l'obfuscation (ce qui n'aidera pas beaucoup), alors vous n'aurez jamais assez de temps pour faire le produit génial que n'importe qui achètera de toute façon. –

+1

Dans tous les cas, je recommande de construire des versions séparées plutôt que d'utiliser une clé. Lorsque les gens paient pour cela, envoyez-leur la version complète. Moins de choses à se tromper de cette façon, moins de ballonnement de code, beaucoup plus difficile à briser par les gens au hasard (parce qu'ils n'auront pas le code complet). –

5

ChanceGetsDecompiled = ExpectedGainFromBeingDecompiled/PopularityOfLibrary

Eh bien, si vous voulez vraiment savoir, je voudrais essayer décompilation votre auto. Vous ne dites pas si c'est pour PPC, Intel ou ARM qui fait la différence. Voici un décompilateur pour Intel i386 Decompiler

Je ne sais pas ce que vous pourriez faire (je ne pense pas qu'il y ait beaucoup) pour limiter cela. Le code peut toujours être inversé. Soyez heureux de ne pas utiliser java ou .net. Leur décompilation est si belle.

+0

Salut Jamone, merci pour votre message. En fait, la bibliothèque que j'ai créée est pour le SDK iPhone. –

+0

Le lien fourni est cassé –

+0

lien Mise à jour: http://www.ohloh.net/p/i386codedump –

80

S'il s'exécute, il peut être décompilé. Objective-C est particulièrement facile à décompiler en code lisible grâce à ses fonctionnalités dynamiques. Si vous voulez rendre les choses un peu plus compliquées, vous pouvez écrire la plus grande partie de votre code en langage C et dépouiller l'exécutable - ce qui, bien sûr, a le mérite de rendre la conception de votre application plus difficile à gérer. Mais soyez honnête avec vous-même: si quelqu'un veut casser votre code, vous ne serez pas en mesure de l'arrêter. Les craquelins ont un temps et un enthousiasme pratiquement illimités et seront réellement excités par les nouveaux efforts que vous déploierez pour les arrêter. Personne n'a encore fait de logiciel incontrôlable, et les plus grandes entreprises du monde ont essayé. Vous n'allez pas faire mieux qu'eux, surtout si vous avez besoin de poser des questions à ce sujet sur Stack Overflow. Prenez le temps que vous auriez mis à contrecarrer la décompilation et utilisez-le pour améliorer votre produit - cela aura un meilleur retour sur investissement.

+72

'Tu ne vas pas faire mieux qu'eux, surtout si vous devez demander à ce sujet sur Stack Overflow.' - Lol ... – Rodrigo

+4

"et sera réellement excité par tous les nouveaux efforts que vous avez mis pour les arrêter" Lol ... Bien mis. – theKRAY

+0

Pouvez-vous s'il vous plaît me dire tout outil ou moyen utile pour décompiler la bibliothèque ios. J'extrais un fichier objet mais ce n'est pas utile parce que c'est binaire. Je veux le code source de la bibliothèque statique. ar -xv MyLib.a MyObj.o cette commande ne donne que le fichier binaire. comment puis-je extraire le fichier de classe de cela. –