Oyé oyé,
Je sais que cet article ne sera pas lu par une grande majorité des lecteurs, je m’en excuse d’avance, mais les faces cachées de Windows me manquaient tant…
Aujourd’hui, je vais vous montrer comment le petit bijou qu’est Windows prend en charge les exécutables .NET. Cela fait un moment que je me demandais comment Windows reconnaissait les exécutables .NET et surtout comment il gérait la CLR (Je me pose trop de questions, je sais…). J’en avais quand même une petite idée…
Un petit rappel rapide, tous les fichiers exécutables Windowsiens respectent un certain format PE/COFF. Pour les plus intéressés, vous trouverez les spécifications de ce format à cette adresse : http://www.microsoft.com/whdc/system/platform/firmware/PECOFF.mspx. En lisant ces spécifications, on tombe sur un champ dans le HEADER DATA DIRECTORIES qui nous plait bien :
| 208/224 | 8 | CLR Runtime Header | The CLR runtime header address and size. For more information, see section 6.10, “The .cormeta Section (Object Only).” |
On apprend que ce champ contient l’adresse et la taille de l’entête de la CLR et surtout que cette structure n’est pas documentée. Hop, je saute sur un explorateur de fichier PE, j’ai choisi CFF Explorer.
Comme prévu, le fichier respecte bien le format PE. Allons jeter un coup d’œil du coté de l’HEADER DATA DIRECTORIES.
On retrouve bien la RVA et la taille de notre fameux .NET MetaData Directory, grâce à CFF Explorer on va pouvoir explorer cette structure sans trop de soucis.
On retrouve différentes informations comme par exemple la RVA des métadata, des ressources et plein d’autres choses. En fouillant, un peu plus, on tombe sur un arbre ( aïe, ca fait mal ! => [] ) :
On retrouve des choses sympathique, comme à quels types fait référence notre assembly et même a quelles méthodes de chaque type notre assembly fait référence. Sympa non ?
Voilà, c’est déjà fini. Comme vous pouvez le voir, le format PE a été adapté au besoin du .NET, vous savez maintenant comment Windows reconnait un exécutable .NET.
J’espère que cette courte présentation de la face cachée du .NET vous a plus, si c’est le cas, poster un petit commentaire, pour que je puisse savoir s’il y a un vrai intérêt que je rédige des articles sur ce domaine. À vous de choisir, il reste beaucoup de choses à voir, comme l’architecture d’un processus .NET, l’injection de code dans le JIT, Profiling API…
See u soon.









Continue
par contre évite les « surtout pas compris par une grande majorité des lecteurs » :-/
Désolé, c’est corrigé, la raison est que le post final n’a pas vraiment pris la tournure que je voulais. Je voulais faire un post sur le reverse de ZwCreateProcess pour voir où Windows faisait la différence entre l’exécutable .NET et Win 32
Et je sais que l’assembleur n’est pas à la mode donc pas compris de beaucoup de monde malheureusement. Voilà le sens de ma phrase d’origine et en aucun cas un autre sens
En tout cas merci beaucoup pour le commentaire
À bientôt !
Plus d’articles de ce genre serait la bienvenue
Tes travaux post-dotnet étaient très intéressants aussi.
Btw, l’asm c’est la vie.
Merci beaucoup du compliment, je finis mon tutoriel sur Windows Mobile 6.5 puis je pense réaborder des sujets post-dotnet comme tu le dis si bien.
Eh oui, l’asm c’est la vie… Mais malheureusement c’est pas le futur….
Ça dépend dans quel domaine
Si tu t’orientes vers une carrière RCE (protection software et/ou analyse de malwares) tu ne peux t’en passer (ça tu le sais, je le dis pour la forme). Mais après en effet l’ASM n’est clairement pas destiné à du dev d’applications classiques en entreprise ce qui est apparemment le domaine dans lequel tu souhaites te lancer maintenant.
En effet, l’Asm est très utile pour une carrière RCE. Par contre, je ne souhaite pas particulièrement faire du développement d’applications classiques plus tard, mais faire une carrière RCE en France me semble compromis et apparemment je ne suis pas le seul à le penser.
Enfin, même si je n’en parle pas beaucoup sur ce blog, ma passion est toujours la sécurité informatique, j’essaye de m’adapter au goût du jour, je pense que dans une dizaine d’années les applications .NET auront surement pris le pas sur les applications natives dans le domaine grand public, ce sera donc un bon point de connaitre les applications .NET.
En tout cas, j’ai toujours espoir de faire une carrière dans le domaine de la sécurité informatique mais bon… L’avenir me le diras