En Objective C, comment puis-je obtenir une somme de contrôle pour un dossier OSX et son contenu (qui peut également avoir plusieurs sous-dossiers)? De préférence, j'aimerais obtenir la valeur sha512.Comment puis-je obtenir une somme de contrôle de dossier OSX dans Objective C?
Dans Bash, je peux le faire comme ceci:
find /tmp/examplefolder -type f -print | xargs cat | shasum -a 512
... Cependant, on peut remplacer la commande shasum
avec leur propre version et défaire ce que je suis en train de faire.
CONTEXTE:
J'utilise le widget OSX natif webkit pour l'interface graphique de mon application OSX. Cela tire de file://
sur un dossier appelé MyApp.app/Resources/html
. Pour résister à certains virus hacking malveillants MyApp.app
, je prévois d'avoir un info.plist
avec une valeur sha512 dedans (qui sera cryptée bien sûr). Lorsque l'application démarre, elle calcule la valeur sha512 de MyApp.app/Resources/html
, puis la chiffre de la même manière que ma valeur info.plist
, puis compare les deux valeurs pour voir si elles sont identiques. Sinon, l'application a été compromise. Je vais alerter l'utilisateur avec une boîte de dialogue et fermer l'application.
Questions répondues
Q1. Ne devra-t-il pas être crypté d'une manière ou d'une autre pour empêcher la falsification de la valeur sauvegardée dans Info.plist? - mipadi
A1. Oui, avant de stocker dans Info.plist, il sera crypté. Je l'ai dit ci-dessus. Je peux gérer l'étape de cryptage en utilisant la bibliothèque Crypto.
Q2. Les fichiers de l'application (répertoire de ressources) n'ont pas d'autorisations d'écriture. Si vous cryptez vers où allez-vous enregistrer la clé de cryptage? - zaph
A2. Au moment de la compilation, dans les étapes de compilation, je vais avoir un script Bash calculer la somme de contrôle sha512, le chiffrer, et mettre à jour le Info.plist.
Q3. Si les fichiers de l'application ne peuvent pas être écrits, à quoi sert la somme de contrôle? - mipadi
A3. Mon application ne réécrit pas dans le dossier Resources/html. Il stockera l'état de la session à l'aide de la stratégie de paramétrage par défaut que Apple encourage pour toutes les applications. Au lieu de cela, ce que je crains est un virus qui infecte le dossier Resources/html, en le remplaçant par de mauvaises choses, et fait apparaître l'application comme normale mais qui fait quelque chose de dangereux en arrière-plan. C'est là que la somme de contrôle peut aider - elle peut aider à empêcher la falsification après l'installation de l'application.
Q4. J'ai supposé que le demandeur n'utilisait pas la signature de code (pour une raison quelconque), puisque la signature de code couvre déjà ceci. - mipadi
A4. Si vous demandez pourquoi je ne me fie pas uniquement à la signature de code, c'est parce que, après que l'application a été marquée comme approuvée, le virus peut entrer dans le dossier Resources/html et provoquer des dégâts. C'est pourquoi j'ai besoin du mécanisme de checksum lors du démarrage de l'application.
Le calcul du shasum du fichier sera suffisant. Et cette réponse de pile couvre probablement ce que vous essayez de faire: http://stackoverflow.com/questions/6228092/how-can-i-compute-a-sha-2-ideally-sha-256-or-sha-512 -hash-in-ios –
@CliffRibaudo J'ai besoin de cela sur tous les fichiers dans le dossier, pas seulement un fichier. Y a-t-il une routine pour le faire récursivement? – Volomike
Votre ensemble d'applications est-il signé (à l'aide de l'outil 'codesign')? – mipadi