2010-12-07 27 views
8

Certaines réponses ont indiqué que les informations de débogage faciliteraient l'ingénierie inverse du logiciel. Lorsque j'utilise Visual C++ et distribue un exécutable avec des informations de débogage mais sans autres fichiers (.pdb), contiendra-t-il des choses intéressantes?Comment une construction de débogage rend-elle le reverse engineering facile?

J'ai regardé l'exécutable avec un éditeur hexadécimal et n'ai rien trouvé comme des noms de symboles, pour l'instant, je suppose que le fichier .exe contient juste des liens vers des informations dans les fichiers .pdb, non?

Savez-vous si elle contient

  • noms de variables?
  • noms de fonctions/membres?
  • numéros de ligne?
  • quelque chose d'intéressant?

Répondre

9

Les builds de débogage ont tendance à générer une sortie qui peut facilement être corrélée avec des constructions de langage de haut niveau. Vous pouvez identifier les variables, les tests, les boucles, etc., simplement en regardant le code machine. Vous n'aurez pas de noms de variables, mais c'est généralement l'une des considérations les moins importantes lors de l'ingénierie inverse. Le code optimisé, OTOH, réorganise les instructions, déploie les boucles, réutilise les emplacements pour plusieurs variables, partage des blocs de code entre les fonctions, inline de petites fonctions et ainsi de suite, ce qui rend plus difficile le discernement de l'intention originale. Cela rend également plus difficile le débogage, même si vous possédez le code, car le marqueur de ligne actuel est souvent très trompeur, et les variables ont tendance à disparaître ou à afficher des conneries aléatoires. Cependant, rien de tout cela ne rend l'ingénierie inverse impossible. C'est juste plus de travail pour démêler le sens.

2

L'exécutable ne doit pas contenir de noms de variables ni de numéros de ligne. Il peut contenir des noms de fonction/membre, pour les noms exportés (plus probablement pour un lib/dll qu'un exe).

La structure du code coderez ressembler à la source d'origine « plus près » - il est peu probable que le code aura été inline, des déclarations avaient réorganisées, avait des boucles déroula, etc.

5

Construire avec le débogage ISN d'information 't "debug build". "Debug build" est une telle construction lorsque le symbole _DEBUG est défini. Si c'est le cas, il y a beaucoup de chaînes utiles pour le reverse-engineering (asserts, etc). Donc, vous pouvez faire en sorte que Release build avec les informations de débogage dans .pbd, et décompiler le programme sera aussi difficile que sans informations de débogage.

1

Il y a longtemps, les informations de débogage étaient attachées à l'exécutable (au format CodeView). Ces jours-ci, il vient principalement séparément dans les fichiers PDB. L'exe lui-même ne comprend en effet qu'un lien vers la PDB.

Les PDB sont généralement proposés en deux versions: privée et publique (également dénudée). Public (par exemple ceux fournis par Microsoft) ont généralement seulement les noms des fonctions et des variables globales. Les données privées (par exemple celles générées lors de la création de votre application avec des informations de débogage) peuvent également inclure des informations de type (structures, énumérations, classes, types de variables), des prototypes de fonctions, des noms de variables et des numéros de ligne.

Si vous souhaitez examiner vos PDB, vérifiez DIA2Dump dans le dossier "DIA SDK" de votre installation de Visual Studio.

+0

+1 Les informations sur le fichier PDB étaient utiles – Martin

1

Les optimisations rendent le code plus difficile à comprendre (et rendent également plus difficile la corrélation entre la source et l'assemblage lors du débogage de votre propre code avec des symboles et des sources).

Une version de débogage n'inclut pas les numéros de ligne, les noms de fonction ou les numéros de ligne, ceux-ci appartiennent à la PDB. Cependant, chaque fois que vous utilisez assert(), le code inclut une chaîne contenant les noms de fichier et les numéros de ligne.