protection des ressources
devulder
Membre
Bonjour,
Pour un projet, j'ai besoin de mettre des images dans les ressources.
Je voudrais eviter que l'utilisateur puisse les récupérer en fouillant dans le bundle de l'application.
Comment je pourrait faire pour les cryptés ?
Merci
Pour un projet, j'ai besoin de mettre des images dans les ressources.
Je voudrais eviter que l'utilisateur puisse les récupérer en fouillant dans le bundle de l'application.
Comment je pourrait faire pour les cryptés ?
Merci
Mots clés:
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Pour le chiffrement ça entend qu'il te faille la clef de déchiffrement au sein de l'application, donc coté sécurité on repassera. Tu peux éventuellement appliquer un truc bidon (ROT 13, inversion bit à bit) juste pour ralentir les mauvais sans perdre trop d'heure de boulot sur un truc qui sera simple à casser.
Pour les masquer, tu as la commande chflags pour les mettre réellement en hidden sur le file system ou tu peux aussi fournir toutes tes images sous forme de plist avec les ImageData en valeur d'un dictionnaire...
Encore une fois tout dépend du temps que tu veux y passer...
Un XOR en effet par exemple mais quitte à aller au plus simple, juste rajouter quelques octets bidons au début de tes fichiers (ou faire un XOR juste sur genre les 4 premiers octets des donnes de ton image suffira à la rendre illisible par double-clic ou autre, tout en restant simple pour toi dans l'application à récupérer les NSData d'origine sans avoir à déchiffrer tous les octets dans le sens inverse.
j'ai trouvé une méthode:
Par contre, j'ai un doute concernant
Si je testes avec une grande image d'une taille d'un mégaoctect, ca risque pas de deborder de la pile ?
Faudrais pas mieux faire une allocation via malloc par exemple ?
dans les ressources j'ai "fond1.png" que dans le projet xcode je renomme ".fond1.png"
Puis je corrige son utilisation en ajoutant le point:
NSImage *aufond = color=#4B0082]NSImage imageNamed:[/color][color=#FF0000]@".fond1"[/color ;
Je recompile et je constate que tout marche comme avant et que dans les ressources du bundle l'image n'est plus visible.
Bien sur c'est très simple à contourner, mais c'est très facile à faire.
Donc, ça plus une bidouille sur deux ou trois octets devraient en décourager plus d'un.
1) L'algo de ROT13 n'intervient que sur les lettres A-Z/a-z et sur aucun autre octet. Pour une image, ce n'est pas trop adapté, tu interprètes des octets comme des lettres alors qu'ils n'en sont pas (et risque de perdre des octets si tu ne choisis pas un bon encodage de texte pour ta conversion NSData/NSString, ce qui d'ailleurs est le cas dans ton algo puisqu'il choisit l'encodage ASCII rien que pour travailler sur la chaà®ne C)... Bref, tout ce qu'il faut pour risquer de perdre des données en route.
Pourquoi ne pas plutôt directement intervenir sur les NSData, et choisir un algo de chiffrage plus adapté aux données binaires que ROT13 qui chiffre des messages textes
2) En effet le code alloue un buffer de la taille de ta NSString. Si en lieu de NSString tu as les octets représentants ton images, interprétés en NSString (avec le risque de perte), cette taille risque d'être conséquente, et ton empreinte mémoire risque de faire un sacré bond !
Donc là encore, je répète qu'un ROT13 est vraiment inadapté, et que travailler avec des NS(Mutable)Data directement serait quand même 10x mieux, et qu'en plus pour éviter les pics de mémoire, ne travailler que les premiers octets peut amplement suffir (cela suffit pour rendre l'image illisible, tout en évitant de s'obliger à travailler avec la totalité des données de ton image en mémoire)
Cette discussion m'intéresse.
Quelle serait la meilleure méthode (et assez simple si possible) pour protéger un PDF et non une image ?
(sans passer par un mot de passe intégré au PDF, et sachant que ces PDF vont être téléchargés "en clair")
Bref, juste le rendre illisible par double-click.
Tu pensais à quoi de plus ?
Je ne m'y connais pas du tout dans ce genre de protection (XOR), je vais essayer de trouver de la doc.
Tu as un bloc d'octets, tu le parcours, et pour inverser tous les bits d'un octet, tu écris:
L'opérateur ~ (NON) complémente les bits de l'opérande, c'est à dire qu'il met les 0 à 1, et les 1 à 0.
De fait, en inversant les bits, le fichier est illisible, mais on peut facilement revenir à l'origine en appliquant le même traitement.
Consulte la table de vérité de l'opérateur OU exclusif. Tu verras que lorsque deux bits sont à 1, le résultat est complémenté.
De fait, tu peux rendre la chose plus difficile à déchiffrer:
55 h = 0101 0101 b
Ainsi, seul un bit sur deux est complémenté. Tu peux évidemment choisir une autre valeur que 0x55.
Ensuite, on peut imaginer plein de trucs: travailler sur plus d'un octet, faire des décalages de bits, etc.
ça n'arrêtera pas un hacker expérimenté, mais le couillon moyen, si.
Oui, c'est ça je veux arrêter le "couillon moyen", pas le hacker. ;-)