2009-11-06 13 views
0

Est-il arrivé qu'un programme (ou même l'OS lui-même) change le contenu du segment __TEXT d'un exécutable, pour une raison quelconque?OS X: Les sections du segment __TEXT sont-elles modifiées par d'autres programmes?

  • Remarque: Ici, je fais référence au segment "__TEXT", pas à la section "__text".

En d'autres termes: puis-je compter sur des octets dans le segment __TEXT de mon exécutable pour détecter si mon exécutable a été endommagé (par exemple en calculant une somme de contrôle sur ce segment), ou est-il une chance que je reçois des faux positifs parce que ce segment peut être modifié après que le programme a été installé sur l'ordinateur de l'utilisateur?

Merci!

Répondre

4

Les segments sont essentiellement une construction de mémoire virtuelle: ils sont généralement alignés sur les limites de la page, de sorte qu'ils peuvent finir par inclure un peu plus que le code de votre application. Étant donné que le segment __TEXT commence généralement au début d'un fichier Mach-O, cela inclut généralement les en-têtes Mach-O. Sous OS X 10.3 et versions antérieures, la pré-reliaison peut affecter le segment __TEXT (décrit en détail here). Dans les versions ultérieures, la signature de code peut également modifier le segment __TEXT.

Vous pouvez étudier le mécanisme de signature de code intégré d'OS X (la cause et la solution de votre problème?). Quelques références recommandées:

Vous pouvez trouver macholib utile dans l'exploration. (Il est inclus avec les versions récentes d'OS X pour supporter py2app.) Voici un script simple que j'ai utilisé pour extraire un segment __TEXT.

from macholib.MachO import MachO 

m = MachO('foo') 
__TEXT = (cmd for load_cmd, cmd, data in m.headers[0].commands 
      if getattr(cmd, 'segname', '').rstrip('\0') == '__TEXT').next() 
print '__TEXT segment: offset %x size %x' % (__TEXT.fileoff, __TEXT.filesize) 
f = open('foo', 'rb') 
f.seek(__TEXT.fileoff) 

open('foo__TEXT', 'wb').write(f.read(__TEXT.filesize)) 

Bien sûr, vous pouvez également utiliser otool -lv, mais la sortie est un peu désordonné et difficile à analyser.

+0

Merci Nicholas, c'est une réponse très documentée! Je vais enquêter tout ça dès que je serai de retour au travail. –

+0

Oui, la signature de code se produit, se produit essentiellement chaque fois que vous téléchargez une application et cliquez sur "Autoriser" sur le pop-up vous demandant si cela est sûr, est une cause fréquente de __TEXT changer. –