[Sécurité] Empêcher son app d'être crackée.

Human-BehindHuman-Behind Membre
10:20 modifié dans API UIKit #1
Bonjour à  tous,

Alors voila j'ai mis ma premiere application sur l'appstore (il ne reste plus qu'a attendre que apple la valide). Mais j'ai deux petites questions qui me trottent dans la tête, la premiere est :

Est-il possible d'empecher son app d'être crackée, ou du moins de rendre le cracking difficile ?

La deuxieme question qui en découle :

Rendre le cracking difficile n'est- il pas une perte de temps, car quand on voit que les grand major de la distribution style EA se font cracker des jeux (ex : les sims 3) dés la sortie on peut se poser des questions quand à  l'efficacité de la sécurité mis en place ?

Tout liens, documents sur le sujets m'interesseront (qu'ils soient en english ou en french).

Merci d'avance et have a good day !

Réponses

  • MAGEMAGE Membre
    10:20 modifié #2
    Je n'ai pas les connaissance techniques, mais je pense que tu as répondu à  la deuxième question.

    Sur ce point, je suis complètement d'accord. Il n'y a pas de moyen valide pour empêcher le piratage. Donc, je serai plutôt d'avis de peser sur la validité de ton application avec un pris correct. Sachant qu'il y aura toujours des profiteurs et que les app qui se font vite pirater sont aussi celle qui se vendent bien.

    Moi je ne perdrais pas mon temps avec ça.
  • tabliertablier Membre
    10:20 modifié #3
    Je ne suis pas un spécialiste de la chose, mais je sais que:
    1- Tout les chateaux forts ont été pris! je dis bien: tous!
    2- "ce que j'imagine, un autre pourra le réaliser" Jules Verne!

    Donc il n'y a aucun remède miracle. Suivant la complexité du vérrouillage et le nombre de gens qui trouve ton programme intérressant, les clés seront déterminées dans un temps plus ou moins long.
    Il me semble qu'il y a des éditeurs qui vendent des solutions de vérrouillage.
  • muqaddarmuqaddar Administrateur
    10:20 modifié #4
    Moi je pars souvent du principe que ceux qui piratent ne l'auraient pas acheté de toute façon... ;)
  • AliGatorAliGator Membre, Modérateur
    10:20 modifié #5
    Y'a pas de secret : il faut trouver le bon compromis entre une validation/sécurité et la complexité d'implémentation.

    - Pour une appli simple sans prétention, ce n'est pas forcément utile de mettre une protection, plus de soucis qu'autre chose.
    - Pour une appli qui pense avoir un peu de succès mais sans prétendre avoir un succès fou, une petite protection simple est utile. Dans ce cas pas la peine de prévoir une sécurité super complexe à  craquer car ça va te prendre beaucoup de temps à  développer pour pas grand chose
    - Pour une appli vouée à  un gros succès (grosses entreprises déjà  connues, etc), une grosse protection peut être utile, car plus elle est compliquée plus ça va décourager les pirates du dimanche, mais en gardant à  l'esprit que de toute façon y'a les pirates "experts" qui maitrisent toutes les techniques et finiront par cracker l'appli.

    Au final si tu passes 2 mois à  mettre au point un système pour protéger ton appli d'une façon que tu penses super costaud... et qu'elle a du succès, donc va être le crible des pirates expérimentés, et risque d'être quand même craquée au bout de 2 mois, avec limite un patch ou un code que les pirates vont alors fournir sur le web à  tout le monde... Tu vas voir 2 mois de boulot anéantis en peu de temps.

    Donc c'est pas non plus la peine de se tuer à  la tâche pour ça. Une protection minimale est bien souvent plus adaptée du coup, ça décourage juste Mme Michu ou le pirate du dimanche qui ne sait que modifier une valeur dans un fichier caché pour déverrouiller une appli, mais tu pourras rien d'autre face aux pirates expérimentés de toute façon, alors...
  • apocaalypsoapocaalypso Membre
    10:20 modifié #6
    Moi j'ai essayé de protéger mon application avec un moyen simple mais je n'ai pas réussi à  le faire fonctionner.

    Le principe est le suivant :
    - la première fois que l'utilisateur lance l'appli, j'écrit son UDID dans un fichier texte
    - à  chaque fois que l'utilisateur lance l'appli, je vérifie que son UDID correspond bien à  celui du fichier et si oui on lance l'appli.

    Comme la plupart du temps, les iPhone jailbreaked crack les appli et les upload sur des serveurs où tous les autres peuvent les téléchargées. Avec ce moyen, l'appli de l'utilisateur 1 qui va être téléchargée par l'utilisateur 2 aura le fichier contenant le UDID de l'user 1, et en comparant on verra que ce n'est pas le bon.
  • juin 2009 modifié #7
    dans 1245767900:

    Moi j'ai essayé de protéger mon application avec un moyen simple mais je n'ai pas réussi à  le faire fonctionner.

    Le principe est le suivant :
    - la première fois que l'utilisateur lance l'appli, j'écrit son UDID dans un fichier texte
    - à  chaque fois que l'utilisateur lance l'appli, je vérifie que son UDID correspond bien à  celui du fichier et si oui on lance l'appli.


    Comme la plupart du temps, les iPhone jailbreaked crack les appli et les upload sur des serveurs où tous les autres peuvent les téléchargées. Avec ce moyen, l'appli de l'utilisateur 1 qui va être téléchargée par l'utilisateur 2 aura le fichier contenant le UDID de l'user 1, et en comparant on verra que ce n'est pas le bon.



    Bha fait vite une mise à  jour qui retire ça... parce que si je m'achète un nouvel iPhone.. j'aurai une UDID différente.. et je pourrai plus utiliser ton application alors que je l'ai acheté..
    Et franchement avec toutes les apps qui circulent sur l'app store... les hackers auront pas forcément vu passer ton appli.
    Si elle rencontre un succès fou, tu t'en devrais t'en fiche totalement parce que le nombre de personne qui ont jailbreaké l'iPhone n'est pas si élevé que ça comparé à  ceux qui ont un iPhone "propre".

    Pour mon premier shareware sur Mac j'avais fait une sécurisation de fou.. meme si y'avait des cracks, aucun d'eux ne marchaient.. et pourtant pour mon prochain j'ai mis une sécurisation vraiment bas niveau, juste parce que sur Mac il en faut forcément une.. mais sur iPhone jamais je m'embêterai avec ça, jamais!
  • tabliertablier Membre
    10:20 modifié #8
    - la première fois que l'utilisateur lance l'appli, j'écrit son UDID dans un fichier texte
    - à  chaque fois que l'utilisateur lance l'appli, je vérifie que son UDID correspond bien à  celui du fichier et si oui on lance l'appli.


    Le pirate, même pas très malin, livrera avec l'appli un 'générateur de code' qui remplacera directement dans le fichier texte l'UDID présent par l'UDID de l'utilisateur 2. C'est évident! Il suffit de se balader sur les réseaux pour trouver ce genre de code.

    Je connais bien plus compliqué! avec le n° MAC de la machine, le nom de l'utilisateur et la date, le programme calcul un code à  téléphoner au fabricant. Celui-ci renvoi immédiatement le code à  entrer dans les 24h pour valider l'utilisation du programme! Le tout basé sur l'utilisation de 2 polynomes à  12 composantes dont les coéfficients sont pris dans les données citées ci-dessus pour le premier et dans la clé renvoyée par le fabricant pour le 2ième. A chaque lancement un algorithme vérifie l'égalité entre les deux calculs, sachant que les 2 résultats évoluent avec la date du jour!
    Eh bien le pirate a juste inversé le test en sortie ('Branch if equal' en 'branch if non equal') et n'importe quel code était déclaré bon! Donc, un simple patch était suffisant.
    Cette exemple date de 8 ans!
  • 10:20 modifié #9
    dans 1245780006:

    - la première fois que l'utilisateur lance l'appli, j'écrit son UDID dans un fichier texte
    - à  chaque fois que l'utilisateur lance l'appli, je vérifie que son UDID correspond bien à  celui du fichier et si oui on lance l'appli.


    Le pirate, même pas très malin, livrera avec l'appli un 'générateur de code' qui remplacera directement dans le fichier texte l'UDID présent par l'UDID de l'utilisateur 2. C'est évident! Il suffit de se balader sur les réseaux pour trouver ce genre de code.

    Je connais bien plus compliqué! avec le n° MAC de la machine, le nom de l'utilisateur et la date, le programme calcul un code à  téléphoner au fabricant. Celui-ci renvoi immédiatement le code à  entrer dans les 24h pour valider l'utilisation du programme! Le tout basé sur l'utilisation de 2 polynomes à  12 composantes dont les coéfficients sont pris dans les données citées ci-dessus pour le premier et dans la clé renvoyée par le fabricant pour le 2ième. A chaque lancement un algorithme vérifie l'égalité entre les deux calculs, sachant que les 2 résultats évoluent avec la date du jour!
    Eh bien le pirate a juste inversé le test en sortie ('Branch if equal' en 'branch if non equal') et n'importe quel code était déclaré bon! Donc, un simple patch était suffisant.
    Cette exemple date de 8 ans!


    Haha excellent :D
    Et puis oui, comme je l'ai appris, c'est toujours le jeu du chat et de la souris.. le truc qui emmerde bien les utilisateurs (même les utilisateurs pirates), c'est de pas pouvoir faire des mises à  jour tranquillement. Une banlist dans une NSArray est pas plus mal :D (je parle toujours sur Mac :p )

    Par contre en te relisant, apocaalypso, je me rend compte que j'ai peut-être dit une bêtise?
    Si j'ai bien compris, tu écris un nouveau fichier avec l'UDID de l'utilisateur, dans le bundle de l'application? (d'ailleurs je pensais pas que c'était faisable ça d'écrire dans le bundle de l'app sur iPhone.. déjà  que c'est déconseillé sur Mac.).
    Si c'est bien ça, ce que j'ai dis est faux puisqu'avec iTunes & l'iPhone je doute qu'il y est une synchronisation des modifications d'une application (mise à  part si elle a été mis à  jour). Donc si j'achète un nouvel iPhone, j'aurai bien ton appli toute neuve sans être traité de pirate :p
    Donc désolé si j'avais mal compris
  • AliGatorAliGator Membre, Modérateur
    10:20 modifié #10
    dans 1245780006:

    Eh bien le pirate a juste inversé le test en sortie ('Branch if equal' en 'branch if non equal') et n'importe quel code était déclaré bon! Donc, un simple patch était suffisant.
    Cette exemple date de 8 ans!
    Oui alors c'est un grand classique de simplement remplacer l'instruction de test BEQ par BNE, et l'exemple en effet le plus flagrant qui montre à  quel point pas mal de protections peuvent être obsolètes... Du coup la meilleure des protections possibles est bien souvent... un esprit tordu :P A savoir faire du code incompréhensible (même une fois compilé et optimisé par le compilo) au point que même le pirate regardant pas à  pas le déroulement du programme assembleur ou décompilé aura du mal à  s'y retrouver. Ca l'empêchera pas de trouver, mais il va avoir un peu plus à  se creuser la tête.

    Maintenant je ne suis pas sûr que ton exemple marche pour iPhone.
    - Bon déjà , même si c'est pas infaisable, faire du step by step sur un device (comme l'iPhone) et non sur un ordi (comme le Mac), c'est à  dire auditer un exécutable qui se trouve sur une autre machine depuis une première machine, c'est moins pratique. Rien ne l'empêche, on peut bien faire du debug sur l'iPhone, mais bon c'est juste un peu plus casse-c....tête.
    - Mais surtout, les applications iPhone sont signées. Et cette obligation n'est pas anodine de la part d'Apple d'ailleurs puisque ça leur permet aussi de vérifier l'intégrité des applications, et donc aussi qu'on ne peut pas modifier une application après coup, ce qui pourrait permettre de faire valider une appli pour la mettre sur l'AppStore...et la modifier ensuite à  la volée.

    Bon, après, sur un iPhone Jailbreaké, je connais pas tous les détails, le CodeSigning est peut-être désactivable ? Mais en tout cas à  mon avis c'est une sécurité en plus limitant les possibilités de modification d'une appli, non ?
  • tabliertablier Membre
    10:20 modifié #11
    Oui mon exemple date de 8 ans environ et est obsolète, c'est sur! Je connais d'autre méthodes dont le coef de sécurité est bien meilleur. Ce que j'ai voulu montrer c'est que quelque soit la méthode de vérouillage, elle a très souvent une faille de sécurité quelque part!
      :P D'ailleurs, s'il existait une méthode sure, tout le monde l'emploierait et les pirates seraient au chomâge!
  • DrakenDraken Membre
    10:20 modifié #12
    Le sujet est important, en effet. Quelqu'un a-t-il des chiffres sur le taux de piratage des applications iPhones ?

    Sinon, je me demande si l'AppStore vérifie la légalité des applications, lors de l'utilisation du Store Kit.

  • apocaalypsoapocaalypso Membre
    10:20 modifié #13
    dans 1245793861:

    Le sujet est important, en effet. Quelqu'un a-t-il des chiffres sur le taux de piratage des applications iPhones ?

    Sinon, je me demande si l'AppStore vérifie la légalité des applications, lors de l'utilisation du Store Kit.


    Je sais pas, pour cracker une app il est nécessaire d'avoir un iPhone jailbreaké, or il n'y a que les personnes s'y connaissant un tant soit peu qui ont recours à  ça. Je me rappelle d'un post de iPhon.fr qui faisait un pourcentage iPhone Jailbreaké/non jailbreaké et le résultat était assez clair : < 90 d'iPhone non jailbreakés.
  • zoczoc Membre
    10:20 modifié #14
    dans 1245782193:
    Bon, après, sur un iPhone Jailbreaké, je connais pas tous les détails, le CodeSigning est peut-être désactivable ?


    Il est désactivé...
  • yodarkyodark Membre
    10:20 modifié #15
    Pour répondre à  Human-Behind

    Il y a un post très intéressant qui parle du taux de piratage de solutions etc ici
    http://www.icombatgame.com/2009/05/08/my-experience-getting-owned-by-app-store-pirates/#more-609

    Il y a une mention d'une technique qui semble simple et performante

    http://thwart-ipa-cracks.blogspot.com/2008/11/detection.html

    Mais je n'ai jamais essayé.

    De manière personnelle je pense pas que le piratage soit vraiment un grand mal (surtout pour des développeurs peu connus), ça fait connaitre l'application (augmente le page rank...) etc. et au final surement les ventes aussi
  • Human-BehindHuman-Behind Membre
    10:20 modifié #16
    Merci à  tous pour vos réponses. Compte tenu que je vendrai mes app au prix le plus bas possible, c'est à  dire (0.79 €) pour me faire rembourser le prix de la licence, je ne vais pas mettre de protection à  mes app.

    Et aprés reflexion, je pense que yodark ne doit pas avoir tord :

    "yodark&quot a écrit:
    je pense pas que le piratage soit vraiment un grand mal (surtout pour des développeurs peu connus), ça fait connaitre l'application (augmente le page rank...) etc. et au final surement les ventes aussi
Connectez-vous ou Inscrivez-vous pour répondre.