Vulcan, ou comment modifier des binaires quand bon vous semble

Posté par  . Modéré par Pascal Terjan.
Étiquettes : aucune
-1
21
déc.
2002
Technologie
Voici un article de MS Research sur Vulcan, un outil developpé pour permettre l'analyse et la modification de binaires de manière soit statique soit dynamique (en gros, vous pouvez modifier un soft de maniere arbitraire pendant qu'il tourne ou modifier l'executable sur disque).

Cet outil est déjà utilisé en interne chez Microsoft pour différentes analyses/optimisations sur les produits que l'on crée.

L'article est assez technique mais ne devrait pas etre completement obscur pour les non initiés.

Aller plus loin

  • # Re: Vulcan, ou comment modifier des binaires quand bon vous semble

    Posté par  . Évalué à 0.

    C'est génial pour les virus ça ! J'imagine qu'un portage GNU/Linux est sponsorisé par l'équipe MS? :))
    • [^] # Re: Vulcan, ou comment modifier des binaires quand bon vous semble

      Posté par  . Évalué à 10.

      C'est surtous genial pour les cracker et les moder de tous poils.
      Mais j'ai encore du mal saisire la difference fondamental, entre Vulcan et un Debugger avancé genre Softice ( puisqu'on parle d'environement windows je parle de debugegr windows, mais oui j'utilise GDB qui est trés bien ).

      Apres du coté non fondamental, mais sacrement pratique visiblement Vulcan ne recrache pas de l'ASM x86/i64 mais aussi du source celon le language de son choix ( parmis les langugaes MS ), pour les parties des applications codés en MSIL ( MicroSotf Intermediate Language, le pseudo language universelle qui sert de backend a tous les languages .NET ), vue que ces parties sont plus ou moin intepretés par le framework cela permet de modifier l'application pendant le debuggage sans recompilation, ce qui risque de sacrement simplifier et accelerer le debuggage des applications MSIL, apres pour les autres on reste sur un debugger classique, avec breakpoint, asm et recompilation.

      En gros c'est genial pour les applis codés en C#/.NET pour le reste du monde ce n'est qu'un debugger de plus.

      P.S. C'est ce que j'en ais compris apres je peux me planter
      • [^] # Re: Vulcan, ou comment modifier des binaires quand bon vous semble

        Posté par  . Évalué à 10.

        Vulcan te permet de modifier un executable qui en train de tourner, ou de modifier un executable sur disque au choix.

        Par exemple tu peux lancer des runs de ton soft dans differents scenarios, voir quelles sont les parties de code les plus utilisees, et modifier l'executable pour les rapprocher histoire d'avoir une meilleure utilisation des caches. Ca serait un exemple de modification d'un binaire sur disque.

        Un autre exemple c'est de pouvoir patcher un binaire pendant qu'il tourne, plus besoin de rebooter ou arreter ton service pour patcher, c'est fait pendant que le service tourne.
        Cet exemple c'est en fait ce qui va se passer dans .NET Server, il sera possible dans bcp de cas(pas tous) de patcher le kernel, les differents services, etc... sans rebooter, et sans arreter le service.

        Vulcan se cree au moment de la compilation une representation de l'executable, et ca lui permet de travailler apres sur cet executable, il sait ou est quoi, comment il peut modifier, etc...
        • [^] # Re: Vulcan, ou comment modifier des binaires quand bon vous semble

          Posté par  . Évalué à 6.

          Bon pour la premiére partie, debugger et mùodifier un exe en mémoire ou sur le disque pendant l'execution beaucoup de debugger le font déjà.

          Apres j'avais pas compris l'idée de patch ou de remplacement des binaires a chaud, j'avais cure que ce n'était qu'un concepete lancé en l'air comme but ultime a atteindre, pour la béte, mais en effet si cela ne penalise pas trop les performance global ( a quoi bon economiser 5 min d'uptime pour un charge CPU 10% superieur ) c'est vraiment revolutionnaire, des update sans arret de service.
          • [^] # Re: Vulcan, ou comment modifier des binaires quand bon vous semble

            Posté par  . Évalué à 0.

            GNU/Hurd le fait déjà depuis longtemps, dommage que cet OS ne soit pas encore à pleine maturité ...
            • [^] # Re: Vulcan, ou comment modifier des binaires quand bon vous semble

              Posté par  . Évalué à 3.

              Il est possible d'updater un service ou un demon, sans les relancer depuis quand sous GNU/Hurd ?
              • [^] # Re: Vulcan, ou comment modifier des binaires quand bon vous semble

                Posté par  . Évalué à 1.

                "c'est vraiment revolutionnaire, des update sans arret de service."

                Sous GNU/Hurd, il me semble, qu'on peut remplacer des partie de système sans arret de services. * Mais bon, je suis pas un pro en Hurd, si j'ai dis une gros c#ner#e la haut, je m'excuse, j'ai parlé trop vite :)


                * It is possible to develop and test new Hurd kernel components without rebooting the machine (not even accidentally). Running your own kernel components doesn't interfere with other users, and so no special system privileges are required. The mechanism for kernel extensions is secure by design: it is impossible to impose your changes upon other users unless they authorize them or you are the system administrator.
          • [^] # Re: Vulcan, ou comment modifier des binaires quand bon vous semble

            Posté par  . Évalué à 6.

            Ca ne penalise absolument rien en perf.
            Le kernel que tu as sur ta machine est un kernel "propre", sans aucune info non utile, par contre nous en interne on a a la compilation pris les infos sur le binaire, a quoi il ressemble, etc... et Vulcan grace a ces infos pourra patcher le binaire a chaud, le patch qu'on fournira contient toutes les infos necessaires pour que Vulcan fasse le boulot sur ta machine.
            • [^] # Re: Vulcan, ou comment modifier des binaires quand bon vous semble

              Posté par  . Évalué à 1.

              C'est pas trés flexible comme solution, il aurait put foutre les infos dans l'entéte PE ou autre des EXE, histoire que tous le monde puis modifier l'exe ( quoi que c'est peut étre pas le but recherché ... ), hum c'est de suite moin simpatique dans le cadre dun soft a release frequentes faut faire un patch et un systéme reconnaissance pour chaque version du binaires qui se balade dans la nature ...

              Je savais que c'était un peut trop beau.
              • [^] # Re: Vulcan, ou comment modifier des binaires quand bon vous semble

                Posté par  . Évalué à 0.

                Ben le truc est que sur Windows, personne d'autre que MS n'est sense modifier les binaires du systeme, il y a meme le SFP(system file protection) pour eviter que les gens ne modifient les binaires systemes.
                Resultat, il n'y a aucune raison d'avoir ces infos dans le binaire, ca ne fait que rajouter du poids inutile dans un binaire, grossir la place disque, ralentir le systeme a cause du merdoyage des caches,... sans aucune raison vu que personne a part MS n'en aurait l'utilite.

                Il faut bien voir que ce soft a ete developpe dans l'optique d'une utilisation par MS, notamment de par le fait qu'il n'est pas aise de creer un fix applicable "a chaud", il faut savoir exactement ce que fait le code pour decider si oui ou non le fix cree peut etre applique a chaud, et ca quelqu'un en dehors de MS ne peut pas le faire, et finalement nous on ne fait pas de releases frequentes, ce n'etait donc pas un critere de developpement pour le soft.
                • [^] # Re: Vulcan, ou comment modifier des binaires quand bon vous semble

                  Posté par  . Évalué à 2.

                  Je me doute bien, mais d'un coups le trucs passe du stade d'idée genial, a un bon systéme de patch pour les produit MS(tm), ce qui de suite est vachement moin glamour et limite vachement l'utilité de la chose et remet d'autent plus l'utilité de la new en question ( puisque visiblement les quelques personnes qui seront ammener a utiliser le bestio sont déjà au courant ).

                  <Troll> Bon ba j'ai plus de raisons de porter Apache en C# .NET </troll>
                • [^] # Re: Vulcan, ou comment modifier des binaires quand bon vous semble

                  Posté par  . Évalué à 2.

                  Hum, j'ai vite fais relue l'article , mais celon le principe enoncé il a pas l'air si mechant que cela le fix a chaud, il attende ou provoque le dechargement d'un partie du binaire pour le remplacer a la volé, avec un peut ou si le soft a été prevue pour cela, les parties critiques correspondent a une section ou a un fonction explortée.
                  En plus vue que c'est codé avec du MSIL, il doit pas faloir se forcer pour avoir une pletor de section et d'objet.
                  Ca me rappel une vieillie astuce de cracker qui consister a interchanger une DLL apres qu'elle est était verifié, plus ou moin a l'arache en mémoire et en modifient les pointeur de fichier sur la DLL cracké, sauf que la au lieu des DLL, ce sont directement des sections de binaires.

                  le cracking au service des produits MS, comme quoi le piratage et MS c'est une grande histoire :-)
    • [^] # Re: Vulcan, ou comment modifier des binaires quand bon vous semble

      Posté par  . Évalué à 4.

      Sans dec, s'aurait été bien d'avoir ca du temps de Netscape 4.. c'était limite gonflant, quand il freezait alors qu'on était en train d'écrire un post, de devoir grep-er /proc/kcore pour récupérer son message ;)

      Par contre, pour être plus sérieux, je m'étonne que ce genre d'outil ne soit pas interdit au pays de PBPG selon leur DMCA..
  • # Re: Vulcan, ou comment modifier des binaires quand bon vous semble

    Posté par  . Évalué à 10.

    Je pensais pas que je posterais un jour ce genre de commentaire, mais
    C'est quoi le rapport avec Linux ou les Logiciels Libres ? Pourquoi c'est pas dans la boite autre ? Je suis sur que si c'était pas VousSavezQui qui l'avait postée, elle y serait depuis longtemps..

    [si cette news est désormais dans la boite autre, merci de ne pas me scorer à -150 ;)]
  • # Commentaire supprimé

    Posté par  . Évalué à 3.

    Ce commentaire a été supprimé par l’équipe de modération.

    • [^] # Re: Vulcan, ou comment modifier des binaires quand bon vous semble

      Posté par  (site web personnel) . Évalué à 2.

      Recharchement de code, optimisation au runtime, langage intermediaire, ... SmallTalk devait deja faire ca (j'etais pas ne .. desole). Et tout le monde fait ca tous les jours avec la moindre Java Virtual Machine (meme parfois sans le savoir).

      http://java.sun.com/products/hotspot/docs/whitepaper/Java_Hotspot_v(...)

      En plein de gens travaillent pour que cela existe aussi en libre ;o)
      • [^] # Re: Vulcan, ou comment modifier des binaires quand bon vous semble

        Posté par  . Évalué à 0.

        Et si ton programme n'est pas ecrit en SmallTalk ou Java, tu fais comment pour l'updater/optimiser/... ?

        C'est ca que resoud Vulcan, il te corrige du code binaire a chaud, que ce soit du C/C++ ou autre n'est pas important.
        • [^] # Commentaire supprimé

          Posté par  . Évalué à 1.

          Ce commentaire a été supprimé par l’équipe de modération.

          • [^] # Re: Vulcan, ou comment modifier des binaires quand bon vous semble

            Posté par  . Évalué à 1.

            Il n'est pas question d'optimisation, les 2 sont possibles.
            Vulcan permet de modifier le code, tu peux donc:
            1) optimiser
            2) corriger
            3) etc...

            Il prend des infos a la compilation, et les utilise ensuite pour modifier le code de la facon dont tu le veux(tu decide et implemente l'optimisation, Vulcan n'est qu'un outil te permettant de modifier le binaire a ta guise)

            Sinon, on ne parle pas d'OO ici, tu peux modifier le binaire obtenu avec du C par exemple, et c'est d'ailleurs ce qui est fait dans Windows vu qu'il en contient une quantite enorme, bref, c'est un outil generique, qui ne demande pas un langage particulier au-dessus, etc...
            • [^] # Commentaire supprimé

              Posté par  . Évalué à 1.

              Ce commentaire a été supprimé par l’équipe de modération.

              • [^] # Re: Vulcan, ou comment modifier des binaires quand bon vous semble

                Posté par  . Évalué à 1.

                Non, ce qu'il faut a Vulcan, c'est savoir ou se trouvent les blocs, jumps, etc...

                Dans n'importe quel compilateur, tu as cette etape ou tu transformes en binaire, et c'est la qu'il se greffe.
                Vulcan ne depend pas du langage, il ne depend pas du fait que tel langage permet les fonctions virtuelles, ou autre feature. Il a juste besoin de connaitre la tronche de ton binaire au final, et quand je dis au final, ca veut dire une fois transforme en langage machine x86, IA64 ou MSIL.
      • [^] # Commentaire supprimé

        Posté par  . Évalué à 1.

        Ce commentaire a été supprimé par l’équipe de modération.

  • # Re: Vulcan, ou comment modifier des binaires quand bon vous semble

    Posté par  (site web personnel) . Évalué à 4.

    Déjà si on pouvait changer la config de windows sans devoir rebouer toute les 5 mins, cela serait déjà bien suffisant...

    En plus, le patch de binaire tournant, cela ne doit être possible que dans des cas bien précis, car l'application doit reprendre à des points connus au moment du basculement ancien/nouveau code. Si le patch est gros, si les structures de donné sont modifiées, j'ai un peu de mal à voir comment s'en sortir sans un gros reset (du soft) qui revient presque à un restart.

    "La première sécurité est la liberté"

    • [^] # Re: Vulcan, ou comment modifier des binaires quand bon vous semble

      Posté par  . Évalué à 0.

      La jolie petite pique du debut est sans rapport avec le schmilblick, mais bon passons...

      Effectivement, on ne peut pas le faire dans tous les cas, tu peux pas remplacer 90% du code a chaud ou grossir des structures existantes, etc... c'est infaisable.

      Par contre des petits bouts de code par ci par la, c'est faisable sans probleme, et ca s'applique tres bien aux patches, car ils corrigent le plus souvent des problemes tres localises et qui ne demandent pas de modifier les structures de donnees.
      Bref, la plupart des patchs peuvent en tirer parti, mais probablement pas tous, faut pas esperer installer un service pack sans rebooter.
      • [^] # Commentaire supprimé

        Posté par  . Évalué à 0.

        Ce commentaire a été supprimé par l’équipe de modération.

  • # Re: Vulcan, ou comment modifier des binaires quand bon vous semble

    Posté par  . Évalué à 1.

    ahem
    dans la famille open source et pour faire du patching à chaud de process image, y'a l'API Dyninst développée dans le cadre du projet Paradyn qui est pas mal (et multiplateforme).
    D'une manière générale, le process hijacking et le checkpointing sont sujet que le monde libre a pas mal balisé. Aussi bien à titre institutionnel (cherchez esky ou libpkct et regardez les dates) que bidouilleur (suffit de voir la somme colossale d'articles qui proposent de patcher un processus via ptrace ou autre).
    Sous Windows j'ai déjà vu des articles sur le process hijacking par des DLL

    http://www.cs.wisc.edu/~paradyn/papers/(...) (section Paradyn and Dyninst)
    http://www.cs.wisc.edu/~paradyn/release3.3/(...) (Dyninst only)
    http://www.phrack.org/show.php?p=59&a=8(...)
    http://www.phrack.org/show.php?p=59&a=12(...)

    En tout cas c'est exactement le même paradigme chez MS et à l'Université du Wisconsin.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.